AWS SES とは

Amazon Simple Email Service の略で、AWSが提供するメール送受信サービス

アプリケーションから大量のメールを安価・確実に送るためのインフラ


「自前でメール送信」の何が辛いのか

SESを使わずに自前でメールサーバーを立てると…

  • スパム判定されやすい(IPの信頼性がない)
  • サーバー管理・セキュリティ対応が必要
  • 大量送信時のスケールが難しい
  • バウンス(届かなかったメール)の管理が面倒

SES はこれらをまるごと解決してくれる。


主な用途

用途 具体例
トランザクションメール 会員登録確認、パスワードリセット、購入完了通知
バルクメール メルマガ、キャンペーンの一斉配信
通知メール アラート、レポート自動送信
メール受信 問い合わせメールの受け取り・処理

仕組みのイメージ

あなたのアプリ
    ↓ API or SMTP で送信依頼
  AWS SES
    ↓ 信頼性の高いAWSのIPから送信
  受信者のメールボックス

AWSのIPアドレスは世界中のメールプロバイダーから信頼されているので、スパム判定されにくい。


送信方法は2種類

1. SMTP経由

既存のメール送信ライブラリをほぼそのまま使える。

# Rails の場合、config/environments/production.rb
config.action_mailer.smtp_settings = {
  address: "email-smtp.ap-northeast-1.amazonaws.com",
  port: 587,
  user_name: "SESのアクセスキー",
  password: "SESのシークレットキー",
  authentication: :login,
}

2. AWS SDK経由

よりAWSネイティブな使い方。

# aws-sdk-ses gem を使う場合
ses = Aws::SES::Client.new(region: "ap-northeast-1")
ses.send_email(
  destination: { to_addresses: ["user@example.com"] },
  message: {
    subject: { data: "件名" },
    body: { text: { data: "本文" } }
  },
  source: "noreply@yourapp.com"
)

重要な概念

サンドボックスモード

最初はこのモードになっており、自分が認証したメールアドレス宛にしか送れない制限がある。本番運用前にAWSへ申請して解除が必要。

ドメイン認証(DKIM / SPF)

「このドメインからのメールは本物ですよ」とメールプロバイダーに証明する仕組み。SESがほぼ自動でセットアップしてくれる。

バウンス・クレーム管理

  • バウンス → 存在しないアドレスへの送信
  • クレーム → 受信者が「迷惑メール」と報告

これらの率が高いと送信停止になるため、SESはSNS経由でアプリに通知する仕組みがある。


料金

非常に安いのが特徴。

  • EC2やLambdaから送信 → 最初の62,000通/月は無料
  • それ以降 → $0.10 / 1,000通(約15円)

Rails × SES の典型的な構成

Rails ActionMailer
    ↓
SES(SMTP or SDK)
    ↓
ユーザーへのメール送信

バウンス発生
    ↓
SES → SNS → SQS or Lambda
    ↓
Rails側でバウンスアドレスをDBに記録 → 以降の送信をスキップ

まとめ

  • 何のため? → アプリからのメール送信を安全・確実・安価に行うため
  • 自前サーバーとの違い? → スパム対策・スケール・バウンス管理をAWSが肩代わり
  • Railsとの相性 → ActionMailerのSMTP設定を変えるだけで導入できる
  • 注意点 → 最初はサンドボックスモードなので本番前に申請が必要