Transactional Email APIを使うと、メール送信に関する結果データを参照したり、ブロックリストの編集などを行えます。Webhookとは異なり、データを任意のタイミングで取得できますので、バッチ処理などに向いているでしょう。
今回はそのTransactional Email APIの簡単な使い方を紹介します。
Pythonから使ってみる
今回はPythonから利用するサンプルコードを紹介します。HTTPリクエストを行うので、urllib.request
と、JSON出力用に json
をインポートします。
import urllib.request import json
まず必要な変数を用意します。APIユーザ、APIキーは管理画面で作成してください。
api_user = 'API_USER'; api_key = 'API_KEY';
次にAPIのURLを指定します。今回は送信完了の一覧を取得しますので、次のようなURLになります。
version = 'v2' resource = 'deliveries' action = 'list' format = 'json' url = f'https://api.smtps.jp/transaction/{version}/{resource}/{action}.{format}'
上記の変数は他にも下記が指定できます。なお、指定できるアクションはリソースによって異なります。詳しくは共通仕様 | Customers Mail Cloudをご覧ください。
変数名 | 値 |
---|---|
version | v1またはv2 |
resource | deliveries, bounces, blocks, statistics, auditlogs |
action | list, download, delete, |
format | xmlまたはjson |
今回は送信完了(deliveries)の一覧(list)をJSONで取得する、という指定になります。
処理を実行する
処理を実行する際には、APIユーザとAPIキー、そしてサーバの接続先(trial、standard、proの指定)を指定します。送信完了データの取得時には日付も必要なので、それも指定します。
# サーバの指定 server_composition = 'sandbox' # 日付の指定 date = '2020-03-09'
さらにポストするデータの組み立てと、必要なコンテンツタイプの指定を行います。
data = { 'api_user': api_user, 'api_key': api_key, 'server_composition': server_composition, 'date': date } headers = { 'Content-Type': 'application/json', }
これで送信を行えば、結果が返ってきます。
try: req = urllib.request.Request( url, json.dumps(data).encode('utf-8'), headers ) with urllib.request.urlopen(req) as res: body = res.read().decode('utf-8') print(json.dumps(body, sort_keys=True, indent=2)) except urllib.error.HTTPError as err: raise Exception(err.read())
この結果は、送信完了したメールの一覧になります。デフォルトで10件返ってきます。
{ "deliveries": [ { "apiData": "", "created": "2020-03-09 13:28:48", "from": "info@smtps.jp", "messageId": "<78bf87c0-61be-11ea-b350-0661780002d9@mta02.sandbox.smtps.jp>", "reason": "", "returnPath": "info@return.sandbox.smtps.jp", "senderIp": "", "sourceIp": "127.0.0.1", "status": "queued", "subject": "テストメール from Python", "to": "tester@smtps.jp" }, : ] }
まとめ
Transactional Email APIを定期的に実行することで、メール配信状況を簡単に集計できるようになります。大量メール送信時にはリアルタイムよりも、配信完了してから集計した方が効率的な場合もあるでしょう。ぜひ活用してください。