RailsとAmazon SESを使ったシステムで、 メールをなるべく確実に届ける方法について調べました。

メールを確実に届けるには?

メールの到達率を上げるには次のことに気をつけなければなりません。

  1. レピュテーション
  2. インフラ
  3. 認証

これらについて、RailsとSESを使う場合にどこに気をつけるべきか見ていきたいと思います。

1. レピュテーション

レピュテーションを落とさないためにはバウンス率と苦情の数に気をつける必要があります。

バウンスとはメールアドレスが間違っていた場合や、配信先のメールサーバがダウンしていたなどの理由によりメールが配信されないこと。 苦情はメールがスパムとして報告されること

SESではバウンスや苦情があった場合、Amazon SNSを介して通知してくれます。 これを使ってバウンスや苦情のあったメールアドレスを管理し、 そういったメールアドレスには送らないようにすることでバウンス率・苦情の数を低く抑えることができます。

実装は、一例ですが次の記事が参考になります。

Rails×SES バウンスメール(不達メール)対策

また、バウンス率や苦情の割合はAPI経由でも取得できるので、 観測しておいて上昇してきたら対策を講じるのも手です。

2. インフラ

メール配信のインフラで気をつける点は、

  • メールサーバをセキュアな構成にする
  • 固定IPを使って配信する

などがありますが、この辺はSESが面倒を見てくれます。

ユーザとしてできることとして、配信するメールアドレスは postmasterやabuseなどのアカウントで 受信もできるようにしておく と良いでしょう。

自分はAmazon Lambdaと以下のスクリプトを使って、 postmaster宛てのメールを自分のメールアドレスに転送するようにしました。

arithmetric/aws-lambda-ses-forwarder

3. 認証

送信者認証(SPF)やドメイン電子署名(DKIM)を利用するようにしましょう。

こちらの記事などが参考になります。

Amazon SESでSPFとDKIMを用いて高信頼なメールを送る

おわりに

以上、RailsとSESを使うときにメールの到達率を向上させる方法についてまとめました(終わってみたらあまりRailsとは関係ない内容になりました笑)。

調査中、以下のページがたいへん参考になりました。

Email Deliverability Guide ~メールを確実に届けるために~