ITエンジニアによるITエンジニアのためのブログ

Amazon SESからトランザクションメールを送信する方法

AWSのサービスの一つであるAmazon Simple Email Service (SES) を使うと、自身のアプリケーションから簡単にトランザクションメールを送信できます。

SESを使うメリットには以下があります。

  • セットアップが簡単。
  • メールサーバーを運用する必要がなくなる。
  • 最低固定料金がなく1通あたりの従量課金なので、非常に安価に運用を開始できる(本記事執筆時点で1通 0.0001 USD)。
  • SPF、DKIM、DMARCなどEメール送信に関する認証を簡単にパスできる。

本記事では、SESを自身のアプリケーションで使うための手順を詳しく解説します。

目次

  • SESの利用開始
  • メールアドレスを検証
  • テストEメールの送信
  • 送信ドメインを検証
  • SMTP 認証情報の作成
  • サンドボックスモードでの送信テスト
  • カスタム MAIL FROM ドメインでSPFアライメント達成
  • 本番アクセスをリクエスト
  • アプリケーションの本番環境でSESを使用

SESの利用開始

SESのトップページより「利用を開始」ボタンをクリックします。

送信元のメールアドレスを追加します。このメールアドレスの所有権確認のためにAWSから検証メールが送信されますので、受信可能なメールアドレスである必要があります。

送信ドメイン(送信元メールアドレスのドメイン)を追加します。このドメインはDKIM認証に使われますので、DNS設定にアクセスできるご自身のドメインである必要があります。

MAIL FROMドメインは後ほど設定するので、ここでは一旦スキップします(MX 障害時の動作含む)。

配信性能の強化は任意ですが、本記事では以下の設定をすべて有効にします。

  • Virtual Deliverability Manager:オン
  • エンゲージメントの追跡:オン
  • 最適化された共有配信:オン

専用IPアドレス(マネージド)は追加コストが発生するので本記事では無効としますが、運用を始めてみて配信率が低い場合は有効にしてもよいでしょう。

「テナント管理を追加」は本記事では不要なので無効にします。テナント名に何も入力しなければ無効になります。

確認ページで設定をレビューして問題なければ「使用を開始」ボタンを押します。

セットアップページに遷移するので、表示されている未解決のタスクを解消していきます(オプションタスクは解消しなくても大丈夫です)。

メールアドレスを検証

入力した送信元メールアドレスに送信された検証メールを開き、メール内のリンクをクリックして検証を完了します。

メールアドレスが検証済みになると、このメールアドレスからのメール送信が許可されます。

テストEメールの送信

SESが提供するメールボックスシミュレーターを使ってメール配信をテストします。

  • E メール形式:フォーマット済み
  • From-address:検証済みのメール送信元アドレス
  • シナリオ:配信の成功
  • 件名:配信予定のメールの件名
  • 本文:任意
  • 設定セット:スキップ
  • 追加設定:スキップ

「テストEメールの送信」を押して「正常に送信されました」とメッセージが表示されたら成功です。

送信ドメインを検証

「DNSレコードを取得」ボタンをクリックし、表示されるDKIMレコード、およびDMARCレコードをご自身のドメインのDNS管理画面で追加します。

DMARCレコードは最低限のポリシーが設定されていれば、表示されている値でなくても大丈夫です(例: v=DMARC1; p=none; など)。

(注)DNSレコードがインターネット全体に反映されるのを待つ必要があるため、検証が完了するまで最大72時間ほどかかることがあります。

DKIMレコードの検証に成功すると、「DKIMの設定」が「成功」になり、ドメインの「IDステータス」も「検証済み」となります。

これで、このドメインに属するメールアドレスからのメール送信が許可されます。

SMTP 認証情報の作成

自身のアプリケーションに設定するための、SESのSMTP 認証情報を作成します。このステップはSESの未解決のタスク一覧には含まれませんが、アプリケーションからメール送信するために必要です。

SES管理画面で、左のナビゲーションペインから「SMTP 設定」を選択し、画面右上の「SMTP 認証情報の作成」ボタンを選択します。

