お世話になっております。 Q'sfix 技術推進グループの関です。
更新が滞っており、申し訳ありません。
今後も投稿は続けていきますので、引き続きよろしくお願いいたします。
はじめに
前回取得したドメインを使って、AWS SESでメールを受信し、S3に保存する仕組みを構築します。
今回やること
- SESでのドメイン検証
- S3バケットの作成と権限設定
- SESメール受信ルールの作成
- MXレコードの設定
- 実際にメール送信テスト
アーキテクチャ
今回構築する範囲は以下の通りです:
インターネット → Route53(MXレコード) → SES → S3バケット
※赤枠部分が今回の実装範囲です。次回以降でLambdaによる自動処理と返信機能を追加予定です。
1. SESでのドメイン検証
ドメインの追加
-
SESコンソールを開く
AWS Console > SES > ID
-
IDの作成
- 「IDの作成」をクリック
- 「ドメイン」を選択
- 前回取得したドメインを入力
- DMARCを適用させたいので、「カスタム MAIL FROM ドメインの使用」にチェックを付ける
- MAIL FROM ドメインには任意のサブドメインを入力
- DNSレコードのRoute53への発行を有効化する
- DKIMは「Easy DKIM」を選択
- DKIMの他設定はすべてデフォルト
- 「IDの作成」をクリック
- 「IDの作成」をクリック
MXレコードの追加
上記によりRoute53にレコードが発行されているはずなので、Route53でレコードがあることを確認します。
-
Route53コンソールを開く
AWS Console > Route53 > ホストゾーン > [ドメイン名]
MXレコード(メール配送用)、TXTレコード(SPF用)、CNAMEレコード(DKIM用)が作成されていることを確認します。
-
受信用MXレコードを追加
上記では、受信用のレコードが作成されていないため、以下を参照にRoute53でレコードを追加します。
Type: MX
Name: [ドメイン名]
Value: 10 inbound-smtp.ap-northeast-1.amazonaws.com
TTL: 300
- SESの検証の確認
SESのIDやDKIM、MAIL FROMの設定が検証済み、成功になっていることを確認します。
- 検証済み、成功になるまで時間がかかる場合があります
2. S3バケットの作成と権限設定
S3バケットの作成
-
S3コンソールを開く
AWS Console > S3 > バケットを作成
-
バケット設定
バケット名: 任意のバケット名(一意である必要があります)
リージョン: ap-northeast-1 (SESと同じリージョン)
パブリックアクセスをブロック: 有効のまま(メールの意図しない公開を防ぐため)
バケットポリシーの設定
SESがS3にメールを保存できるよう権限を設定します。
-
バケットポリシーの追加
S3 > [作成したバケット] > アクセス許可 > バケットポリシー
-
ポリシー内容
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSESPuts",
"Effect": "Allow",
"Principal": {
"Service": "ses.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "YOUR_AWS_ACCOUNT_ID"
}
}
}
]
}YOUR_BUCKET_NAME
: 作成したS3バケット名YOUR_AWS_ACCOUNT_ID
: 自分のAWSアカウントID(12桁の数字)
重要: AWSアカウントIDは、AWSコンソール右上のアカウント情報から確認できます
3. SESメール受信ルールの作成
ルールセットの作成
-
SESコンソールで設定
SES > Eメール受信 > ルールセットの作成
-
ルールセット名を設定
ルールセット名: [任意のルールセット名]
-
ルールセットをアクティブに設定
- 作成後、「有効として設定」をクリック
受信ルールの作成
-
ルールの作成
ルールセット > [任意のルールセット名] > ルールの作成
-
ルール名を設定
ルール名: [任意のルール名]
- セキュリティ向上のため、TLSを必須としておきましょう
- セキュリティ向上のため、TLSを必須としておきましょう
-
受信者の設定
受信者の条件: 任意のメールアドレス
- 受信者の条件に指定したメールアドレスからメールを受信した場合、次に設定するアクションを行います。
- 受信者の条件に指定したメールアドレスからメールを受信した場合、次に設定するアクションを行います。
-
アクションの設定
- 「新しいアクションの追加」をクリック
- 「S3バケットへの配信」を選択
- S3バケット:先ほど作成したバケット名を入力
- オブジェクトキープレフィックス:
emails/
(オプション)
-
レビュー
- ルール設定について確認
- 「ルールの作成」をクリック
4. メール送信テスト
テストメール送信
- SESで検証済みのドメインからテストメールを送信
- SESの検証済みのドメインから「テストEメールの送信」をクリックする
- SESの検証済みのドメインから「テストEメールの送信」をクリックする
結果の確認
-
S3での確認
S3 > [バケット名] > emails/
-
受信したメールファイル
- ランダムな名前のファイルが作成される
- ファイルをダウンロードして中身を確認
- RFC 2822形式のメールデータが保存されている
まとめ
今回は以下を実施しました:
- SESでのドメイン検証(DKIM設定)
- MXレコードの設定
- S3バケットの作成と権限設定
- SESメール受信ルールの作成
- 実際のメール受信テスト
次回予告
次回は、S3に保存されたメールファイルをLambda関数で自動的に解析する仕組みを構築します。メールの解析処理をPythonで実装し、送信者や件名などの情報を抽出する方法を紹介します。
📚 連載ナビゲーション
- 👈 前の記事: 第1回:ドメイン準備編 - Route53での.clickドメイン取得
- 👉 次の記事: 第3回:メール解析編 - LambdaでS3のメールを処理
- 🏠 連載一覧: AWS SES連載記事一覧