ソリューション技術部の杉嵜です。BMIが18.5付近で反復横跳びしています。
今回の題材はAWSのAmazon Simple Email Service(SES)で、その中でもバウンス(Bounce)と苦情(Complaint)について取り扱います。Amazon SESを利用することでメール送信に関する構築や運用はかなり楽になりますが、それでも前提知識として求められることは少なくありません。その中でもバウンスメールや苦情は、SESでメールを運用する場合でも少なからず考慮が必要になるものです。これらに対する運用を疎かにするとメール送信ができなくなる恐れもあるため、仕組みを正しく理解した上でシステム設計段階から考慮する必要があります。
SESで試行錯誤する際の注意事項
記事を読んでSESの動作を確認する読者もいると思われますが、自前で取得していないメールアドレスの文字列をテキトーに作って、そこにメールを送る行為は厳禁です。正当なメール送信にも支障をきたします。何かの拍子に誤送信しかねないので、テストデータでもそういう文字列を作るのは控えた方が無難です。tekitou.na.moji
にcommercial at*1やgmail.com
を結合して使ってはいけません。それでもテストデータやドキュメントにアドレスを書きたい場合、せめてexample.com
等のテスト用やドキュメント用に設けてあるドメインにしましょう。
適当なアドレスに送るのは迷惑をかけるからダメ、と何となくわかる人は多いでしょう。ですがその迷惑行為を続けた結果として、正当なメールを送る行為に支障をきたすので自分達も困ります。
メール送信時の動作
SESにメール送信をリクエストすると、すぐに送信先のメールサーバへメールが送られます。通常は送信先のメールアドレスが存在していれば受信されて終了ですが、それだけで終わらないケースも少なからず存在します。それがBounce(バウンス)とかComplaint(苦情)と呼ばれるものです。
Bounce
メールにおけるBounce(バウンス)とは、送信したメールが何らかの事情で相手に届かず差し戻されることを指し、原因によって更に「ソフトバウンス」と「ハードバウンス」に分けられます。具体的にはこのように分けられます。
- ソフトバウンス
- 受信者側のメールサーバが応答しない
- 受信者のメールボックスが一杯
- メールの大きさが受信者側のメールサーバでの上限を超えた
- 添付ファイルが受信者側のメールサーバで拒否された
- ハードバウンス
- アドレスが存在しない
- メールがスパムメールとして拒否された
ソフトバウンスの場合、そのメールアドレスに対して再度メールを送った場合に受信してもらえる可能性があります。ただし原因によってはメールの内容を見直す必要があります。メールサーバが応答しない場合やメールボックスが一杯の場合は、時間が経てば解決されていると見込んだ上で、時間を空けて再送することになるでしょう。メールが大きすぎる場合、大抵は添付ファイルを見直すことになります。添付ファイル自体を直接拒否された場合も同様です。
一方でハードバウンスの場合、そのメールアドレスに再送しても受信されることはまずありません。メールアドレスに誤字脱字が紛れ込むケースもあれば、元々存在していたメールアドレスのアカウントが削除されるケースもありますが、いずれもそのアドレスに送り続ける必要は無いと言えます。スパムとして拒否されたケースは、アドレスを使う個人が拒否しているケースとメールサーバが最初から拒否してしまうケースもありますが、どちらにせよ以降のメールもスパムと判定されるだけなので再送はNGです。
Complaint
Complaint(苦情)は、メールの受信者が迷惑メールだと判断・報告したことを指します。受信者側のメールサーバを運用しているインターネットサービスプロバイダ(ISP)などからフィードバックループ(FBL)として間接的に送られてきますが、FBLに対応しているのは一部のISPのみです。イメージとしては、受信者が受信したメールに対して「迷惑メールを報告」や「フィッシングを報告」を行い、その旨をISPが代わりに通知している形となります。
Complaintの場合、報告してきた受信者のメールアドレスが伏せられることも多いです。Amazon SESは推定してアドレスの一覧を出す機能を有していますが、あくまで推定であり直接報告されたアドレスでない可能性がある認識はしておきましょう。またComplaintはBounceと異なり、受信者が明示的に迷惑メールであると判断した時に発生するものです。届いた場合は、送信しているメールの内容や頻度に問題が無いか見直す必要があります。
Amazon SESでの動作
SESではソフトバウンスを受けた場合、その元となったメールの送信を何度か再試行します。また再試行してもソフトバウンスを受け続けた場合、及びハードバウンスやComplaintを受けた場合は、その内容をメールやAmazon SNSのSNSトピックへ通知します。
Amazon SES のイベント通知の設定 - Amazon Simple Email Service
デフォルトでは「フィードバック転送」が有効になっており、BounceやComplaintの内容がメール転送という形でSESから送られてきます。SESによる転送先は、元のメールの送信方法とパラメータによって異なります。SMTPインターフェイスで送信した場合はMAIL FROM
コマンドのアドレス、つまり差出人として設定したアドレスになります。Amazon SES APIで送信する場合、ReturnPath
パラメータ等で通知先のアドレスを指定しておくことができます(参考リンク)。
フィードバック通知を設定することで、通知をSNSトピックに送ることもできます。こちらはBounceとComplaint、メール配信をした時のDeliveryで3つ個別にSNSトピックを設定できるため、Complaintを受けた時だけのメール通知を設定したり、配信したメールの全履歴を控えておくような細かい運用ができます。
注意点として、BounceとComplaintの通知はフィードバック転送かSNSトピックのいずれかで必ず受け取らなければなりません。両方を無効化・なしには設定できますが、その場合はフィードバック転送による通知がSESから送られてきます。
サプレッションリスト
メール配信における一般的なサプレッションリストはメールアドレスの一覧であり、リストに含まれているメールアドレスへのメール配信は行わないようにしています。Amazon SESにもサプレッションリストがあり、挙動が異なる2種類のリストに分かれていますが、いずれも載っているメールアドレスへのメール配信ができないように制御しています。また基本的にハードバウンスやComplaintを返したアドレスが自動的に登録されるようになっています。
グローバルサプレッションリストはAmazon SESのサービスが内部で管理しているリストで、全てのアカウントに適用されます。このリストには主に、直近にハードバウンスを返したアドレスが登録されており、このアドレスへのメール配信をリクエストするとSES自体からハードバウンスの通知が届きます。メール送信も行われません。AWSのユーザがグローバルサプレッションリストの中身を直接確認する方法はなく、追加削除の権限も無ければ削除リクエストの機能もありません。
アカウントレベルのサプレッションリストは文字通りAWSアカウント毎に用意されるリストです。グローバルサプレッションリストと異なり、対象アドレスへのメール配信をリクエストしてもバウンス通知は届きません。メール送信が行われない点は共通しています。このリストは手動での追加・削除ができるほか、デフォルトではハードバウンスかComplaintを受けたメールアドレスが自動で登録されます。更に設定セットでの制御を使うことで、SES単位での細かなリスト管理もできます*2。
SESでのEメール配信停止
BounceやComplaintに関連した話で、運用上無視できないものとしてSESでのメール配信停止があります。AWSではアカウント毎にバウンス率や苦情率を監視しており、これが高いAWSアカウントでは最悪、Amazon SESでのメール送信が一切できなくなります。なおバウンス率に計上されるのはハードバウンスのみであり、ソフトバウンスを繰り返した場合でもバウンス率は上がりません。
Amazon SES 送信レビュープロセスに関するよくある質問によると、基準となる数値は以下の通りです。ただし計算に使われるのは全メールではなく、送信元の送信数などを基準に選出した上で算出されます*3。
バウンス率 | 苦情率 | |
---|---|---|
最良の結果 | 2%未満 | 0.1%未満 |
レビュー対象 | 5%以上 | 0.1%以上 |
一時停止 | 10%以上 | 0.5%以上 |
「レビュー対象」となった場合、引き続きメール送信はできます。しかしAWSより提示された猶予期間の間にバウンス率や苦情率、メールの内容を改善する必要があり、改善がみられないと判断された場合は停止されることになります。またレビューを繰り返していたり、AWSサービス利用規約違反などで深刻な場合、これらの数値にかかわらず停止されることもあり得ます。
AWSに停止されないために
テキトーなアドレスに送るのはやめましょう。記事冒頭の話になりますが、存在しないアドレスでハードバウンスになったり、届いてしまった場合は苦情につながります。またISPは使用されていないアドレスをスパムトラップとして確保していることがあり、そのアドレスに送ってしまうとスパム判定される可能性が高くなってしまいます。
バウンスや苦情の発生状況をモニタリングしましょう。バウンス率や苦情率はCloudWatchのメトリクスで取得できるため、アラームの設定も容易です。また苦情は少数でも致命的になりやすいので、利用規模によっては1件でも検知できるようにすると良いでしょう。
メールの送信先は定期的に見直しましょう。アカウントレベルのサプレッションリストに自動登録されたメールアドレスは、それ以降もハードバウンスを返す可能性が高いアドレスです。リストによって送信されないようになっていますが、メールマガジン等の場合は送信先一覧からも削除して今後送らないようにしましょう。SESのサプレッションリストに自動登録させない設定で使う場合、ハードバウンスを繰り返しバウンス率上昇の原因になりかねないので特に注意しましょう。
シミュレート用のアドレスでバウンスや苦情をシミュレートしましょう。Amazon SESにはbounce@simulator.amazonses.com
などのメールアドレスがあり、ここへのメール配信をリクエストすることでバウンスや苦情をシミュレートできます。このシミュレートはバウンス率・苦情率に影響を与えずに行うことができます。なおSES以外ではこのアドレスは使えません。
シミュレーターを使用した Amazon SES でのテストメール送信 - Amazon Simple Email Service
まとめ
今回はメールのBounceとComplaintについて述べ、Amazon SESでの関連仕様について触れました。
メールはセキュリティ上の問題になることも多いため、AWSも25番ポートだけ特別扱いする等の慎重な扱いをしています。一方でメールの運用を誤ると、不当にスパム送信者と見做されることがわかったかと思います。今回の記事でBounceやComplaintそのものを知ると共に、メールを用いるシステムでの保守運用の必要性が伝わればと思います。