[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: 送信イベントを追跡して改善
- 購読解除リンク: すべての配信メールに含める
- 段階的な送信量増加: 急激な送信量増加を避ける