SESのバウンス情報をメールで受け取る方法

# はじめに

AWS SESを使用してメールを配信する際に、何らかの原因により正常に配信できなかったメールを`バウンスメール`と呼びます。

SESではバウンスメールの発生率が一定の割合を超えると、[メール配信機能が停止されるというヤバめの仕様](https://aws.amazon.com/jp/premiumsupport/knowledge-center/ses-resolve-account-review-pause/)があります。
そのため、SESを利用するエンジニアにとって、バウンスメール対策は気を配らなくてはいけないポイントとなっています。

SESにてバウンスメールが発生した際、マネージメントコンソール上からでは、どのアドレスを宛先としているメールにてバウンスが発生しているかを確かめる術がありません。(2021年7月現在)
バウンスが発生している宛先がわからないとトラブルシュートが進みません。困りました。。

なんと、SNSとSESの標準機能だけを利用して、バウンス対象アドレスが含まれたバウンス情報をメールで受信することが可能です。
この記事では、その手順について記載します。

# 実現すること

`SESとSNSの標準機能のみを使用して、バウンス発生時にバウンス対象アドレスを含むバウンス情報をメールで受け取る`


# 設定手順

## SNSトピックの作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/42f1168b-7b87-27f8-459c-edce83df1727.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/2152b23e-bf41-080d-3aab-e3361148ed22.png)

上記以外はデフォルトで問題ありません。

## SESの設定

"Email Addresses" -> "Verify a New Email Address"から送信元として使用するアドレスを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/8f095b0a-490e-f0bb-d600-0c8d703ce576.png)

AWSから確認メールが来るので、リンクに飛んでメールアドレスを認証させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/9327bc20-ae47-f01f-9191-8766f9ca4b7a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/dec54cd6-784e-8d73-3616-6b4922c9aadf.png)

認証したメールアドレスから同一メールアドレスにテストメールを送信します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/cb7cdda7-8a2d-84e0-006d-bacc2fa411f9.png)

メールが届いたことを確認します。


"Email Addresses" -> "Notifications" -> "Edit Configuration"
Bouncesに作成したSNSトピックを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/1bca9c62-2a4e-f28f-60ab-e66648492b9b.png)

original headerの内容は[Mailオブジェクト](https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/notification-contents.html#mail-object)を参照してください

> 元の E メールヘッダーの内容については、Amazon SNS 通知の内容の mail オブジェクトを参照してください。
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/configure-sns-notifications.html#configure-feedback-notifications-console

## SNSにてTopicにサブスクリプションを紐付ける

プロトコルをEメールとして、バウンス情報を送信するメールアドレスをエンドポイントに指定します。
(それ以外はデフォルトでOKです)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/ef7a9800-7104-24a4-6f4e-5e8966c56729.png)

エンドポイントに指定したメールアドレス宛に、確認メールが届くのでリンクに飛んでConfirmします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/ad8beff0-7950-bcc4-f969-7e91b68be24d.png)


## Bounceのテストを実施する

SESからメールアドレスを選択して、Send Test Mailにて以下の通り、bounceテスト用のメールアドレスを指定して、送信します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/46164afd-1398-aff2-f011-d0f77171b19e.png)

bounceテスト用のメールアドレスについては[こちら](https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-email-simulator.html)を参照

バウンス情報を受信することができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435280/cc1943d2-38b2-f5f2-0aa7-ac248178117b.png)

メールの内容を見ると、バウンス対象となっているメールアドレスも表示されています。



# 参考

https://aws.amazon.com/jp/premiumsupport/knowledge-center/ses-resolve-account-review-pause/
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/notification-contents.html#mail-object
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-email-simulator.html
https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/sending-email-global-suppression-list.html#sending-email-global-suppression-list-considerations