[AWS]SESでEMAIL配信を行う設定ガイド
概要
Amazon SES (Simple Email Service)を経由してメール配信を行うための設定手順をまとめる。Workmailと連携し、メール送受信環境を構築する。
前提条件
既に完了している設定
- Workmail: 組織の開設完了、ユーザー登録でメール受信可能
https://[org-id].awsapps.com/mailでメール確認可能
- SES: ドメインの検証完了
- 送信メールアドレスの検証が必要(メールの有効性確認はWorkmailで実施)
- 作業Region: 東京リージョン (ap-northeast-1) を基本とする
設定手順
1. Workmail設定
1.1 ユーザー作成
- Workmail管理コンソールにアクセス
- URL:
https://[region].console.aws.amazon.com/workmail/v2/home
- URL:
- 組織を選択 →
Usersタブ Create userをクリック- 必要な情報を入力:
- Username: メールアドレスのローカル部分
- Display name: 表示名
- First/Last name: 名前
- Password: 初期パスワード
1.2 メールボックスの確認
- 作成したユーザーでWorkmailにログイン
- メールの送受信が可能か確認
2. SES設定
2.1 Identity(送信元アドレス)の登録
- SES管理コンソールにアクセス
- URL:
https://ap-northeast-1.console.aws.amazon.com/ses/home?region=ap-northeast-1#/identities
- URL:
Create identityをクリック- Identity typeで
Email addressを選択 - Workmailで作成したユーザーのメールアドレスを入力
Create identityをクリック
2.2 検証メールの確認
- Workmailのメールボックスに検証メールが届く
- メール内のリンクをクリックして検証完了
2.3 サンドボックスモードの解除(本番環境の場合)
サンドボックスモードの制限:
- 検証済みのメールアドレスにのみ送信可能
- 1日あたり200通まで
- 1秒あたり1通まで
解除手順:
- SESコンソール →
Account dashboard Request production accessをクリック- 必要な情報を入力:
- Use case description(ユースケースの説明)
- Website URL(該当する場合)
- Compliance(コンプライアンス対応)
- 申請を送信(通常24時間以内に審査完了)
3. Terraform での自動化
3.1 SES Identity リソース
resource "aws_ses_email_identity" "main" { email = "user@example.com" } 3.2 SES Configuration Set(オプション)
送信イベントの追跡や、バウンス・苦情の処理に使用:
resource "aws_ses_configuration_set" "main" { name = "main-config-set" } resource "aws_ses_event_destination" "cloudwatch" { name = "cloudwatch" configuration_set_name = aws_ses_configuration_set.main.name enabled = true matching_types = ["send", "bounce", "complaint"] cloudwatch_destination { default_value = "default" dimension_name = "ses:configuration-set" value_source = "messageTag" } } 3.3 IAMポリシー(アプリケーションからの送信用)
data "aws_iam_policy_document" "ses_sender" { statement { actions = [ "ses:SendEmail", "ses:SendRawEmail" ] resources = [ aws_ses_email_identity.main.arn ] } } resource "aws_iam_policy" "ses_sender" { name = "ses-sender-policy" description = "Allow sending emails via SES" policy = data.aws_iam_policy_document.ses_sender.json } メール送信のテスト
AWS CLI からのテスト
aws ses send-email \ --from user@example.com \ --destination ToAddresses=recipient@example.com \ --message Subject={Data="Test Email"},Body={Text={Data="This is a test email"}} \ --region ap-northeast-1 アプリケーションからの送信例(Ruby on Rails)
# config/environments/production.rb config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: 'email-smtp.ap-northeast-1.amazonaws.com', port: 587, user_name: ENV['SES_SMTP_USERNAME'], password: ENV['SES_SMTP_PASSWORD'], authentication: 'plain', enable_starttls_auto: true } モニタリングと運用
1. CloudWatch メトリクス
監視すべき主要メトリクス:
- Send: 送信リクエスト数
- Delivery: 配信成功数
- Bounce: バウンス数
- Complaint: 苦情数
- Reject: 拒否数
2. バウンスと苦情の処理
- バウンス率が5%を超えると警告
- 苦情率が0.1%を超えると警告
- 継続的に高い場合、アカウント停止のリスク
3. レピュテーション管理
- 定期的にSESのレピュテーションダッシュボードを確認
- バウンスリストの管理
- 購読解除メカニズムの実装
トラブルシューティング
送信エラーが発生する場合
- Identity未検証: メールアドレスの検証を確認
- サンドボックスモード: 本番アクセスリクエストの状態確認
- 送信制限: クォータの確認と必要に応じて引き上げリクエスト
- IAM権限: 送信アプリケーションのIAM権限を確認
バウンスが多い場合
- メールアドレスの検証
- DNSレコード(SPF、DKIM、DMARC)の設定確認
- メールコンテンツの見直し(スパムフィルター対策)
ベストプラクティス
- DKIM設定: ドメイン認証を有効化してレピュテーション向上
- カスタムMAIL FROM: バウンス処理を自ドメインで管理
- Configuration Set: 送信イベントを追跡して改善
- 購読解除リンク: すべての配信メールに含める
- 段階的な送信量増加: 急激な送信量増加を避ける
参考リンク
This post is licensed under CC BY 4.0 by the author.