AWS SES でできること
-
メール送信(Transactional / Bulk)
- システム通知、パスワードリセット、レシート送信などのトランザクションメール
- 大量メールの一括送信(マーケティング用途にも利用可能)
-
ドメイン認証(SPF / DKIM / DMARC)
- 送信ドメインの正当性を担保し、迷惑メール判定を回避
-
送信結果のトラッキング
- Delivery / Bounce / Complaint / Open / Click のメトリクス取得
- SNS 連携でイベントをリアルタイムに受信可能
-
テンプレートメールの管理
- HTML テンプレートを SES 内に保存し、動的パラメータを埋め込んで送信
-
Sandbox / Production モード
- 初期状態は Sandbox(送信先制限あり)
- 本番利用には Production への昇格申請が必要
AWS SNS でできること
-
通知の配信(Pub/Sub)
- アプリケーション間の非同期メッセージング
- Lambda / SQS / HTTP(S) / Email / SMS などへ配信
-
SES のイベント受信
- Bounce / Complaint / Delivery のイベントを SNS Topic に流し、Lambda や SQS で処理可能
-
モバイルプッシュ通知
- APNs / FCM などのプッシュ通知サービスと連携
-
Fan-out アーキテクチャ
- 1 メッセージを複数購読者へ同時配信
- マイクロサービス間の疎結合化に有効
ローカル開発
LocalStack で開発する
LocalStack を使うことで、SES / SNS を含む AWS サービスをローカルで疑似再現できる。
セットアップ例(docker-compose)
services:
localstack:
image: localstack/localstack:latest
environment:
- SERVICES=ses,sns,sqs
- DEBUG=1
ports:
- "4566:4566"
volumes:
- "./localstack:/var/lib/localstack"
javaの参考ソース
private SesClinet sesClient;
public void inti(){
sesClient = SesClient.builder()
.endpointOverride(URI.create("http://localhost:4566"))
.region(Region.US_EAST_1)
.credentialsProvider(
StaticCredentialsProvider.create(
AwsBasicCredentials.create("test", "test")
)
)
.build();
}
public void sendEmail(){
SendEmailRequest request = SendEmailRequest.builder()
.destination(Destination.builder()
.toAddresses("test@example.com")
.build())
.message(Message.builder()
.subject(Content.builder().data("Test Email").build())
.body(Body.builder()
.text(Content.builder().data("Hello from LocalStack!").build())
.build())
.build())
.source("noreply@example.com")
.build();
sesClient.sendEmail(request);
}
ローカルでできること
- SES のメール送信 → LocalStack のメールビューアで確認
- SNS Topic の作成・Publish
- SQS と SNS の連携(Subscription)
- Lambda のローカル実行(必要に応じて)
以下、docker内からメールを打つ参考スクリプト。
aws --endpoint-url=http://localhost:4566 ses send-email \
--from no-reply@example.com \
--destination ToAddresses=dev@example.com \
--message "Subject={Data=Test},Body={Text={Data=Hello}}"
結合テスト環境でのテスト
Sandbox 状態での確認
Sandbox の制限
- 送信先は 検証済みメールアドレスのみ
- 1 日あたりの送信数が制限される
- 本番ドメインでの大量送信は不可
結合テストで確認すべき項目
メール送信 API の正常系・異常系
- SNS 経由の Bounce / Complaint の受信
- メールテンプレートのレンダリング
- SQS / Lambda との連携動作
実環境でのテスト
Production モードへの移行
- AWS に「送信制限解除リクエスト」を提出
- 利用目的、送信量、オプトイン方法などを説明
- 承認されると Sandbox 制限が解除される
本番テストで確認すべきこと
- 実際の受信メールの表示(HTML / Text / 画像リンク)
- SPF / DKIM / DMARC の認証結果
- 迷惑メールフォルダに入らないか
- Bounce / Complaint の処理が正しく動くか
- 大量送信時のスループット(Rate Limit)
本番テストの注意点
- テスト用のメールリストを用意する
- 本番ユーザーに誤送信しないように注意
- 送信ログを CloudWatch / S3 に保存しておく