概要
Autobahn MTAを利用したメール送信時、メールの送信成功、バウンス受信等の各種イベントが発生した場合に任意のサーバに通知するWebhookのリクエストの内容を記述する。
ボディの署名
Webhookには署名キーが設定されており、通知されるボディの文字列に対して署名キーを用いて HMAC(SHA1) で署名し Base64 でエンコードした文字列をリクエストヘッダに含めている。
署名キーはAutobahn MTAのAPI又はダッシュボードで取得できる。
ヘッダ名は X-Autobahn-Webhook-Signature という名前で、値は以下の形式となっている。
[署名キーのsha256ハッシュ].[HMAC(SHA1)の署名]
この署名の正当性を検証することで、WebhookのリクエストがAutobahn MTAからのものかを判定することが出来る。
署名検証のサンプル(PHP)
<?php $body = file_get_contents ( 'php://input' ); // Webhookリクエストのボディを取得 $signature = $_SERVER [ 'HTTP_X_AUTOBAHN_WEBHOOK_SIGNATURE' ]; // リクエストヘッダから署名結果を取得 $key = "this is signature key" ; // API等で取得した署名キー $signed = explode ( '.' , $signature )[0]; // 署名キーのハッシュ $signature = explode ( '.' , $signature )[1]; // 署名
$hash = base64_encode ( $hash ); // Base64エンコード $result = $hash === $signature ? "MATCHED!" : "UNMATCHED..." ; // ヘッダの署名とリクエストボディ及び署名キーから算出した署名が一致しているかどうか var_dump( $result ); |
メールイベント
WebhookのリクエストはHTTPメソッドがPOST、ボディの形式はjsonフォーマット。
Webhookの一度のリクエストに含まれるデータの数は1件のみ。
[ { "mta_mail_id":"99999999999999999999", "email": "someone@example.com", "from": "from@example.net", "timestamp": 1337969592, "custom_args": { "user_id": "1234" }, "event": "Delivered", "batch_id": "A0001", "header_from": "header@example.org" } ] |
項目名
|
型
|
説明
|
---|---|---|
mta_mail_id | string | MTAが発行するメール毎の内部ユニークID |
timestamp | number | イベントが発生した時刻のunix timestamp |
string | 宛先アドレス | |
from | string | MTAが自動的に生成したenvelope-fromのアドレス |
custom_args | object | APIでメール毎に設定したcustom_argsの内容 |
event | string | 発生したイベント |
batch_id | string | APIで指定したbatch_id |
header_from | string | APIで指定したヘッダFROMアドレス |
トラッキング関係のイベント(Opened/Clicked)の場合、下記の情報も併せて含められている。
項目名
|
型
|
説明
|
---|---|---|
tracking_id | string |
一意に定められたトラッキング情報毎のユニークID |
beacon | boolean | 開封(ビーコン)の場合はtrue、そうでない場合はfalse |
url | string | 対応する元のリンク先URL ビーコンの場合は beacon と記載されている |
mark | string |
|
ip_address | string | アクセス元のIPアドレス |
user_agent | string | アクセス元のユーザーエージェント |
対応するイベントの種類
管理画面での名称
|
イベント名
|
対応配信
|
説明
|
---|---|---|---|
送信成功 | Delivered |
|
外部サーバがメールを受け付けた際に発生するイベント |
文面生成 | Processed |
|
APIが受け取ったメールリクエストを元に、メール文面を生成した時点で発生するイベント |
バウンス | Bounced |
|
外部サーバがメール送信時に500系のエラーを返してきた際、もしくは一旦外部サーバがメールを受け付けた後にバウンスメールを送信してきた際に発生するイベント
|
配信停止 | Dropped |
|
配信停止アドレス宛へのメール送信を試みた際に発生するイベント 文面生成・SMTPリレー・ブラックリストとは排他の関係 |
スパム | Spam Report |
|
外部サーバがメール送信時にスパム判定として拒否応答を返してきた際、もしくは一旦外部サーバがメールを受け付けた後にスパムとして判定した旨が記載されたバウンスメールを送信してきた際に発生するイベント |
メール開封 | Opened |
|
トラッキング情報を付与したメールが開封された際に発生するイベント |
URLクリック | Clicked |
|
トラッキング情報を付与したメールがのリンクがクリックされた際に発生するイベント |
ブラックリスト | Blacklisted |
|
ブラックリストアドレス宛へのメール送信を試みた際に発生するイベント 文面生成・SMTPリレー・配信停止とは排他の関係 |
SMTPリレー | Relayed |
|
SMTPリレーで受け取ったメールを元に、メール文面を生成した時点で発生するイベント |
バウンス理由
[ { "mta_mail_id":"99999999999999999999", "email": "someone@example.com", "from": "from@example.net", "timestamp": 1337969592, "custom_args": { "bounce_reason": "USER_UNKNOWN" }, "event": "Bounced", "batch_id": "A0001", "header_from": "header@example.org" } ] |
対応するイベントの種類
bounce_reason
|
理由
|
---|---|
NETWORK_ERROR | DNSによる名前解決失敗を原因としてSMTP接続できなかった場合のエラー |
TOO_MANY_RECIPIENT | SMTP接続内で、宛先メールサーバの送信対象アドレスの上限数を超えた場合のエラー |
HAS_MOVED | メールボックスが別のメールボックスに移動したが、自動でメールが転送されない場合のエラー |
FILTERED | ユーザがメールの受信を拒否している場合のエラー |
TOO_MANY_CONNECTION | 先メールサーバの同時接続数を超過した場合のエラー |
MAILBOX_FULL | 宛先のメールボックスが一杯で受信できなかった場合のエラー |
HOST_UNKNOWN | 宛先メールアドレスのドメインが無効なドメインだった場合のエラー |
SUSPENDED | 宛先メールアドレスのユーザアカウントが無効な場合のエラー |
USER_UNKNOWN | 宛先メールアドレスのローカルパートに該当するユーザが存在しない場合のエラー |
NO_RELAYING | 宛先メールサーバからSMTPリレーを拒否された場合のエラー |
SYNTAX_ERROR | 宛先メールサーバがSMTPコマンドを認識できなかった場合のエラー |
SECURITY_ERROR | 宛先メールサーバがセキュリティ上の理由やポリシー違反で受信拒否した場合のエラー |
NOT_ACCEPT | 宛先メールサーバが先方都合によりメールを受信できなかった場合のエラー |
REJECTED | 宛先メールサーバが具体的な理由を開示せずに受信拒否した場合のエラー |
BLOCKED |
宛先メールサーバに接続した際に、発信元メールサーバのIPアドレスやホスト名、 |
SYSTEM_FULL | 宛先メールサーバのディスクが一杯になった場合のエラー |
EXCEED_LIMIT | 宛先メールサーバのメール受信量が限界値を超えた場合のエラー |
MAILER_ERROR | 宛先メールサーバ上でプログラムが正常終了しなかった場合のエラー |
SYSTEM_ERROR | 宛先メールサーバ内でLDAPサーバへの接続失敗などのシステムエラーが発生した場合のエラー |
SPAM_DETECTED | 送信したメールがスパムとして検出された、あるいはDNSBLによってスパム送信ホストとして認識された場合のエラー |
EXPIRED | 送信したメールが宛先メールサーバに接続できないなどの理由で配送時間切れになった場合のエラー |
CONTENT_ERROR | 送信したメールの形式が宛先メールサーバで変換できない、もしくは処理できない形式だった場合のエラー |
MESSAGE_TOO_BIG | 送信したメールの文面サイズが宛先メールサーバの許容量を超えた場合のエラー |
UNKNOWN | バウンス解析理由を特定できなかった場合のエラー |
受信側サーバーのIPアドレス接続制限のためのホワイトリス
Webhookを受信するサーバーでIPアドレスの接続制限を設ける場合、
以下のIPアドレスによる接続を許可する設定が必要。
- 202.218.77.137
- 202.218.77.138
- 202.218.77.139
- 202.218.77.140
※ 接続許可が必要なIPアドレスは、告知の上変更する場合があります