2014年4月21日月曜日

Amazon SESのバウンス情報をSNSを使ってWEBサイトで受け取る

先日、SESでBounceしまくってペナルティを食らったので、SNS(Simple Notification Service)を使ってWEBにエラー情報を貯めることにしました。
WEBで受け取ることによって、バウンスの多いメールアドレスは、アクティブじゃないのでメールの配信を止めることができますよね。

1

まず、WEBを叩くので、受け取りの設定をします。
今回は簡単に、SnsLogsテーブルみたいなのを作って、テキストフィールドを設けるだけにしました。コントローラは、POSTで受け取って、格納だけ。

def ses_logs
newlog = SnsLog.new
newlog.content = request.raw_post
newlog.save
exit
end

2

SNSでTopicを作ります。


これで保存すると、Endpointがガシガシ叩かれるみたいです。
うまく叩かれない場合は、Railsだとアプリケーションコントローラにprotect_from_forgery with: :null_sessionを追加するとか。

3

データベースにPOSTが格納されました。シメシメ。
 "SubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-1:103909089397:hogehoge&Token=2336412f37fb687f5d51e6e241d638b05a632e9ca5d93559640e06c51000987d21f641ee649971c5d7e0afad91e8753ede821d33824c053a67b4ebakabakaiyan9"
コンテンツに、上記のようなテキストが入ってると思うので、URLにアクセスします。

すると、SNSのTopicに追加したレコードがConfirmSubscriptionからIDに変わります。
これで成功です。