見出し画像

AWS SES(Simple Email Service)でメールを受信する

こんにちは。バチャこみ!のインフラ担当(仮)です。いままで四つ葉のクローバーだと思っていたものが、じつは四つ葉のカタバミだと昨日になって知りました。とりあえず全員幸せになれ!!

あなたはどちらかわかりますか?

さて、今回はAWSのSimple Email Service(以下SES)でメールを受信する方法をお伝えしたいと思います。

結論から言います

そもそも独自ドメインでSESを使ったメールの送信/受信をしたいときは東京リージョンを選んではダメです!

以下の記事は「そんなこと言っても、また設定しなおすのは大変だしメール送信の上限緩和申請をもう一度やるのはイヤだ!」という方向けになります。

前提

バチャこみ!ではSESを使って、新規登録ユーザーに認証メールを配信しています。そしてメール配信に使用するSESは東京リージョン(ap-northeast-1)で以下の手順で設定していました。

①Route53に登録済みの「xxxxxx.com」というドメインでSESのIDを作成
②メール送信の上限緩和を申請します(記事の最後にオマケとして例文を載せています※重要)申請が下りるまで最大1日かかります
②SESのSMTP設定で認証情報を作成⇒IAMユーザーが作成されます
③②で作成されたユーザーのアクセスキー、シークレットアクセスキーを取得
⑤IAMでSESからのメール送信を許可するポリシーを作成
⑥⑤のポリシーをEC2インスタンスのIAMロールに追加します
⑦アプリケーション側でSMTPの情報を更新します
⑧新規登録ユーザーに認証メールが配信されるか動作確認します

ところが、このSES(東京リージョン)は送信することだけを想定したサービスなのでメールを受信することはできません

SESでメール受信オプションを利用できるリージョン


SESでメール受信オプションを利用できるリージョンは限られています(2023年4月14日時点)
・us-east-1
・us-west-2
・eu-west-1

よって、メール配信用のメールアドレスと同じドメインでメール受信もしたい場合は上記のいずれかのリージョンでSES受信設定をする必要があります!(もっとはやく教えてほしかった)

バージニア北部リージョン(us-east-1)でSESの受信設定をする

 AWSコンソール画面> サービスの検索 > Amazon Simple Email Serviceを選択

リージョンを東京⇒米国東部(バージニア北部)us-east-1に切替

⚠このリージョンのSESではメール受信のみを設定するので、送信メールの上限緩和申請やSMTP設定は必要ありません

①検証済みIDの作成

Amazon SES >検証済みID >「IDの作成」

IDの詳細
- IDタイプ:ドメイン
- ドメイン:xxxxxx.com
- カスタムMAIL FROMドメインの使用:✓(すべての検証オプションの有効化のため)
- MAIL FROMドメイン:mail.xxxxxxx.com(mail@xxxxxxx.comではなくmail.xxxxxx.comです)
- DNSレコードのRoute53への発行:有効化

ドメインの検証:デフォルトのままでOKです

「IDの作成」をクリックします

新しく作成したドメインが検証済になるのを待ちます

Route 53にDomainKeys Identified Mail (DKIM)と
カスタムMAIL FROM ドメインのMXレコード、TXTレコードが追加されていればOKです

Route 53へのレコードの追加登録

AWSコンソール>サービスの検索>Route 53 >ホストゾーン>xxxxxx.com >レコード>「レコードを作成」

レコード名:xxxxxxx.com([subdomain]は空欄のまま)
レコードタイプ:MX(メールサーバーを指定するレコード)
値:10 feedback-smtp.us-east-1.amazonses.com(固定です)
「レコードを作成」

⇒これで独自ドメインとSESで作成したIDが紐づきました

Eメール受信のルールセットの作成

Amazon SES >設定 >Eメール受信 >「ルールセットの作成」

ルールセット名:xxxxxx.com-receive

受信ルールの作成

あたらしく作成したルールセットxxxxxx.com-receiveを選択 > 「ルールの作成」

受信ルールの詳細
- ルール名:xxxxxx.com-receive
- ステータス:有効化

セキュリティと保護のオプション
- Transport Layer Secutiry (TLS) :なし
- スパムとウイルススキャン:有効化
「次へ」

受信者の条件
- 受信者の条件:xxxxxx.com(ドメイン単位で指定)
「次へ」

アクションの追加
- 新しいアクションの追加:なし
(このあと②のステップでWorkMailでOrganizationを作成すると自動で連携アクションが作成される)
「次へ」

設定内容を確認して「ルールの作成」をクリックします

つぎにルールセットxxxxxx.com-receiveを選択して「有効として設定」をクリックします

⇒これでメールの受信ルールが適応されるようになりました

②WorkMailでOrganizationを作成する

※WorkMailも東京リージョンでは利用できません(2023年4月14日時点)リージョンはバージニア北部 (us-east-1)のままで作業を進めてください。
※WorkMailは1ユーザーにつき毎月4USDのコストがかかります

Organization(企業メールアカウント)の作成

AWSコンソール>サービスの検索>WorkMailを選択>[Create organization]

Organization settings
- Email domain : Existing Route 53 domain(すでにRoute 53に登録済のドメイン)
- Route 53 hosted zone : xxxxxx.com
- Alias : xxxxxx(Organizationの名前。デフォルトで設定される〇〇.awsapps.comの〇〇の部分)

Advanced settings : デフォルトのままでOKです

[Create organization]をクリックして作成します

⇒xxxxxxというOrganization(企業メールアカウント)が作成されました

Userの作成

Amazon WorkMail >Organizations > xxxxxx > Users > [Create user]

