【AWS SES連載 第2回】SESメール受信編 - 受信設定とS3連携サムネイル画像

【AWS SES連載 第2回】SESメール受信編 - 受信設定とS3連携

株式会社Q’sfix

お世話になっております。 Q'sfix 技術推進グループの関です。

更新が滞っており、申し訳ありません。

今後も投稿は続けていきますので、引き続きよろしくお願いいたします。

はじめに

前回取得したドメインを使って、AWS SESでメールを受信し、S3に保存する仕組みを構築します。

今回やること

  1. SESでのドメイン検証
  2. S3バケットの作成と権限設定
  3. SESメール受信ルールの作成
  4. MXレコードの設定
  5. 実際にメール送信テスト

アーキテクチャ

今回構築する範囲は以下の通りです:

インターネット → Route53(MXレコード) → SES → S3バケット

aws-ses-architecture_ses_02

※赤枠部分が今回の実装範囲です。次回以降でLambdaによる自動処理と返信機能を追加予定です。

1. SESでのドメイン検証

ドメインの追加

  1. SESコンソールを開く

    AWS Console > SES > ID
  2. IDの作成

    • 「IDの作成」をクリック01_ID作成
    • 「ドメイン」を選択
    • 前回取得したドメインを入力
    • DMARCを適用させたいので、「カスタム MAIL FROM ドメインの使用」にチェックを付ける
    • MAIL FROM ドメインには任意のサブドメインを入力
    • DNSレコードのRoute53への発行を有効化する02_ドメイン入力、SPF設定
    • DKIMは「Easy DKIM」を選択
    • DKIMの他設定はすべてデフォルト03_DKIM設定
    • 「IDの作成」をクリック

MXレコードの追加

上記によりRoute53にレコードが発行されているはずなので、Route53でレコードがあることを確認します。

  1. Route53コンソールを開く

    AWS Console > Route53 > ホストゾーン > [ドメイン名]

    MXレコード(メール配送用)、TXTレコード(SPF用)、CNAMEレコード(DKIM用)が作成されていることを確認します。
    04_DNSレコードの確認

  2. 受信用MXレコードを追加

上記では、受信用のレコードが作成されていないため、以下を参照にRoute53でレコードを追加します。

Type: MX
Name: [ドメイン名]
Value: 10 inbound-smtp.ap-northeast-1.amazonaws.com
TTL: 300
  1. SESの検証の確認

SESのIDやDKIM、MAIL FROMの設定が検証済み、成功になっていることを確認します。

  • 検証済み、成功になるまで時間がかかる場合があります04_1_ID検証04_2_SPF_DKIM検証

2. S3バケットの作成と権限設定

S3バケットの作成

  1. S3コンソールを開く

    AWS Console > S3 > バケットを作成
  2. バケット設定

    バケット名: 任意のバケット名(一意である必要があります)
    リージョン: ap-northeast-1 (SESと同じリージョン)
    パブリックアクセスをブロック: 有効のまま(メールの意図しない公開を防ぐため)

バケットポリシーの設定

SESがS3にメールを保存できるよう権限を設定します。

  1. バケットポリシーの追加

    S3 > [作成したバケット] > アクセス許可 > バケットポリシー
  2. ポリシー内容

    {
    "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コンソール右上のアカウント情報から確認できます

05_バケットポリシー

3. SESメール受信ルールの作成

ルールセットの作成

  1. SESコンソールで設定

    SES > Eメール受信 > ルールセットの作成
  2. ルールセット名を設定

    ルールセット名: [任意のルールセット名]
  3. ルールセットをアクティブに設定

    • 作成後、「有効として設定」をクリック

08_ルールセットの有効化

受信ルールの作成

  1. ルールの作成

    ルールセット > [任意のルールセット名] > ルールの作成
  2. ルール名を設定

    ルール名: [任意のルール名]
    • セキュリティ向上のため、TLSを必須としておきましょう
      09_ルール作成
  3. 受信者の設定

    受信者の条件: 任意のメールアドレス
    • 受信者の条件に指定したメールアドレスからメールを受信した場合、次に設定するアクションを行います。
      10_受信者条件
  4. アクションの設定

    • 「新しいアクションの追加」をクリック
    • 「S3バケットへの配信」を選択
    • S3バケット:先ほど作成したバケット名を入力
    • オブジェクトキープレフィックス:emails/ (オプション)
      11_アクションの追加
  5. レビュー

    • ルール設定について確認
    • 「ルールの作成」をクリック

4. メール送信テスト

テストメール送信

  1. SESで検証済みのドメインからテストメールを送信
    • SESの検証済みのドメインから「テストEメールの送信」をクリックする
      12_テストメール送信
      13_テストメール送信2

結果の確認

  1. S3での確認

    S3 > [バケット名] > emails/
  2. 受信したメールファイル

    • ランダムな名前のファイルが作成される
    • ファイルをダウンロードして中身を確認
    • RFC 2822形式のメールデータが保存されている
      14_メール受信確認

まとめ

今回は以下を実施しました:

  • SESでのドメイン検証(DKIM設定)
  • MXレコードの設定
  • S3バケットの作成と権限設定
  • SESメール受信ルールの作成
  • 実際のメール受信テスト

次回予告

次回は、S3に保存されたメールファイルをLambda関数で自動的に解析する仕組みを構築します。メールの解析処理をPythonで実装し、送信者や件名などの情報を抽出する方法を紹介します。


📚 連載ナビゲーション

執筆者:株式会社Q’sfix

一覧ページへ戻る

RELATED

関連記事はこちら

CONTACT

システム開発やDXなど
ITソリューションについてもっと知りたい方はこちら

サービス・製品の詳細、スポーツやリハビリといった動作計測技術について
知りたい方やお困りの方はお気軽にお問い合わせください。