メールの送信情報をWebhookで受け取る

システム連携にはいくつかの方法があります。まず一つはAPIを公開し、外部のシステムから呼んでもらうという方法です。これはCustomers Mail Cloudで言えばメール送信APIが該当するでしょう。このAPIによるシステム連携は、一対多の構成において有効です。API公開側はリクエストを待っていれば良く、API利用側も使う際にアクセスすれば良いだけです。API型の欠点として、情報のリアルタイムな送受信に問題があります。API利用側は新しいデータがあるのかどうか、リクエストしてみなければ分かりません。その頻度も毎分なのか、毎時間なのかリクエスト側に依存します。

その欠点を補う存在として注目されているのがWebhookです。Webhookは利用側があらかじめ特定のURLを指定します。そしてシステムに何かアクションがあれば、その指定したURLを呼び出してもらうのです。データを利用する側はリクエストを待っていれば良く、定期的なデータ存在確認が不要になります。

Customers Mail Cloudではメールの送信状態をWebhookで取得できるようになっています。今回はその実装方法を紹介します。

URLを設定する

まずCustomers Mail CloudのAPI設定画面にてWebhook URLを設定します。これは自分で管理しているサーバを指定します。Webhookは必ずインターネット上に公開されているサーバである必要がありますが、Basic認証や認証キーの設定も可能なので、これらの情報を使ってセキュアに保ってください。

指定できるイベントについて

Customers Mail Cloudはメール送信に関連したイベントをWebhookで通知できます。

  • bounced
    配信完了
  • queued
    送信キューに登録
  • succeeded
    送信成功
  • failed
    送信失敗
  • deferred
    送信延期

送信ステータスについて細かく取ることも、逆にbouncedだけを取得して送信完了したという情報だけを得ることもできます。

リクエストされる内容

Webhookは指定したURLに対してPOSTメソッドでリクエストされます。その際のリクエストボディーは次のようになっています。

キー 説明
server_composition サーバ構成名。sandboxなど
event_type deliveriesまたはbounces
event イベント内容。文字列ですが、中身はJSONの配列となっています

eventキーの内容はさらに次のようになっています。キーの下は配列です。

キー 説明
(キー) deliveriesまたはbounces
reason エラーの原因など
sourceIp IPアドレス
created 送信処理日時
envelopeTo 宛先
subject 件名
messageId メッセージID
envelopeFrom 送信元
senderIp 送信者のIPアドレス
status queued、succeededなど。Webhookのイベント同じ

例えばメール送信完了した際には次のようなリクエストボディーが送られてきます。eventキー以下をJSONとしてパースすれば、詳細な情報が分かるようになっています。

{
  server_composition: 'sandbox',
  event_type: 'deliveries',
  event: '{"deliveries":[{"reason":"","sourceIp":"","created":"2019-05-28 ' +
    '09:59:12","envelopeTo":"test@smtps.jp","subject":"テストメール","messageId":"\\u003C301456480.14899.1559005150211@mta01.sandbox.smtps.jp\\u003E","envelopeFrom":"info@return.sandbox.smtps.jp","senderIp":"153.149.8.217","status":"succeeded"}]}'
}

まとめ

Webhookを使うことで、逐一データを取りに行くことなく最新の情報が得られるようになります。ぜひ皆さんのシステム連携にお役立てください。

※実際にWebhookでエラー情報を連携する方法もアップしてありますので、参考にして下さい。 blog.smtps.jp

クラウドからのメール送信を簡単に。確実に。| Customers Mail Cloud