SES送信権限ポリシーが付与された新しいIAMグループとユーザーが作成され、このユーザーにSMTP認証情報が紐付けられます。SMTP認証情報が表示されるのはこの画面だけなので、コピーしておくか、認証情報が記載されたCSVファイルをダウンロードします。

ここで自動作成されたポリシーはResourceがワイルドカード(*)となっているので、権限を限定するために、IAMの管理画面で、このユーザーが所属するグループ(またはユーザー自身)の権限ポリシーを、検証済みドメインのARN(SES左ナビゲーションペインの「設定:ID」メニューから確認できます)に変更します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ses:SendRawEmail",
            "Resource": "arn:aws:ses:ap-northeast-1:123456789012:identity/example.com"
        }
    ]
}

サンドボックスモードでの送信テスト

取得したSMTP認証情報を使い、実際のメール送信テストを行います。まだサンドボックスモードですが、検証済みメールアドレス、または検証済みドメインに属するメールアドレスを宛先として送信することができます。

設定は各アプリケーションによって異なりますが、例としてRuby on Railsだと以下のような設定になります。

# config/environments/your_environment.rb
Rails.application.configure do
  # ... 他の設定 ...

  # Action Mailerの配信方法を :smtp に設定
  config.action_mailer.delivery_method = :smtp

  config.action_mailer.smtp_settings = {
    # SESのSMTPエンドポイントを指定
    # リージョンによって異なります(例: ap-northeast-1の場合)
    address:              'email-smtp.ap-northeast-1.amazonaws.com', 
    port:                 587, # 推奨ポート (TLS必須)
    authentication:       :login,

    # 取得したSMTPユーザー名とパスワードを指定
    # これはAWSのアクセスキーID/シークレットアクセスキーとは異なります
    user_name:            ENV['SES_SMTP_USERNAME'],
    password:             ENV['SES_SMTP_PASSWORD'], 
    domain:               'yourdomain.com', # 独自ドメイン名
    enable_starttls_auto: true,
    open_timeout:         5,
    read_timeout:         5
  }
  
  # 送信元となるメールアドレス (from) のデフォルト
  # 認証済みのメールアドレスを設定
  config.action_mailer.default_options = {
    from: 'authenticated-email@yourdomain.com'
  }

  # ... 他の設定 ...
end

自身のアプリケーションのステージング環境からメールを送信し、無事に受信できたら成功です。

カスタム MAIL FROM ドメインでSFPアライメント達成

現状ではDMARC認証におけるDKIMアラインメントのみ達成しており、SPFアライメントを達成できていません。SPFアライメントを達成するには、カスタムMAIL FROMドメインを設定する必要があります。

DKIMアラインメント DKIM-Signatureヘッダー内の d= のドメインとFROMヘッダーのドメインが一致している必要があります。 現状では d=yourdomain.com、FROMは authenticated-email@yourdomain.com になっているので、ドメインは一致しています。

SPFアラインメント

SPFアラインメント SMTPエンベロップのMAIL FROM(Return-Path)とFROMヘッダーのドメインが一致している必要があります。 現状ではMAIL FROMは ap-northeast-1.amazonses.com ドメインに属するメールアドレスですが、FROMヘッダーは authenticated-email@yourdomain.com になっているため、ドメインは一致していません。

DMARCではDKIMまたはSPFのどちらか一方が合格すれば認証は成功しますが、両方が合格しているに越したことはありません。カスタムMAIL FROMを設定することで以下のようなメリットを得ることができます。

  • 冗長性の確保: DKIM認証はメール本文の改ざんを防ぎますが、途中でメールが転送されるとDKIM署名が無効になることがあります。このような場合でも、SPFアライメントが達成されていれば、DMARC認証を成功させることができます。
  • 受信側システムの評価: 一部の受信側メールシステムやセキュリティフィルタは、SPFとDKIMの両方がアライメントを達成しているメールに対して、より高い信頼性を与えることがあります。これにより、迷惑メールとして判定されるリスクがさらに低減し、配信成功率の向上に繋がります。
  • ブランディング強化: ユーザーが受け取るメールのヘッダーやバウンスメールの通知が、bounce@amazonses.com などのSESのドメインではなく、自社のドメイン名 (bounces.yourdomain.com など) に統一されます。これにより、メール全体でブランドの一貫性が保たれます。
  • バウンスメールの管理: バウンスメールや苦情通知の宛先がカスタムドメインになるため、SES以外の独自のメール処理システムやログでこれらの通知を一元管理しやすくなります。

