自社メールサービス作ってみた

概要

SESなど使って自社メールサービス作った。

構成

Request => メールAPI => SQS => メール送信Worker => SES => SNS => SQS => メール結果受信Worker

メールサービス

  • メールAPI
    • メール送信リクエストを受け取りSQSに送る。
    • SESに直接送ってもいいけど、大量リクエストがきた時に、ここで調整する。
    • バウンスメール対象になったアドレスかとか、正しいメールアドレス形式かとかを判断して、送信できないものはメッセージを返す。
  • メール送信Worker
    • ポーリングして、SQSを受け取り、SESに渡す。
    • バウンスメール対象アドレスかのバリデーションを行う。
  • メール結果受信Worker

メール分析

SESで、Configure Set を登録すると、開封やクリックを計測できる。
SES => Firehose => Lambda => Redshift に入れて、分析できるようにした。
(Lambdaで欲しい形式にログを修正する)

Amazon SES イベント発行を使用したモニタリング - Amazon Simple Email Service
上のリンクの通りにしたらできるはず。

メール送信

下の記事のように、RailsのAction Mailerでカスタムな delivery_method 作って、送信するやつ作ってみたら簡単だった。 Action Mailerのdelivery_methodに独自の配信方法を追加する - Qiita

注意

Bounce Rate が上がらないように注意が必要。 Cloudwatchでモニタリングできるので、そこをでアラート設定しておく。
大量配信したいならば、あらかじめメールアドレスのクレンジングがほぼ必須。
結局、バウンスレートの関係で、大量送信難しいので、API => SES => SNS => API みたいな感じでも普通に捌けそう。

大量送信ならPinpoint使った方がいいらしいので、今度はそっちを調べてみる。