Amazon SES と SendGrid のバウンスの取り扱いについてまとめてみた

2020.10.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

おはようございます、もきゅりんです。

先日の Amazon SES でメール送信するときのベストプラクティスまとめ(2020年10月) でまとめた通り、メール配信サービスを利用する上で、避けて通れないのがメール受信率に関わってくる E-mail レピュテーションです。そして、そのレピュテーションを低下させないためにはバウンスレート、苦情率を管理していく必要があります。

本稿では、メール配信サービスとして利用される機会が多そうな Amazon SES(以下SES) と SendGrid の2サービスのバウンスへの対応と管理についてまとめてみました。

なお、どちらのサービスが優劣であるかといった比較はしません。(利用したい機能や環境、状況によって選択肢が異なってくるかと思います。)

比較表

自分がポイントと考えた項目に対して、SES と SendGrid の対応を記載しました。

ポイント SES グローバルサプレッションリスト SES アカウントサプレッションリスト SendGrid バウンスリスト
対象範囲 すべての Amazon SES カスタマー リージョンの AWS アカウント の Amazon SES カスタマー アカウントカスタマー
リスト追加の条件 ハードバウンス ハードバウンス または 苦情 (両方の指定可) ハードバウンス
有効 / 無効の設定 無効にできない デフォルト有効 (2019 年 11 月 25 日以降の Amazon SES の使用開始) 無効にできない
送信した場合 送信できない 送信できない 送信できない
送信するとバウンスレートにカウント する しない 繰り返しバウンスを発生させ続けるとアカウント停止の可能性はある
送信すると送信クォータにカウント する する メール送信通数としてはカウントされる
リストの編集対応 コンソールでの削除以外できない コンソールおよびAPIで追加・削除・表示・一括編集なども可能 コンソールおよびAPIで削除・表示・一括編集なども可能

SES で注意すべきなのは、グローバルサプレッションリスト(以下GSリスト)の概念です。GSリストは照会して事前にリストを確認することはできず、バウンス通知によってしかどのアドレスがリスト対象かを知ることはできません。

2020年8月の Amazon SES でアカウントレベルのサプレッションリストからの E メールアドレスのインポートと削除を一括で実行できるようになりました によって、ハードバウンスの発生時、苦情の発生時、またはそれらの両方が発生した時にアドレスをアカウントサプレッションリスト(以下ASリスト)に追加できるようになったため、ASリストが有効(デフォルトで有効)になっていれば、それほどナーバスになる必要はないかも知れません。

(自分がドキュメントを見ていた限り、GSリストとASリストの両方に含まれているメールアドレスに送信した場合、バウンスレートにカウントされるかどうか明記している箇所が見当たりませんでした。本稿では両方のリストに含まれている場合、ASリストが優先されてバウンスレートにはカウントされない、という想定とします。)

GSリストと ASリストと送信、バウンスレートの関係がいま一つ理解しにくかったので、図にしてみました。

splist_mail_flow2

線の先が矢印になっているものは、先に進みます。線の先が四角になっているものはそこが終点となるイメージです。(e.g. ASリストからGSリストへの線は、ASリストからGSリストに追加されて終点です。)

関連する概念・用語について

バウンスとは

送信したメールが受信側メールサーバに配信できないとき、バウンスが発生したといいます。(送ったメールが弾き返ってくるイメージでしょうか)

バウンスには次のように、ハードバウンスとソフトバウンスがあります。

  • ハードバウンス: 永続的な電子メール配信の失敗。たとえば、メールアドレスが無効であったり存在しない場合です。
  • ソフトバウンス: 一時的な電子メール配信の失敗。たとえば、メールボックスがいっぱいである、接続が多すぎる(スロットリングとも呼ばれる)、または接続がタイムアウトするなどです。

サプレッションリストとは

SES には下記のように2つのサプレッションリストがあります。

  • グローバルサプレッションリスト: Amazon SES の利用者全体を対象として、最近ハードバウンスを引き起こした受信者のメールアドレスのリストです。デフォルトですべてのAmazon SESアカウントに適用されます。他の Amazon SES ユーザーのアカウントに関連付けられているメールアドレスが含まれているため、リストを確認することはできません。

Using the Amazon SES global suppression list - Amazon Simple Email Service

  • アカウントレベルのサプレッションリスト: 現在の AWS リージョンの AWS アカウントに適用されます。2019年11月25日以降にAmazon SESの使用を開始した場合、アカウントはデフォルトでバウンスと苦情の両方にアカウントレベルのサプレッションリストを使用します。一括追加や一括削除も可能です。

Using the account-level suppression list - Amazon Simple Email Service

  • バウンスリスト: SendGrid ではバウンスが発生した宛先のメールアドレスのリストを「バウンスリスト」と呼び、このリストへのメール送信ができません。送信したい場合は、バウンスリストからメールアドレスを削除する必要があります。

バウンス(メールの不達)を管理する - ドキュメント | SendGrid

バウンスとメール送信機能について

SES では、「ハードバウンスレートを5%未満に保つようにしてください。」と明記されています。 (苦情率は0.1%未満) アカウントのバウンスレートまたは苦情率が高すぎる場合、アカウントを審査中にするか、アカウントのメール送信機能を一時停止する場合があります。

SendGrid では特に定量的な指標は明記されていません。繰り返しバウンスが発生してレピュテーションを下げる要因となるので注意してください。レピュテーションが下がるとアカウント停止の危険性があります。

送信クォータについて

SES の運用で考慮すべき送信クォータについてですが、 SendGrid ではプランによる月間通数上限(上限超過分は課金すれば送信可能)とWeb APIのバージョン及びエンドポイントによって制限が異なります。 *1

価格 | SendGrid

単位時間あたりのWeb APIリクエスト数に制限はありますか? | SendGrid

最後に

SES と比較検討されることが多そうな SendGrid ではバウンスをどのように取り扱っているのだろう、という素朴な疑問から比較表をまとめてみました。

SendGrid はシンプルに利用できるサービスですね。

SES は、アカウントサプレッションリストがこれまでの SES の運用の負担をかなり軽減してくれる機能のように思いました。

以上となります。

どなたかのお役に立てば幸いです。

参考

脚注

  1. 例えば、Web API v2 では1秒あたり3,000リクエストを超えないことを推奨、v3メール送信エンドポイントは最大秒間10,000リクエストまで呼び出し可能など。