どーも!shihopowerです🙋♀️
AWS SAP の対策をしていて、SES の SMTP 周りの問題でまったく太刀打ちできなかったので、公式ドキュメントを読み込んでまとめました。
「SMTP くらい知ってるけど、SES と組み合わさると急に頭が真っ白になる…」という方、ぜひ一緒に整理しましょう!
目次
1. Amazon SES の SMTP インターフェースって何?
Amazon SES でメールを送信する方法は大きく 2つ あります。
| 方法 | 概要 |
|---|---|
| SMTP インターフェース | 既存の SMTP 対応アプリ・メールサーバーからそのまま利用できる |
| Amazon SES API | AWS SDK や HTTP リクエストを使ってプログラムから直接呼び出す |
SMTP インターフェースは、レガシーなアプリや既存のメールサーバーは SMTP を使ったやり取りしかできないケースも多いので、既存のアプリケーションを大きく改修せずに SES を使い始めたいときに便利な方法です。
2. SES SMTP エンドポイントへの接続方法:2種類ある!
ここが今回のポイントです🎯
Amazon SES の SMTP エンドポイントは、すべての接続を TLS で暗号化することを要求しています。
Amazon SES SMTP endpoint requires that all connections be encrypted using Transport Layer Security (TLS).
TLS 暗号化接続を確立する方法として、SES は次の 2種類 をサポートしています。
STARTTLS
STARTTLS は、最初は平文(暗号化なし)で接続し、途中から TLS 暗号化に切り替える仕組みです。
接続の流れはこうなります:
- クライアントが SMTP エンドポイントにポート 25・587・2587 のいずれかで接続
-
EHLOコマンドを発行 - サーバーが STARTTLS 拡張をサポートしていることを確認
- クライアントが
STARTTLSコマンドを発行 → TLS ネゴシエーション開始 - TLS 確立後、改めて
EHLOコマンドを発行して SMTP セッションが始まる
TLS Wrapper
TLS Wrapper(SMTPS・Handshake Protocol とも呼ばれます)は、接続の最初から TLS 暗号化を開始する方式です。STARTTLS とは異なり、平文のやり取りが一切発生しません。
接続の流れはこうなります:
- クライアントが SMTP エンドポイントにポート 465・2465 のいずれかで接続
- サーバーが証明書を提示
- クライアントが
EHLOコマンドを発行して SMTP セッションが始まる
2つの比較まとめ
| STARTTLS | TLS Wrapper | |
|---|---|---|
| 接続方式 | 平文から始まり、途中で TLS に切り替え | 最初から TLS で接続 |
| 使用ポート | 25・587・2587 | 465・2465 |
| 別名 | - | SMTPS、Handshake Protocol |
| 特徴 | 既存の SMTP ポート(25番など)をそのまま使える | よりシンプルだが専用ポートが必要 |
EC2 からポート25を使う場合の注意点
Amazon EC2 はデフォルトでポート 25 のメールトラフィックをスロットリングします。EC2 から SES へポート 25 経由で送信するとタイムアウトになる可能性があるため、「メール送信制限の解除リクエスト」を提出するか、別のポート(587 など)を使用することが推奨されています。
3. SMTP 認証情報の取得方法
SES の SMTP インターフェースを使うには、専用の SMTP 認証情報(ユーザー名・パスワード) が必要です。
ここで超重要な注意点があります⚠️
Your SMTP password is different from your AWS secret access key.
SMTP 認証情報は、IAM のアクセスキーや AWS コンソールのログインパスワードとはまったく別物です!
また、SMTP 認証情報は AWS リージョンごとに固有です。複数リージョンで SES を使う場合は、リージョンごとに認証情報を作成する必要があります。
取得手順(SES コンソールから)
- Amazon SES コンソール を開く
- 左ナビゲーションの「SMTP 設定」を選択
- 右上の「SMTP 認証情報の作成」をクリック(IAM コンソールに遷移)
- SMTP ユーザー名を入力 → 「ユーザーの作成」
- 表示された SMTP パスワードを必ずコピーまたはダウンロード(このダイアログを閉じると二度と確認できません)
- 「SES コンソールに戻る」をクリックして完了
4. まとめ
今回のポイントをざっくりおさらいします!
- SES でメールを送る方法は SMTP インターフェース と API の2種類
- SMTP エンドポイントへの接続には STARTTLS(ポート 25・587・2587)と TLS Wrapper(ポート 465・2465)がある
- 既存の SMTP ポート(25番など)をそのまま使いたい場合は STARTTLS が適切
- SMTP 認証情報は IAM 認証情報とは別物。SES コンソールから別途取得が必要
最後まで読んでいただきありがとうございました!
間違いや補足などあればコメントで教えてもらえると嬉しいです🙌