AWS(Amazon Web Services)関連の第4弾の投稿です。

[過去記事]
Amazon SESでメール配信を行う
[PHP]AWS SDK for PHPを使ってAmazon SESでメールを送る方法
メール配信システムに欠かせないバウンスメールの扱い方

今回はAmazon SESで通知したメールがバウンスメール(相手に何らかの不具合でメールが届けられなかったメールのこと)だった場合に、その通知をAmazon SNSを利用して送信者側に通知する方法をご紹介します。

まずは、SESで承認済みのメールアドレスの左側のチェックボックスを選択すると、下部のFeedback DetailsのEdit Configurationが設定できるようになります。下の画面だと、Bounces SNS Notification、Conplaints SNS Notificationはnoneになっているので、何も設定されていない状態です。

amazon_bounce1

Edit Configurationボタンを押すと、SNS Configurationを選択することができるのですが、SNSでTopicを作成していない場合は、「Click here to create a new Amazon SNS topic」をクリックすると、新しいTopicを作成することができます。

amazon_bounce2

新しいTopicを作成しています。

amazon_bounce3

作成したTopicをSNS Configurationで選択して、Save Configurationボタンを押します。

amazon_bounce4

先程はnoneになっていたNotificationにTopicが設定されていますでしょうか?

次に、Amazon SNSに移動します。上部のメニューバーのServicesから移動できます。Amazon SESの通知はUS-East-1というregionにだけ対応しているので、右上のほうのメニューからN.Virginiaを選択してください。(※私はこれに気付いてなくて、SESで作ったTopicがSNS側で表示されておらず、相当悩みました。気付けば単純なことなんですが。。。)

amazon_bounce6

SNS Dashboardを選択すると、My Topicsの中に先程SESで作ったTopicが表示されているはずです。作成したTopicをクリックしてください。

amazon_bounce7

Create New Subscriptionをクリックすると、どのように通知するのかを選択する項目が表示されます。いろいろあるのですが、今回はEmail-JSONで通知してみたいと思います。ちなみにHTTPだとスクリプトへのURLを指定しておけば、POSTで結果を通知してくれます。(この方法もいずれご紹介します。私が利用しているレンタルサーバでは仕様上試すことができていないので、現在新しいサーバを検討中です。)

ここでEndpointにメールアドレスを入力して、Subscribeボタンを押すと、指定したメールアドレス宛てにAmazonからメールが届きます。内容はこのメールアドレス宛てに通知するけどいいの?みたいな感じの内容です。今回はEmail-JSONを選択しているので、認証のメールもJSON形式で届きます。その中にあるSubscribeURLをクリックすれば認証完了です。通常のEmailの場合は、Confirm subscriptionというリンクがメール本文内にありますので、それをクリックすれば認証完了です。

amazon_bounce8

認証が完了した後、画面右上にあるRefreshボタンを押すと、設定が完了した画面に切り替わります。認証完了前はSubscription IDがPendingConfirmationになっています。

amazon_bounce9

では、実際にバウンスメールの通知が届くかどうか確認してみます。今度はSESに移動して、以前ご紹介したテストメールを送信してみます。宛先の確認のためのメールアドレスはAmazon SES Mailbox Simulatorを利用すると便利です。

メールアドレスはテスト用に5つ用意されています。

  • Success : success@simulator.amazonses.com
    無事に送信が成功するアドレス
  • Bounce : bounce@simulator.amazonses.com
    宛先不明で戻ってくるアドレス
  • Out of the Office : ooto@simulator.amazonses.com
    宛先のメールボックスには届くが、out-of-the-office(OOTO)で戻ってくるアドレス
  • Complaint : complaint@simulator.amazonses.com
    宛先のメールボックスには届くが、スパムとして報告される挙動を示すアドレス
  • Address Blacklisted : blacklist@simulator.amazonses.com
    SESでブラックリストに登録されているアドレス。(※SESで送信しようとすると怒られます。)

今回は、宛先にbounce@simulator.amazonses.comを指定して、Send Test Emailボタンを押してしばらく待つと。。。SNSで指定したメールアドレス宛てにJSON形式のバウンスメール通知が届きます。

説明は長かったですが、使ってみるとシンプルで使いやすい仕組みになっています。この仕組みを利用すると、メールに関する大部分の処理をAWSに任せておいて、システム側は応答があった時にスクリーニングを実行するくらいになると思います。利用方法の自由度も高く、自社でメーリングリストシステムを立ち上げるのであれば、利用する価値は十分あると思います。