Transactional Email APIを使って送信完了したメールを一覧取得する(Python編)

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を定期的に実行することで、メール配信状況を簡単に集計できるようになります。大量メール送信時にはリアルタイムよりも、配信完了してから集計した方が効率的な場合もあるでしょう。ぜひ活用してください。

Transactional Email API