SendGridでは、メール送信だけでなく、受信メールを処理することも可能です。 また、バウンスやUnsubscribe等のイベントに関する処理をすることも可能です。 これらの処理をするのにメール受信やイベントが発生したときに、任意のエンドポイントにHTTPでデータを送信するWebhookの仕組みを使います。
イベント通知としてのWebhook
ダッシュボードのSETTINGS>Mail SettingsでEvent NotificationをActiveにして、エンドポイント及び送信するイベント種別を選択します。
あとはエンドポイント側で受信するJSONを処理すればOKです。
SMTP APIで適切なメールアドレスに送信した場合は以下のようなJSONが送信されます。
{
"response": "250 <IwiIP8ULSaKC0XLon6rtlQ@ismtpd0017p1sin1.sendgrid.net> Queued mail for delivery ",
"sg_event_id": "jka-DkIvT5WdObQ5vW1Lng",
"sg_message_id": "IwiIP8ULSaKC0XLon6rtlQ.filter-297.26238.55D1EBE25.0",
"event": "delivered",
"email": "hoge@example.com",
"timestamp": 1439820771,
"smtp-id": "<IwiIP8ULSaKC0XLon6rtlQ@ismtpd0017p1sin1.sendgrid.net>",
"category": [
"HogeCategory"
],
"hoge_key": "fuga_value"
}
{
"sg_event_id": "ijkMsSRdQW2W4d0Ov8l0lA",
"sg_message_id": "IwiIP8ULSaKC0XLon6rtlQ.filter-297.26238.55D1EBE25.0",
"event": "processed",
"email": "hoge@example.com",
"smtp-id": "<IwiIP8ULSaKC0XLon6rtlQ@ismtpd0017p1sin1.sendgrid.net>",
"timestamp": 1439820771,
"category": [
"HogeCategory"
],
"hoge_key": "fuga_value"
}
存在しないメールアドレスにそれぞれ送信した場合は以下のようなJSONが返却されます。(バウンス)
{
"status": "550",
"sg_event_id": "-y2o80t1S02IygEBSOq9Vw",
"reason": "550 Requested action not taken: mailbox unavailable ",
"sg_message_id": "VX_aq-VlSke8q6kONhoRoA.filter-353.27702.55D1EC407.0",
"event": "bounce",
"email": "fuga@example.com",
"timestamp": 1439820866,
"smtp-id": "<VX_aq-VlSke8q6kONhoRoA@ismtpd0019p1sin1.sendgrid.net>",
"type": "blocked",
"category": [
"HogeCategory"
],
"hoge_key": "fuga_value"
}
{
"sg_event_id": "kLIb9kJVQ2KHolcvIYTLbQ",
"sg_message_id": "VX_aq-VlSke8q6kONhoRoA.filter-353.27702.55D1EC407.0",
"event": "processed",
"email": "fuga@example.com",
"smtp-id": "<VX_aq-VlSke8q6kONhoRoA@ismtpd0019p1sin1.sendgrid.net>",
"timestamp": 1439820865,
"category": [
"HogeCategory"
],
"hoge_key": "fuga_value"
}
同様の情報をダッシュボードのActivity Feedからも確認することが可能です。
その他のイベント種別に関してはリファレンスを参照。
エンドポイント側では正常に受信した場合は2系のHTTPステータスコードを返却するようにしてください。2系以外のレスポンスを返却した場合は、SendGrid側でリトライ処理が行われます。
受信メール処理としてのWebhook
mx.sendgrid.netを向き先とするMXレコードを設定します。
ダッシュボードのSETTINGS>Inbound ParseでInboundメールに関する設定をします。
対象のメールアドレスのホスト名と送信先のエンドポイントを設定します。
あとは設定したドメインに対してメールを送信すればOKです。
エンドポイントにはmultipart/form-data形式でデータが送信されます。 取得できるデータの詳細に関してはリファレンスを参照。
Activity Feedだとこんな感じで確認できます。
こちらも、エンドポイント側では正常に受信した場合は2系のHTTPステータスコードを返却するようにしてください。4系、5系を返却した場合はSendGrid側でリトライ処理が行われます。