本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「Amazon SESで検証用Eメールを送信して、受信メールをS3バケットに格納する方法」を再編集したものです。
こんにちは、株式会社FIXERの村上です。本ブログは個人ブログにもポストしています。
AWSが提供するEメール送受信サービス『Amazon SES』を使用してEメールを送信する手順を書いてみました。
※本ブログでは、2024年7月16日時点 での仕様やマネコンUIに基づき執筆しております。
本ブログで紹介する構成図はこちらになります。東京リージョンで構成していきます。
前提条件
・送信元アドレスのドメインを所有していること
・Route 53などのDNSサービスを使用し、ホストゾーンにDNSレコードを登録できること
1. 送信機能を作ってみる
(1)Amazon SES IDの「ドメイン」を作成する
Amazon SESの「ID」とは、ドメイン(サブドメイン含む)とメールアドレスの総称になります。
ドメインは作成する必要がありますが、メールアドレスの作成は任意です。メールアドレスについては、Cognitoなどの他サービスと連携する場合や、特定の送信元アドレスに限定する場合に限り作成します。
Amazon SESコンソールから「ID」を選択し、「IDの作成」を押下します。
IDタイプで「ドメイン」を選択し、認証させたいドメイン名やDKIMの設定を入力して作成します。
(2)ドメイン認証とDKIM設定を実施する
ドメイン作成後、「ドメイン認証」が行われます。数分ほどでDNSの反映が行われるため、ブラウザを更新するなどして、検証の成功可否を確認します。
送信元の改ざん防止対策を証明するDKIM設定も同様に成功可否を確認します。失敗した場合、DNSゾーンに登録されたCNAMEレコードの設定値を確認しましょう。
(3)DMARC設定を実施する
最後に送信元のなりすまし防止や信頼性を向上させるため、DMARC設定を行います。
下記のTXTレコードを登録します。
送信機能の実装は以上になります。
2. 受信機能を作ってみる
(1)Eメール受信用のS3バケットを作成する
Amazon SESを作成した同じリージョンでS3バケットを作成します。
Amazon S3コンソールから「バケットの作成」を押下します。本ブログでは、「mailtechblog-archive」と名付けました。
(2)Amazon SESの書き込み操作を許可するS3ポリシーを構成する
Amazon SESのアーカイブ処理を許可するS3ポリシーを設定します。
本ブログでは下記の値を設定しました。
(3)Amazon SESの受信設定を構成する
Amazon SESを受信サーバにする場合、MXレコードの登録が必要です。
DNSプロバイダーの管理コンソールにサインインします。本ブログでは、Route53を使用しています。
下記のTXTレコードを登録します。
(4)Amazon SESの受信ルールを構成する
Amazon SESがEメールを受信したときにどのような処理を行うのかフローを定義していきます。
Amazon SESコンソールから「Eメール受信」を選択し、「ルールセットの作成」を押下します。受信ルールセット名を入力して作成します。
次に受信ルール名を入力します。Amazon SESの標準テストメールは暗号化されていない通信になるため、暗号化確認オプションは無効化します。
そして、受信ルールの対象を定義します。定義しない場合は、すべてのIDが適用されるため適宜 設定しましょう。
最後に処理フローを定義します。今回は「Amazon S3 バケットに配信」をアクションタイプにします。
S3プレフィックスも指定できるため、運用要件に合わせて指定しましょう。
(5)Amazon SESの受信ルールを有効化する
デフォルトでは無効化された状態で受信ルールセットが作成されます。
有効化しましょう。
受信機能の実装は以上になります。
検証用メールを送信してみた
「テストEメールの送信」を押下します。
検証用の送信元、送信先の情報を入力し、テストメールを送信してみます。
送信後、Amazon S3コンソールに移動すると受信された時刻に送信されたEメール内容のオブジェクトデータが格納されます。
ダウンロードして、Eメールの詳細情報を確認してみます。
Google Admin Toolbox
SPF、DKIM、DMARCの解析結果もPASS(合格)していますね! いいね👍
[補足]S3バケットに受信メールが格納されない
Amazon SESを初めて利用するAWSアカウントまたはリージョンであれば、サンドボックス状態でSESアカウントが作成されます。この初期状態では、「検証用メールを送信してみた」で紹介した特定のメールアドレスに対して、メール送信することができない制約があります。
解決するためには、Amazon SES のEメールアドレスを作成する必要があります。以下のドキュメントのとおりに設定してください。
(1)Eメールアドレス ID の作成
(2)Eメールアドレス ID の検証
Eメールアドレスを作成後、S3バケットに下記のようなメッセージが記載されたデータが格納されます。notepadなどで表示してください。
本文から
https://email-verification.ap-northeast-1.amazonaws.com/?Context=XXXXXX
から始まるURIをブラウザで実行してください。リージョンIDのコードはAmazon SES作成したものになります。
ブラウザ画面で「検証に成功しました」と表示されたら、送信機能を利用できます。
[任意]サプレッションリストから削除する
上記の詳細情報を見ればわかるのですが、送信先やメール本文の情報が記載されていません。
これはAmazon SESが自動でサプレッションリスト(抑制リスト)に受信側のメールアドレスを登録しているためです。今回は検証用途であるため深追いはしませんが、これらの問題を解決したい場合にはAmazon SESコンソールのサプレッションリストから対象のメールアドレスを明示的に削除してください。
その後、再送信すると無事送信できたことを確認できます。
最後に
最後まで読んでいただき大変ありがとうございます。
Amazon SESを検証するための環境構築に向けてブログを書きました。受信できるメールアドレスを求められることが多いサービスなのですが、受信メールをS3バケットにアーカイブすることにより簡単に実現できます。
もし検証環境をサクッと用意したい場合は紹介した手順を試してみてくださいませ!
この連載の記事
-
TECH
ヘルプデスク担当者が「Amazon Q in Connect」のすごさを分析する -
TECH
初心者向け:RDSスナップショットを別のAWSアカウントで復元する手順 -
TECH
AWS CDKとGitHubを使ったIaC=インフラ構成管理の基本 -
TECH
同世代エンジニアに刺激を受けた!JAWS-UG「若手エンジニア応援LT会」参加レポート -
TECH
AWS CDKでGuardDutyのRDS保護を有効化しよう(として詰みかけた話) -
TECH
ノーコードで生成AI連携! SlackからAmazon Bedrockのエージェントに質問 -
TECH
Terraform:変数の値が未代入でもインタラクティブな入力を回避する方法 -
TECH
Amazon BedrockからWeb上のコンテンツを参照する新機能「Web Crawler」 -
TECH
IAMユーザーのアクセスキーを使わず「IAMロール」を使うべき理由 -
TECH
CX視点で興味深かった「AWS Summit Japan 2024」のセッション - この連載の一覧へ