Amazon SESの機能を活用したメールのレピュテーション対策
Posted on
はじめに
こんにちは。プレイドのKARTE Messageチームでエンジニアをしている林です。
本記事では、大量のメール配信を実現するのに避けては通れないレピュテーション対策についてお話しします。
メール送信時に利用するサーバーのIPアドレスやFromドメインに対して付けられる評価をレピュテーションと呼びます。スパムメールのようなメールをたくさん配信しているとレピュテーションが下がり、メールプロバイダー(GmailやYahoo!メールなど)から受信を拒否される場合があります。詳しくはKARTE Messageの大量メール配信を支える技術をご覧ください。
レピュテーション観点での課題と解決策
KARTE Messageでは、これまでレピュテーション観点での課題が多数存在しており、一部のプロバイダからスパムメールと判定されることもありました。
また、IPアドレスの運用やハードバウンスを極力発生させない仕組み作りに膨大なコストがかかり、注力したい機能開発にリソースが割けないこともありました。
これらの運用コストを削減するために、SESの機能をどのように活用しているか紹介していきます。
マネージドIPプールを活用したIPアドレス管理
SESでは、送信するドメインに設定セットと呼ばれるルールのグループを適用して送信します。設定セットには、どのIPプールからメールを送るか設定することができます。
IPプールには主に3つの種類があります。
- 共有IPプール(shared IP pools)
- SESを使っている他のAWSアカウントと共有しているIPプール
- ノイジーネイバー問題が発生し得る
- 標準の専用IPプール(standard dedicated IP pools)
- 他のAWSアカウントから分離されたIPプール
- AWSアカウントがIPを手動で購入して運用する
- マネージドな専用IPプール(managed dedicated IP pools)
- 他のAWSアカウントから分離されたIPプール
- SES側がAWSアカウントの送信量に応じてIPのスケーリングをする(※ ウォームアップ時に一部共有IPプールから配信されることがある)
これまでKARTE Messageでは標準の専用IPプールを使った配信をしており、次のような運用をしていました。
- 定期的にKARTE Messageを利用するクライアントの配信量や配信速度を見積もり、それに応じてIPを新規に追加
- 追加したIPのウォームアップ
- 追加したIPがDNSBLに含まれている場合は、Blacklistからの解除対応
マネージドIPプールを使った配信に切り替えると、このようなIPの調整をSES側に任せることができます。
KARTE Messageでは、マネージドIPプールを複数個作って各プールに複数のクライアントを割り振って運用することにしました。
仮にいずれかのマネージドIPプールでIPレピュテーションが下がってしまった時に、問題のないクライアントは別のプールに移して配信し、配信量が増えた分だけSES側がIPの数を調整してくれます。これでIPの調整コストの削減とリスク分散の両立ができるようになりました。
テナントを活用したハードバウンス率・苦情率の管理
SESは、AWSアカウントのハードバウンス率または苦情率が一定数を超えるとレビュー対象となり、場合によっては送信を停止されてしまう可能性があります。またテナントの機能がリリースされるまではこれをモニタリングできる機能が無かったので、送信者側でチェックする必要がありました。
KARTE MessageではBigQueryを活用してハードバウンス率と苦情率のチェックをしていました。次の図はその概略を示したものです。
- WorkerはQueueのステータスをチェックした後、SESのAPIにリクエストしてメールを送る
- 配信ログをBigQueryに送る
- SchedulerがBigQueryへ定期的にクエリを実行し、クライアントのハードバウンス率や苦情率をチェック
- 一定の閾値を超えるとSchedulerがQueueのステータスを更新
- 配信が止まる
この方式だと一部の問題があるクライアントだけ配信を停止し、それ以外のクライアントは継続して配信させることができます。しかし、BigQueryのスロットが詰まってしまうとチェックができなくなります。また、クライアントが複数個の送信元ドメインを使い分けて運用している場合、問題ない配信をしている送信元ドメインも停止させてしまっていました。送信元ドメイン単位のチェックは実装コストが高く、クライアント単位でのチェックに留めていました。
以上のように、ハードバウンス率や苦情率を送信者側でコントロールするのは非常にコストが高いです。
SESのテナントを活用すると、設定セットごとにハードバウンス率と苦情率をモニタリングできるようになり、BigQueryで集計してチェックする必要がなくなりました。
また、設定セットは送信元ドメイン単位で割り当てるようにしています。BigQueryを使ったチェックではクライアント単位で停止させていたのが、問題のある送信元ドメインだけ配信停止できるようになりました。
メールアドレスのオートバリデーションを活用したスクリーニング
新規契約したクライアントや今まで配信をしたことのないエンドユーザー群に対して新たに配信をしたい場合、ハードバウンス数が急激に増えることがあります。
KARTE Messageでは今まで送信を試みたメールアドレスのうち、一度でもハードバウンスしたメールアドレスは配信対象から除外する形を取っています。上記のようなケースでは数回の配信に分けることでハードバウンス数の急上昇を抑えつつ、次回以降配信しないようにスクリーニングを行っています。
これまでは、クライアントから配信量と想定されるバウンス数を確認し、全体の配信量に対して影響が大きくならないハードバウンス率になるようにハンドリングしており、ビジネスチームとのコミュニケーションやバウンス数チェックのオペレーションのコストが大きくなっていました。
この手間を省くために、SESの新機能であるメールアドレスのオートバリデーションとテナントを組み合わせて使っています。
オートバリデーションはSESがメールを送る前に受信アドレスのチェックをしてくれる機能です。SES側で受信できる可能性が高いと判断したメールアドレスだけに配信を試み、それ以外はハードバウンスとみなします。オートバリデーションの料金は1000通あたり$0.01です。
KARTE Messageでは、スクリーニングを行いたい時のみオートバリデーションを有効化して、テナントでモニタリングしているハードバウンス率の閾値を緩和する運用にしています。スクリーニングは初回の配信以外ほとんど行うことがないので、オートバリデーションにかかるコストを抑えつつ、これまでのスクリーニングに関する運用コストを削減することができました。
最後に
これらの取り組みによって、今まで守りの運用に割かれていたリソースを削減し、一部のプロバイダで受信されなくなる、スパムメールと判定されるということがかなり減りました。
メールのレピュテーション対策はとてもめんどくさい気にするポイントが多いので、クラウドサービス側の機能に任せられるのは非常にありがたいです。
Amazon SESは大量配信を支えるアップデートが続いているため、今後も新機能を積極的に取り入れ、運用の効率化をしていきたいです。