Customers Mail Cloudではメール送信に際して、SMTPとAPIの二種類を提供しています。昔からの使い慣れたSMTPを使っても良いですし、SMTPのポート制限されている場合でも使えるAPIを利用しても良いでしょう。
今回はこの二つのメール送信方法について、Pythonから利用する方法を紹介します。
APIユーザを作成する
API設定画面にて、APIユーザを作成します。アクセス権限として、SMTPは必須になります。API経由での配信を行う場合はSMTPに加えて、HTTP-APIも有効にしてください。
SMTPを使ったメール送信について
標準ライブラリだけで実装します。SMTPサーバのアドレスは指定されたものに置き換えてください。まず必要な変数を定義します。
# SMTPサーバ経由での送信です api_user = "api@smtps.jp"; api_key = "YOUR_API_KEY"; from_address = "info@smtps.jp"; from_name = "Mailer"; to_address = "to@smtps.jp"; to_name = "John Doe"; smtp_host = "sandbox.smtps.jp"; smtp_port = 10025; # メール配信内容です subject = "テストメール from Customers Mail Cloud"; body = "こんにちは。\r\n\r\n改行を入れました。";
メール送信には標準ライブラリの smtplib
と MIMEText
を使います。
import smtplib from email.mime.text import MIMEText
MIMETextを使ってメール送信内容のオブジェクトを作ります。
msg = MIMEText(body) msg["Subject"] = subject msg["To"] = f'{to_name} <{to_address}>' msg["From"] = f'{from_name} <{from_address}>'
そしてSMTPサーバに接続します。その際、APIユーザとAPIキーを認証情報として指定します。
server = smtplib.SMTP(smtp_host, smtp_port) server.login(api_user, api_key)
後はメール送信を実行します。
server.send_message(msg) server.quit()
これでSMTP経由でのメール送信が完了します。
API経由でのメール送信について
APIサーバについて
APIサーバのエンドポイントURLは契約しているプランによって異なりますのでご注意ください。
プラン名 | エンドポイントURL |
---|---|
無料トライアル | https://sandbox.smtps.jp/api/v2/emails/send.json |
Standardプラン | https://te.smtps.jp/api/v2/emails/send.json |
Proプラン | https://SUBDOMAIN.smtps.jp/api/v2/emails/send.json |
SUBDOMAINは、サービス利用開始時に申請いただいたものです
変数を設定する
変数はSMTPサーバ利用時とほぼ同等、SMTPサーバの代わりにエンドポイントURLを指定します。
# SMTPサーバ経由での送信です api_user = "api@smtps.jp"; api_key = "YOUR_API_KEY"; from_address = "info@smtps.jp"; from_name = "Mailer"; to_address = "to@smtps.jp"; to_name = "John Doe"; # メール配信内容です subject = "テストメール from Customers Mail Cloud"; body = "こんにちは。\r\n\r\n改行を入れました。"; url = "https://sandbox.smtps.jp/api/v2/emails/send.json";
配信内容は辞書形式で指定します。
data = { "api_user": api_user, "api_key": api_key, "to": [{ "name": to_name, "address": to_address }], "from": { "name": from_name, "address": from_address }, "subject": subject, "text": body }
辞書の内容については 共通仕様 | Customers Mail Cloud を参照してください。
送信を行う
ではAPIサーバのエンドポイントURLと配信情報のパラメータを使ってメール送信を行います。メール送信APIはPOSTメソッドを使います。HTTPアクセス標準ライブラリの urllib.request
を使います。また、辞書からJSONに変換するために json
もインポートします。
import urllib.request import json
インポートしたら、HTTPメソッドとヘッダーの定義をし、HTTPリクエストオブジェクトを作成します。
method = "POST" headers = { "Content-Type": "application/json", "Accept": "application/json" } json_data = json.dumps(data).encode("utf-8") request = urllib.request.Request(url, data=json_data, method=method, headers=headers)
そしてHTTPリクエストを実行します。
try: with urllib.request.urlopen(request) as response: response_body = response.read().decode("utf-8") print(response_body) except urllib.error.HTTPError as err: print(err.read())
送信が成功すると、下記のようにメールIDが返ってきます。
{"id":"\u003C1027790501.15820.1560515882392@mta01.sandbox.smtps.jp\u003E"}
エラーがあると、下記のようにエラー内容が返ってきます。
b'{"errors":[{"code":"02-001","field":"text","message":"text is required."}]}'
まとめ
サーバ上の制限によってSMTPが使えない場合でもHTTP経由でメール配信が行えますので、APIをぜひ使ってみてください。今回はPythonを使いましたが、汎用的なHTTPアクセスを行っていますので、他のプログラミング言語でも簡単に実装できるでしょう。
さらに詳しい使い方についてはEmail Sending APIを参照してください。