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に変わります。
これで成功です。

Amazon SES がサスペンド喰らいました

Amazonより恐ろしいメールが来襲。
「Amazon Simple Email Service Sending Suspended Due to Critical Issue in region US East (N. Virginia)」

訳:変なメールばっかり送ってるから、SES止めるね。



Amazon SESを止められてしまうと、運用中のサービスのニュースレターだけではなく、ユーザ登録もなにもかもストップしてしまいます。サービスが止まってしまうので、すぐ対応です。
原因はバウンス率の高さ。送信できなかったメールが15%ほどありました。

下の参考サイトで何をすればいいか詳しく書いてあるので、それに従って対応。ありがとうございます。
http://temporal.hatenablog.com/entry/2013/01/20/174500

  1. Return-Pathの設定もしくは、AmazonSNSを使ってエラーの内容を把握できるように。
  2. 再開された後に、変なメールを送ってしまわないように初期対応。
  3. Amazonに申し開きを返信。

これで24時間以内にひとまず解除されました。

ちなみにAmazonに送ったメールは、
「バウンスの原因はニュースレターであること。最近の登録者はメアドの存在を確認しているから問題ないこと。数年前の登録者が存在確認があやしいこと。モバイルの登録者もころころメアドが変わるのであやしいこと。送ったニュースレターをいまだ一度も開けていないユーザは、ニュースレターの送信を止めたこと。SESが再開されたらSNSを確認して対策を取ること。」を英語で送信しました。