code up

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Amazon SES Announces Bounce and Complaint Notifications

本日AWS(Amazon Web Services)より届いた新機能、Amazon SESを使って送信されたメールのバウンスおよび苦情の処理をAmazon SNSに通知する機能を試してみた。リリースノートはこちら(Release: Amazon Simple Email Service on 2012-06-26)。SDKもそれぞれバージョンアップしている(Release: AWS SDK for Java 1.3.12, Release: AWS SDK for PHP 1.5.8)

Amazon SNSは通知先としてHTTP, HTTPS, メール, メール(JSON), Amazon SQSを複数指定することができる、米国であればSMSの通知もあるみたい。

まずは一番簡単なメール通知を試してみる。ただ、元々Return-Pathの宛先に返ってくるメールを、違うフォーマットで別経路で送るだけなので、ほとんど意味がない試行だけど。

実運用を想定して設計する場合、例えばメールが届かなかったメールアドレスを自動的に無効化する処理であれば、

  1. SESでメールを送信する
  2. SESにバウンスメールが返ってくる
  3. SNSに通知
  4. SQSに通知しつつHTTP(またはHTTPS)でも通知
  5. HTTPを受信したアプリケーション側でSQSに届いているバウンスメールを処理する

ってところかなー。4と5で面倒な処理にしているのはAmazon SNS - Getting Started Guideによると、例えば404のステータスコードは通知失敗とはならずリトライは行われなかったり、HTTPサーバーの長時間ダウンによりリトライ回数を超え、通知が届かない可能性もあるため。FAQにも書いてあるようにSQSを通知先に加えておけばより安全である。4でSQS通知だけにしておいて5は行わず、タイマー(タイマースレッドとかcronとか)でSQSのキューを処理してもいいかも。時間があれば別の機会に試してみたい。

SNSのトピックを作成する

SNS Management ConsoleからCreate New Topicとするか、SES Management Console - Verified Sendersから対象となるメールアドレスまたはドメイン(最近追加になった)を選んでFeedback Details → Edit Configuration → Click here to create a new Amazon SNS topic.と押すと新しいトピックの作成ダイアログが表示される。後者の方法(SES経由)だと同一リージョンのSNSにトピックが作成される。

違うリージョンのSNSトピックは指定できなかった。異なるリージョンの場合はConfiguring Feedback Notifications via Amazon SNSに書いてあるようなポリシーの設定が必要なのかも・・・けど今回は試していない。特に問題なければトピックを作成する時はSESと同じリージョンのUS East(Virginia)で。Tokyoリージョンで作成したトピックのTopic ARNを指定すると次のメッセージが出て登録できなかった。

SNS topic arn:aws:sns:ap-northeast-1:123456789012:ses is invalid.

SESでBounce and Complaint Notificationsの設定

次に新機能のバウンス、苦情通知の設定をSES上で行う。下のSubscriptionの作成が先でも構わない。

SES Management Console - Verified Sendersから対象となるメールアドレスまたはドメインを選んでFeedback Details → Edit Configurationと進むとEdit Notification Configurationダイアログが表示される、BouncesおよびComplaintssのプルダウンに先ほど作成したTopic名があるはずなので、通知先として片方もしくは両方をセットする。説明にもあるが、両方に通知先をセットするとEmail Feedback Forwardingを無効化することができる。(苦情の方はまだ受け取ったことがないので分からないが)無効化するとバウンスメール『Delivery Status Notification (Failure)』がReturn-Pathで指定されたアドレスに転送されなくなる。つまり無効化するとReturn-Pathのメールアドレスにエラーメールが届かなくなるのでメールボックスに大量にエラーメールが溜まってる!ってことが避けられそう。

選択してSave Configで完了。プルダウンにトピックが出てこない場合は違うリージョンにトピックを作成しているのかもしれない。

SNSでSubscriptionの作成

最後にSNSの購読設定を行う。今回はメールで通知するだけなのでとても簡単。

SNS Management Consoleから作成したトピックを選び、Create New Subscriptionボタンを押す。メール通知の場合はEmail, Email(JSON)の選択肢があり、どちらもEndpointにはメールアドレスを指定するが、機械的に処理しないのであれば、好みで選べばいいと思う。

作成すると購読確認(Subscription Confirmation)のメールが届くので書かれているURLにアクセスすれば完了。通知先が『Email』だと購読確認のメールはHTMLで届き、『Email(JSON)』の場合は本文がJSONのメールが届くので購読処理も機械的に処理ができるみたい。

後はバウンスメールをSES経由で送信してみれば通知が届くはず。テストの方法として(他人に迷惑をかけない)安全な方法は、自分で管理しているドメインの存在しないサブドメイン宛てに送るといいかも、例えばfoo.barドメインを管理しているとすればsomeone@dummy.foo.barとか。

↓はEmailの場合(画像は一部加工)。JSONのフォーマットはFeedback Notifications via Amazon SNSから確認できる、サンプルはこちら。JSON形式のメッセージオブジェクトと購読解除(Unsubscribe)するためのURLが混在したメール、機械的に処理するには向いてない。

↓はEmail(JSON)の場合(画像は一部加工)。JSON形式のメッセージオブジェクトと購読解除のURLなどをさらにJSONで囲んだ本文全体がJSONなメール。

関連記事
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。