カテゴリー別アーカイブ: AWS

AWS/SESにてハードバウンスを管理する

SES(=SimpleEmailService)では、送信先のエラーが10%を越えると、「こらーー!」って怒られます。
本当の目標は5%だそうです。それで、メール送信先の管理が必要になります。
ここでは、エラーメールを裁くための考え方を記載します。設定方法も若干記載しますが、それは他のサイトでも
丁寧に記載がありますので、検索して探してくださいませ。

<必要な管理>
 (1)メールアドレスが妥当であるかどうか確認する。
 (2)SPF対応
 (3)エラーしたアドレスには送らない。

上記のうち、(3)が管理施策としては重要なのですが、エラーが発生したことを検知しなくては実施できません。
その管理を実施する方法を記載します。(1)は自サイトで頑張って正規表現使ってチェックしてください。(2)は
DNSにSPFレコードを記載して対処してください。

さてそれでは本題に入ります。
管理方法としてやりたいことは、ハードバウンスが発生したら、とあるWebAPIをキックしてもらうという方法です。

まず、前提条件。SESの仕組みから。SESでは、送信情報として以下を設定します。
a.to                送信先
b.mail_from  送信元
c.reply_to     返信先
d.return_path  エラーが発生した時の通知先
このうち、a,b,cは必須で、dはオプションです。これを設定すると、エラー時にそのアドレスへエラーメールを送信してくれるようになります。

前提条件は大丈夫ですかね。
では先に進みます。

dオプションを設定することを前提とします。
エラーメールの通知は、実はbに設定したmail_fromの設定の影響を受けます。ここはまりどころなのでご注意ください。

(A)SESのコンソールにて、mail_fromに指定したメールアドレスが登録されている場合
  Notificationsを選択すると、以下のように記載されいていると思います。
    Email Feedback Forwarding: enabled
  この値がenableになっていると、ハードバウンス発生時のエラー通知がreturn_pathに通知されます。
disableになっていると通知されません。(mail_fromとreturn_pathが異なるアドレスの場合、ついこれを忘れるので注意)

(B)SESのコンソールにて、mail_fromに指定したメールアドレスが登録されていない場合
  無条件で、return_pathに設定したアドレスにエラーメールが送信されます。

さて、ここまではいいでしょうか?
先にすすみますね。

ハードバウンスが発生した時、メール通知だけでなく、WebAPIを叩いて欲しい場合は、SNS(=SimpleNotificationService)との連携をさせる必要があります。SNSには「Topic」という、呼び出し窓口を登録することができます。Topicには、トリガーされた際に動作させるURLを定義することができますので、SESからSNSのTopicを呼び出すようにすれば、バウンス発生時にエラーをWebAPIで受け取ることができるようになるっている算段です。では、具体的な連携のさせ方を見てみましょう。

(C1)SNSの設定
・まずTopicを作成します。IDが発行されます。
・作成したTopicに受信時の動作を定義します。具体的にはトリガーを受けた時に呼び出したいWebAPIのURLを記載します。

(C2)SESの設定
・上記の(A)を実施している場合になります。(B)ではできません。
・mail_fromで定義したアドレスの設定を行います。
・SNSに設定したTopisのIDを選択します。
・バウンス通知メールを受信したい場合は、必ず(A)の設定をenabledにしてください。
・バウンス通知メールを停止したい場合は、(A)の設定をdisabledにすれば停止されます。

このように、設定はmail_fromに対して行いますが、実際に動作するアドレスはreturn_pathなので、ちょっと混乱しますね。
気をつけて運用しましょう。