2015-08-20

SendGrid触ってみた【Webhook編】

SendGridでは、メール送信だけでなく、受信メールを処理することも可能です。 また、バウンスやUnsubscribe等のイベントに関する処理をすることも可能です。 これらの処理をするのにメール受信やイベントが発生したときに、任意のエンドポイントにHTTPでデータを送信するWebhookの仕組みを使います。

イベント通知としてのWebhook

ダッシュボードのSETTINGS>Mail SettingsでEvent NotificationをActiveにして、エンドポイント及び送信するイベント種別を選択します。

sendgrid-eventnotification

あとはエンドポイント側で受信する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からも確認することが可能です。

sendgrid-activityfeed

その他のイベント種別に関してはリファレンスを参照。

エンドポイント側では正常に受信した場合は2系のHTTPステータスコードを返却するようにしてください。2系以外のレスポンスを返却した場合は、SendGrid側でリトライ処理が行われます。

受信メール処理としてのWebhook

mx.sendgrid.netを向き先とするMXレコードを設定します。

sendgrid-inbound-mx

ダッシュボードのSETTINGS>Inbound ParseでInboundメールに関する設定をします。

sendgrid-inbound-setting1

対象のメールアドレスのホスト名と送信先のエンドポイントを設定します。

sendgrid-inbound-setting2

あとは設定したドメインに対してメールを送信すればOKです。

エンドポイントにはmultipart/form-data形式でデータが送信されます。 取得できるデータの詳細に関してはリファレンスを参照。

Activity Feedだとこんな感じで確認できます。

sendgrid-inbound-activityfeed

こちらも、エンドポイント側では正常に受信した場合は2系のHTTPステータスコードを返却するようにしてください。4系、5系を返却した場合はSendGrid側でリトライ処理が行われます。

このエントリーをはてなブックマークに追加