User details
- User name : contact (WorkMailのログイン時に使用する任意の名前)
- First name (optional) : null
- Last name (optional) : null
- Display name : contact_from_xxxxxx(メールアドレスの代わりに表示される任意の名前)

Email setup
- Email address : contact@xxxxxxx.com
- Password : 任意のパスワードを設定してください
- [Create user]をクリックしてユーザーを作成します

Domainの作成

Amazon WorkMail >Organizations > vachacomi > Domains > [Add domain]

Domain name : xxxxxx.com
[Create domain]をクリックしてドメインを作成します

新しく作成したドメイン:xxxxxxx.comを選択
>[Update all in Route 53 ]をクリックするとメールの検証に必要なDNSレコードを一括登録できます

デフォルトドメインの切替

初期設定ではxxxxxx.awsapps.comがデフォルトのドメインになっています

⦿xxxxxx.comを選択して「Set as default」をクリック

⇒xxxxxx.comがデフォルトドメインになりました

③SESの設定の確認

検証済みIDの確認
Amazon SES > 設定:検証済みID > ID

xxxxxx.awsapps.comというIDがWorkMailによって追加されています
上記のIDを選択して、タブを「承認」に切り替えると承認ポリシーがWorkMailによって作成されていることがわかります
これはWorkMailにSES(us-east-1)からメールを受信する権限を付与するためのポリシーです

最初に作成したxxxxxx.comのIDにも同様にポリシーが付与されています

受信ルールの確認
Amazon SES > 設定:Eメール受信 > 受信ルールセット > xxxxxx.com-receiveを選択

すべての受信ルールに新しいルールがWorkMailによって追加されています

上記のルールを選択して、条件タブを見ると「受信者の条件」にxxxxxx.awsapps.comとxxxxxx.comがあります

アクションタブを見ると、アクションタイプが「Amazon WorkMail」になっています

⇒これでSES(東京リージョン)から送信されたinfo@xxxxxx.comのメールがSES(バージニア北部リージョン)のcontact@xxxxxx.comあてに届くようになりました

④メールの動作確認

それでは実際にメールを送信して動作確認をしてみましょう

今回はメールの受信をAmazon WorkMailのWebブラウザ版で確認したいとおもいます

Amazon WorkMail >Organizations 
作成したOrganizaition:xxxxxxxを選択します

User login > Amazon WorkMail web applicationにhttps://xxxxxx.awsapps.com/mail
というリンクがあるので、クリックしてブラウザでログインします

ユーザー名:contact
パスワード:任意で設定したパスワード
「サインイン」

受信ボックス(Inbox)にメールが届いていればOKです!

⑤オプション

さて、これまでSESでメールを受信するということで設定方法を説明してきましたが、さらに手を加えることでより便利かつ安全に運用できるようになります

たとえば、

SESの受信ルールのアクションでSNS(Simple Nortification Service)オプションをつけて、メール受信時に特定のメンバーに通知メールを送ったり

さらにSNSをトリガーにしてLambdaでSlackのチャンネルに着信を通知したり

Amazon WorkMail(ブラウザ版)の設定で、特定のメールを他のメールアドレスに転送/リダイレクトしたり

することもできます(それはまた、いつか別のおはなし)

⑥おまけ

リージョンに限らず、SESのメール送信の上限緩和って面倒くさいですよね

今回はおこないませんでしたが、これからSESを利用したいという方のために申請時の例文を載せておきたいと思います

初回の申請
メールタイプ: MARKETING
ウェブサイトのURL: https://xxxxxx.com 
ユースケースの説明:
アプリケーションの新規登録ユーザーに認証メールを配信する
WorkMailと連携してユーザーからの問い合わせメールを受信する
不特定多数へのメール配信は行わない

結果

このたびは、送信制限の申請をいただきありがとうございます。残念ながら現時点ではお客様のユースケースについて十分な情報がないため、この申請を承認することはできません。 

もう少し具体的な説明が必要なようです

2回目の申請
メーリングリストをどのように構築または取得する予定ですか?  ⇒ユーザー登録後に認証をしたユーザーのみで構築する予定です

バウンスや苦情にどのように対処する予定ですか?  
 ⇒SNS通知を設定し、バウンスが発生した場合は調査して早急な解消に努めます

受信者があなたからのメールの受信をオプトアウトするにはどうすればよいですか?  
 ⇒WEBサイトやアプリケーションから「メール配信の即時停止」を選択できるようにします

このリクエストで指定した送信レートまたは送信クォータをどのように選択しましたか?

  ⇒商用リリース後、一日の来場者数が最大で10万人、ユーザーからの問い合わせは1000人程度という想定で選択しました

以下はユーザーの新規登録時のメールテンプレートです

~~~

こちらは「xxxxxxx.com」からの自動送信メールです。 この度は新規登録ありがとうございます。 xxxxxxx.comへのアカウント仮登録が完了しました。 以下のURLからログインして、本登録を完了させてください。 https://xxxxxx.com/confirm/xxxxxxxxxxxxxxxxxxxxxxxxxx

xxxxxx.comにログインする

なお、このメールに心当たりのない方はそのまま破棄してかまいません
本登録されていないユーザーに対してはお知らせなどの配信はいたしません

結果

このたびは、送信制限の引き上げ申請をご送信いただき、ありがとうございます。新たな送信クォータは、1 日あたり 50,000 メッセージとなります。新たな最大送信レートは、毎秒 14 メッセージです。また、お客様のアカウントを Amazon SES サンドボックスから移動いたしました。

無事に申請が承認されました

最後に

これからSESを利用してみたい、またはSESを東京リージョンで設定したけどメールを受信できるようにしたいという方、あとはメール送信の上限緩和申請をどうやって書けばいいか迷っている方のお役に立てれば幸いです