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

Transactional Email APIを使うと、メール送信に関する結果データを参照したり、ブロックリストの編集などを行えます。Webhookとは異なり、データを任意のタイミングで取得できますので、バッチ処理などに向いているでしょう。

今回はそのTransactional Email APIの簡単な使い方を紹介します。

Rubyから使ってみる

今回はRubyから利用するサンプルコードを紹介します。HTTPリクエストを行うので、httparty をインポートします。

require('httparty')

まず必要な変数を用意します。APIユーザ、APIキーは管理画面で作成してください。

api_user = 'API_USER';
api_key = 'API_KEY';

次にAPIのURLを指定します。今回は送信完了の一覧を取得しますので、次のようなURLになります。

version = 'v2'
resource = 'deliveries'
action = 'list'
format = 'json'
url = "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'

さらにポストするデータの組み立てと、必要なコンテンツタイプの指定を行います。

body = {
    api_user: api_user,
    api_key: api_key,
    server_composition: server_composition,
    date: date
}
headers = {
    'Content-Type': 'application/json'
}

これで送信を行えば、結果が返ってきます。

begin
  res = HTTParty.post(url, {
    headers: headers,
    body: body.to_json
  })
  puts res.body
rescue => e
  puts e
end

この結果は、送信完了したメールの一覧になります。デフォルトで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