AWS SESで大量メールを送る際のbounce対策
概要
AWS SESを使用して、数千件のメールを送信する処理を使用する際にbounce対策が必要となり、bounceで届いたメールをSESが受け取ったらSQSで通知して...DynamoDBにいれ...
再送信時にDBを見て...的な対応をしようと思っていたらAWSが素晴らしい機能を作っていてくれたのでメモ
bounceとは
bounceメールとは何らかの理由で送信先に届かなかったメールのことです。
bounceになってしまう理由はいくつかあり、大きく分けて2種類のbounceがあります。
ソフトバウンス
- 一時的な問題でメールが送信先に届かない
- 受信側のメールサーバーの容量がいっぱい
- 受信側のメールサーバで障害が起こっている etc...
ハードバウンス
- 恒久的な何かしらの問題でメールが届かない
- メールアドレスが無効になっている
- メールアドレスが存在しない etc...
※ AWS SESはハードバウンスのみでソフトバウンスはバウンス率にはカウントされないようです。
なぜ、bounceの対策をしないといけないのか
送信したメールに大量のbounceが発生すると、バウンス率が高くなります。
そして、一定の水準を超えるとそのアカウントのメール配信が停止されてしまうからです。
Q4. アカウントのレビューや、送信の一時停止の原因になりえるバウンス率は公開されていますか?
最良の結果を得るには、バウンス率を 2% 未満に維持する必要があります。これより高いバウンス率は、E メールの配信に影響する可能性があります。
バウンス率が 5% 以上になると、アカウントはレビュー対象になります。バウンス率が 10% 以上の場合は、高いバウンス率の原因となった問題が解決するまで、以後の E メール送信を一時停止することがあります。
↑こちらの画像では0.03%(bounceメールの対策済み)なので問題はないのですが、大量にメールを送る機能を作成した場合などは、予め対応をいれることをおすすめします。
サプレッションリストを使おう
実際に、bounceメールの対策として以下のような対応をしようといわれます。
宛先リストをクリーンに保つ。
不正なメールアドレスや、反応の一切ない受信者は定期的に宛先リストから削除 etc...
この仕組、どうやって作ったらいいんだ??
先に概要に上げたように送信できなかったメールアドレスをDBnに格納してメール送信のたびにチェックさせたらいいんだっけ??となりますが、サプレッションリストを使うと...
上のように2つの設定を有効にするだけで
supression listにbounceで返ってきたメールアドレスが追加されていきます。
このsupression listに追加されたメールアドレスにはSESからはメールが送られないようになっているので、
SES経由でのメール送信する場合は、これ以上特に設定をする必要が有りません。
aws sesv2 list-suppressed-destinations --region ap-northeast-1 --profile aaa
↑のCLIコマンドでsupression listに登録されているアドレスを一括で 取得でき
aws sesv2 list-suppressed-destinations --start-date 1604394130
--start-date
や--end-date
と組み合わせると、いつ、どのメールアドレスがsupression listに登録されたかなど簡単に抽出できるため万が一ユーザにメールが届かないなどの問い合わせがあった場合も
supression listに登録されていないかすぐに確認することができます。