前編はこちら!!
続きとして
こちらは「見ながらやろう! AWSを使った「簡単!! 独自ドメインの送受信システム構築」」の後編です。
前編を終えた後というのが前提です。
注意!!!
今回の記事は初学者向け、もしくは自分のようなアドバイスがなくて解決方法を模索している方が対象です。周りに正しい知識や経験を聞ける方や、経験の長い皆様は「ほーん、こんな奴もいるんだ」程度で認識していただけると幸いです。
今回やったこと
メールの送受信を(従業員全体が)使い慣れているGmailでできるようにする
前提条件:
#前編が終わっていること
ローカルディレクトリに[ temporary ]というディレクトリが 存在しない こと
作業内容:
#前編
- AWSでSESの設定をする
- 送信の設定に使うメールアドレスの登録
- 送受信の設定に使うドメインの登録
- IAMユーザ作成
- メールの受信用S3バケットの作成、設定
- Gmailでの送信設定
#後編 <- (今回はこれ)
2. SESの送信制限の解除
1. サポート宛に送信制限解除の連絡をする
3. SESで受信した内容をGmailに転送する
1. ライブラリのデータを自分用に設定し直す
2. Lambda用の作業用[ IAM Role ]を作成する
3. Lambdaの関数作成
4. SESでLambdaの呼び出すルールを追加する
5. 受信用S3バケットにライフサイクルポリシーを設定する
4. 最終確認
2. SESの送信制限の解除
SESの送信制限...
SESには送信制限が存在しています。同時に制限解除するまでは
サンドボックス内での操作となり、外部との接続は限定的になっています。
まずは送信制限の解除から始めましょう。
2-1: サポート宛に送信制限解除の連絡をする
前編の続きからスタートします
再び[ SES ]のコンソールにログインしましょう

次にサイドバー[ Sending Statistics ]を見てみましょう
現時点ではサンドボックスのため、制限がかかっています
画面上部の[ Request a Sending Limit Increase ]をクリックしましょう

今度は[ サポート ]の画面に移動します。
自動で[ SES送信制限 ]までの入力が終わっているはずです

各種項目を記入していきましょう
まずは分類からです
・規約やAUPはしっかり読みましょう
・メールの種類は今回は取引にしています。システムなど、場合にあった項目を選択しましょう
・メールは許可のない不特定多数に送ることは認められません。
・バウンス等の処理は[ Lambda ] などのサービスを用いて対応する記事を別途作成予定です

リクエスト内容です
・送信クォータ[ 50000 ]
・最大送信レート[ 14 ]

最後に制限解除の理由を説明しましょう
皆さんの申請理由をここに述べましょう
終わりましたら[ 送信 ]を押して完了です

制限解除はAWS側に行ってもらうので、多少時間がかかります
3. SESで受信した内容をGmailに転送する
参考にさせていただいた記事:
今度は現在[ S3 ]で受信しているメールをGmailに転送する設定を行います。
SESでは[ POP3 ]などの受信に対応していません(別途複数のアクションがあるのですが今回は省略)
そのため[ Lambda ]を用いて転送処理を行います。
今回はこちらのライブラリを使わせていただきます
3-1: ライブラリのデータを自分用に設定し直す
まずはライブラリのコードをクローンさせてもらいましょう
ライブラリにアクセスし、URLをコピーします

