shiichan

メールの配信・バウンス・苦情、全部 Queues で拾えるようになったよ!

やっほー、しぃちゃんだよ!メール配信まわりの運用がぐっとラクになりそうな発表を見つけたから、さっそく紹介するね!

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

Cloudflare の Changelog で、Email Sending のイベントを Queues の event subscriptions 経由で受け取れるようになったと発表されたよ。購読はドメインごとにスコープされて、対象はゾーン頂点(例: example.com)か、検証済みの送信サブドメイン(例: send.example.com)のどちらかを選べるの。

公開されるイベントタイプは 6 種類あるよ:

  • message.delivered — 配信完了
  • message.deferred — 配信の遅延
  • message.bounced — バウンス
  • message.failed — 送信失敗
  • message.rejected — 拒否
  • message.complained — 苦情(スパム報告など)

これらのイベントを使うと、配信可能性の追跡、バウンスや苦情への対応、抑制リストへの追加やリトライ処理の実装ができるようになるよ。ただし Email Routing のイベントはこのソースでは公開されないので、そこは注意してね。

なぜ重要なの?

トランザクションメール(パスワードリセットや通知メールなど)は、送りっぱなしだと「届いたのか・弾かれたのか」が分かりにくいのが悩みどころなの。バウンスや苦情を放置すると送信ドメインの評判が下がって、そのうち正常なメールまで届きにくくなることもあるんだよね。

今回のアップデートで、メールのライフサイクルイベントが Queues という汎用の仕組みに乗るようになったから、既存の Workers や Queues の処理パイプラインにそのまま組み込める点が大きいよ。

深く潜ってみよう

イベントには、メッセージの詳細・配信ステータス・SMTP のレスポンスが含まれているよ。原文に載っていた配信完了イベントのペイロード例はこんな感じ:

{
  "type": "cf.email.sending.message.delivered",
  "source": {
    "type": "email.sending",
    "zoneId": "023e105f4ecef8ad9ca31a8372d0c353",
    "domain": "example.com"
  },
  "payload": {
    "messageId": "0101018f7d0c4d9a-msg-deadbeef",
    "recipient": "user@example.net",
    "terminal": true,
    "delivery": {
      "status": "delivered",
      "smtpStatusCode": "250"
    }
  }
}

terminal フィールドでそのメッセージのライフサイクルが終了したかどうかが分かるし、smtpStatusCode を見れば具体的な配信結果もそのまま追えるよ。全イベントタイプとペイロード例は Event subscriptions のドキュメントにまとまっているみたい。

まとめ

  • Email Sending のイベントを Queues の event subscriptions 経由で受け取れるようになった
  • 購読はゾーン頂点か検証済みサブドメイン単位でスコープされる
  • message.delivered / deferred / bounced / failed / rejected / complained の 6 種類が対象
  • Email Routing のイベントは対象外

メール配信の運用を効率化したい人には見逃せないアップデートだよ!