カスタムMAIL FROM設定方法

SESの左ナビゲーションペインより、「設定」-> 「ID」を選択し、自身のドメイン名をクリックします。このドメインは検証済みである必要があります。

「カスタム MAIL FROM ドメイン」セクションで「編集」ボタンをクリックします。

  • カスタム MAIL FROM ドメインの使用:有効
  • MAIL FROM ドメイン:MAIL FROMに使用するサブドメイン(例:ses.yourdomain.com)
  • MX 障害時の動作:MAIL FROM ドメインを使用

「変更を保存」ボタンをクリックすると元のページに戻るので、「DNSレコードの発行」セクションに表示されているMXレコードとTXTレコードをコピーし、ご自身のDNSプロバイダーで登録します。

(注)MXレコードの値(例: 10 inbound-smtp.ap-northeast-1.amazonaws.com)の 10 は優先度(Preference)、続くドメインがメールサーバー(Mail Server)です。SESでは一行で表示されますが、DNSプロバイダーの管理画面では、これらを別々のフィールドに入力する必要がある場合があります。

検証が成功すると、「カスタム MAIL FROM ドメイン」セクションの「MAIL FROM 設定」に成功チェックマークが表示されます。

検証済みメールアドレスのカスタムMAIL FROM設定

もし、送信元に検証済みメールアドレスを使っている場合、ドメインIDに加えてメールアドレスIDもカスタムMAIL FROMドメイン設定が必要です。

SESの左ナビゲーションペインより、「設定」-> 「ID」を選択し、自身のメールアドレスをクリックします。

「カスタム MAIL FROM ドメイン」セクションで「編集」ボタンをクリックします。

ここで入力する値は、先ほど検証済みドメインに設定したカスタムMAIL FROMと同じ設定にします。すでにMAIL FROMドメインは検証済みなので、すぐに成功するはずです。

再度、自身のアプリケーションからメールを送信し、メールヘッダーの Return-Path(MAIL FROM)が設定したサブドメイン(例: ...@ses.yourdomain.com)になっていたら成功です。

本番アクセスをリクエスト

SESのナビゲーションペインから「設定を始める」を選択し、未解決のタスクに表示される「本番アクセスをリクエスト」ボタンを押します。

ご自身の状況にあわせて詳細を記入し、リクエストを送信します。

記入したメールアドレス宛にAWSからメールが届くので、メール内にあるリンクをクリックしてAWSサポート画面を開きます。

ご自身の送信プロセス(トランザクションメールであること、Eメールの送信方法、バウンスや苦情の管理方法など)や配信頻度について説明して返信します。

審査を通過すると、1日あたりの送信クォータと毎秒あたりの最大送信レートが設定され、サンドボックスから本番モードに変更されます。

本番アクセスが承認されたので、認証済みドメインや認証済みメールアドレス以外のメールアドレス宛(例:Gmail宛)にもメールを送信できるか、確認してみましょう。

アプリケーションの本番環境でSESを使用

無事に認証済みドメイン以外のメールアドレスで受信を確認できたら、ご自身のアプリケーションの本番環境でSESを使用するように設定してデプロイします。

デプロイが完了したら、本番環境でも送信テストを行います。

また、メールの配信状況をSESのアカウントダッシュボードやVirtual Deliverability Managerダッシュボードでモニタリングします。

アカウントダッシュボード

Virtual Deliverability Managerダッシュボード

以上でSESの設定は完了です。

まとめ

Amazon Simple Email Service(SES)を実際に設定してみることで、改めてメリットを確認できたのではないでしょうか。

  • 簡単なセットアップでトランザクションEメールを送信できる。
  • 自身のメールサーバーを運用する必要がなくなる。
  • 最低固定料金がなく従量課金なので、非常に安価に運用を開始できる。
  • SPF、DKIM、DMARCなどEメール送信に関する認証を簡単にパスできる。

もし自身のメールサーバーや他のEメールプロバイダーからの乗り換えを検討している場合、ぜひ試してみてはいかがでしょうか。