今度は自分のローカルに一時的な作業ディレクトリを作って作業をします
以下はコピペである程度作業ができるようにしています。
以下は[ Terminal ]での作業です
[ npm ]のインストール方法はこちらの記事を参照してください
cd ~
mkdir temporary && cd temporary/
git clone https://github.com/arithmetric/aws-lambda-ses-forwarder.git
mkdir my-lambda-ses
cp -r aws-lambda-ses-forwarder/example/ my-lambda-ses/
cd my-lambda-ses/
ファイルの中身を書き換えていきます
下のコードをコピペして書き換えてください
書き換える際は好きなテキストエディタをご利用ください
cat << ETX > index.js
var LambdaForwarder = require("aws-lambda-ses-forwarder");
exports.handler = function(event, context, callback) {
// See aws-lambda-ses-forwarder/index.js for all options.
var overrides = {
config: {
fromEmail: "noreply@example.com", // 転送元に使うアドレス
emailBucket: "s3-bucket-name", // 前回作成したS3バケット名
emailKeyPrefix: "mails/", // S3のプレフィックス名
forwardMapping: {
"info@example.com": [ // 受信用に設定したメールアドレス
"example.john@example.com" // 受信メールの転送先Gmailアドレス
]
}
}
};
LambdaForwarder.handler(event, context, callback, overrides);
};
ETX
終わったら[ npm install ]をしてZIP化します
cd temporary/my-lambda-ses/
npm install
zip -r my-lambda-ses ./*
以上で[ Terminal ]画面での作業は終了です
3-2: Lambda用の作業用[ IAM Role ]を作成する
作業はAWSに戻ります
外面左上[ サービス ]から[ IAM ]を選択します

サイドバー[ ロール ]から[ ロールの作成 ]をクリックします

エンティティに[ Lambda ]を選択して次のステップに進みます

[ ポリシーの作成 ]をクリックします

コード下部の[ S3-BUCKET-NAME ]の部分は。自分のメール用S3バケットの名前に変更してください
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": "ses:SendRawEmail",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::S3-BUCKET-NAME/*"
}
]
}
ポリシーの作成画面に移動するので、[ JSON ]を選択し、上のコードを編集したものを貼り付けます

ポリシーに名前と説明を入力します
今回は[ lambda-send-mail-policy ]にしました。

確認のボタンを押すと、コンソール画面で作成されていることが確認できます

元の画面に戻りロールの設定の続きを行います
更新ボタンを押し、作成したポリシーを検索窓に入力します
ポリシーが見つかったらチェックして先に進みます


ロール名に[ lambda-send-mail-role ]と入力すれば完了です

コンソール画面で作成されていることが確認できます

3-3: Lambdaの関数作成
受信設定の中心になるLambdaの関数を設定していきます
外面左上[ サービス ]から[ Lambda ]を選択します

画面内の[ 関数の作成 ]をクリックします

関数の作成画面になります
名前: mail-fowarding-[Gmailのアドレス]
ランタイム: Node.js 8.10
既存のロール: 先ほど作成したIAMロール

Lambdaのコンソール画面になります
ロールが間違っていなければ、アクセス許可されているサービスやランタイムが
下の画像のようになっているはずです

基本設定のタイムアウトを[ 1分 ]に設定します

コードエントリタイプを[ .zpiファイルをアップロード ]に変更します
Macの画面ですが、先ほど作成したZIPファイルを選択します

アップロードが完了したら画面右上の[ 保存 ]をクリックします

以上で[ Lambda ]での作業は完了です
3-4: SESでLambdaの呼び出すルールを追加する
SESのコンソールに移動します
サイドバ[ Rule Sets ]から[ View Active Rule Set ]をクリック

前回製作したルールをクリック

[ Actions ]で新しくルールを追加します
[ Add action ]から[ Lambda ]を選択します


[ Lambda function ]から先ほど作成した関数を選択します

作っただけではアクセスの許可がないので、許可します

以上でSESの設定終了です
3-5: 受信用S3バケットにライフサイクルポリシーを設定する
まずはS3の作成したバケットに移動します
タグの[ 管理 ]から[ ライフサイクル ]、[ライフサイクルルールの追加]を選択します

ルール名に[ tmp-mail-life-cycle ]と入力します


失効の設定を[ 現行バージョン ]で[ 3 ]日後と記入します
これはお好みの数字でどうぞ

最後に確認をして[ 保存 ]します

コンソール画面で反映が確認できました

4: 最終確認
最後にメールが確かに転送されているか確認します
自分が持っている適当なメールアドレスから、受信したい独自ドメインのメールアドレスに送信します

S3にメールが入っていますね

メールが先ほど設定した[ index.js ]で設定した形で受信できているはずです

以上で作業終了です、お疲れ様でした!!
後片付け
最後にローカルディレクトリを片付けましょう
temporaryディレクトリに大事なファイルが存在しないことを確認してください
また、このディレクトリ以外で作成した場合は、各人で判断して削除をお願いします
cd ~/
rm -rf temporary/
終わりに
ここまでお付き合いいただき、ありがとうございました。
以上でSESを使ったGmailでの送受信についての作業を完了します。
前半でも述べたことですが、SESのサービスは日本のキャリアメールには向きません。
そちらを念頭に置いた上でご利用いただくようにお願いします。
アドバイスや意見、感想などございましたら連絡をお待ちしております。
参考、引用
SES-Gmail受信:
https://tech.taiko19xx.net/entry/2018/05/01/195119
Lambdaライブラリ:
https://github.com/arithmetric/aws-lambda-ses-forwarder
npm:
https://qiita.com/Alex_mht_code/items/422f5ce10d9c9d5729b7