ごきげんよう、@An_nAです!
この記事はハンズラボ Advent Calendar 2022 21日目の記事です。
今年わたしが初めて体験したことの一つに、Amazon Simple Email Service(以降、SESと表記します)でのメール受信があります。ただ受信すれば良いわけではなく、SESでメールを受信したらメールのデータを保存しつつメール送信元にSESでメールを送る、という構成でした。
これ、思っていたよりややこしかったんですよね。
備忘録がてら実施したことをまとめますので、どなたかの参考になれば幸いです。
前編となる本記事では、まずは概要とおさえておきたいポイントをご紹介します。
短い記事ですが、後編の前提知識となりますので、ぜひご一読いただければと思います。
コードだけ見たい!という方は後編の記事をご参照ください。
実現したいこと
今回は、以下を実現したいと思います。
- ユーザーがシステム宛に空メールを送ると、システムから登録用URLが記載されたメールが届く。
受信したメールの送信元アドレスをどこかに保存しておきたいですね。
もうちょっと流れを噛み砕いてみましょう。
- ユーザーがシステム宛にメールを送信
- 受信したメールの情報をDynamoDBに登録
- 登録用URLを生成
- システムから、ユーザー(メール送信元)に登録用のURLを記載したメールを送信
という感じでいけそうです。
おさえておきたいポイント
SESでは「受信ルール」というものを使うことで、受信したメールをS3バケットに保存したり、Lambda関数を呼び出したりすることが可能です。今回もこの受信ルールから呼び出したLambdaでDynamoDBへのデータ保存処理やメール送信処理を行います。
参考:
・Amazon SES を使用した E メールの受信
・受信ルールを使用した受信者ベースの制御
概要を構成図で表現すると、こんな感じです。
メール受信用SESとLambdaがバージニア北部(us-east-1)に配置されている点が特徴的ですね。
理由はのちほど説明します。
メールデータの保存用DynamoDBやメール送信用SESは他の機能(本記事のスコープ外なのであえて描いていません)でも使用したいので、バージニア北部ではなく東京に置くこととします。
さて、SESでのメールの受信と受信ルールの使用にあたり、おさえておきたいポイントを2つご紹介します。
SESでメールを受信できるリージョンは限定されている
構成図をもう一度見てみましょう。
前述の通り、SESがバージニア北部(us-east-1)と東京(ap-northeast-1)にそれぞれ存在していますね。これは、メールの受信が以下のリージョンでのみ可能(2022年12月現在)なためです。
- US East (N. Virginia)
- US West (Oregon)
- Europe (Ireland)
残念ながら東京リージョンのSESにはメールを受信する機能がないので、今回の構成ではメール受信にバージニア北部のSESを利用します。
参考:
・Amazon Simple Email Service endpoints and quotas
受信ルールで呼び出すLambdaは、受信用SESと同じリージョンに配置する
受信ルールで呼び出すLambdaは、メール受信に利用するSESと同じリージョンに配置する必要があります。今回の例だとバージニア北部ですね。
参考:
・Lambda 関数のアクションを呼び出す
バージニア北部のLambdaから東京のDynamoDBやSESを利用するとなると、少し工夫が要りそうな予感がします。
SESでメールを受信するにあたり、気をつけないければならないポイントをご紹介しました。
短いですが、前編はここまでです。
後編では、ご紹介したポイントを踏まえつつ、実装していきますよ。
どうぞお楽しみに!