SES のバウンス、苦情、拒否イベントをシミュレートする

SES のバウンス、苦情、拒否イベントをシミュレートする

シミュレーターアドレスを使って、実際の受信者にメールを送ることなく SES のバウンス、苦情、拒否通知をトリガーする方法。

Takahiro Iwasa
3 min read

SES には、実際の受信者に本物のメールを送信することなく、アプリケーションがバウンス、苦情、拒否通知をどのように扱うかをテストするためのシミュレーターアドレスが用意されています。詳細は公式ドキュメントを参照してください。

前提条件

始める前に、以下を完了させてください。

  1. AWS SES にメールアドレスを登録する。
  2. 登録したメールアドレスに対して Email Feedback Forwarding を有効化する。

Email Feedback Forwarding Setup

バウンスのシミュレーション

バウンスは以下でシミュレートできます。

Terminal window
aws ses send-email \
--from <YOUR_EMAIL> \
--subject test \
--text test

--from オプションで指定したアドレスに、バウンスが発生したことを示すメールが届きます。

Bounce Simulation Example

苦情のシミュレーション

苦情も同様のパターンで、異なるシミュレーターアドレスを指定します。

Terminal window
aws ses send-email \
--from <YOUR_EMAIL> \
--subject test \
--text test

苦情を示すメールが --from アドレスに送信されます。

Complaint Simulation Example

拒否のシミュレーション

拒否をシミュレートするには、EICAR テストファイルを添付したメールを送信する必要があります。SES のウイルススキャンがこれを検知します。

Terminal window
FROM=<YOUR_EMAIL>
MESSAGE='{"Data": "From: $FROM\nTo: $FROM\nSubject: test\nMIME-Version: 1.0\nContent-type: Multipart/Mixed; boundary=\"NextPart\"\n\n--NextPart\nContent-Type: text/plain\n\ntest\n\n--NextPart\nContent-Type: text/plain;\nContent-Disposition: attachment; filename=\"sample.txt\"\n\nX5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*\n\n--NextPart--"}'
MESSAGE=$(echo $MESSAGE | sed "s/\$FROM/$FROM/g")
aws ses send-raw-email \
--cli-binary-format raw-in-base64-out \
--raw-message "$MESSAGE"

FROM アドレスに拒否通知メールが届きます。

Reject Simulation Example

まとめ

この 3 つのシミュレーターアドレスを使えば、実際の受信者にメールを送ることなく、SES のバウンス、苦情、拒否通知をトリガーできます。[email protected][email protected] は、単純な send-email の呼び出しだけで、最も一般的な 2 つの通知経路をカバーしてくれます。おかげで、実際の受信者が関わるよりずっと前の段階で、そのハンドリングロジックを検証できます。拒否のケースはもう少し手間がかかり、単純なテキスト本文ではなく、EICAR フラグの立った添付ファイルを含む MIME ペイロードを伴う send-raw-email が必要です。ただ、この余分な手順を踏む価値はあります。バウンスを処理するのと同じコードパスがウイルススキャンによる拒否も正しく処理してくれると当てにするのではなく、明示的にテストしておくべきだからです。

About the author

Takahiro Iwasa

Takahiro Iwasa

Software Developer

This blog shares technical notes from hands-on projects—architecture, implementation, and AWS service integrations.