メールに添付されたCSVファイルの取り込み→加工→転送をAWSのサーバレスで構築する方法の考察 part1 メール受信編

# やりたいこと
下記工程を人の手でやっていたところを自動化したいそう。
なんとなくAWSだけで構築できそうなので考えてみた
1. データが記入されたCSVファイルをメールで受け取る
1. 受けとったCSVファイルを確認する
1. 記入内容にミスが無ければサーバに格納
1. 記入内容にミスがあれば、記入列を色付けして返信
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/171c6913-74eb-e300-c5f5-4fec69e93cc7.png)

↑イメージこんな感じ。
を
↓こんな感じにしてみようかと。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/b56b9815-c46b-f3b0-a7e6-4dac73253f7c.png)
1. SESでSCVファイルが添付されたメールを受信する
1. 受信したメールをS3に格納
1. S3格納をトリガーにLambda発火
1. LambdaでCSVファイルの加工を行う。（記入ミスがある場合SESを使用して返信）
1. 加工したCSVファイルをS3に格納
1. 時間発火（EventBridge+Lambda）でCSVファイルをserverに送信（FTPかな？）

って感じです。
とりあえずやってみよう。笑笑

# メールを受信できるようにする。
ここの部分ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/5d7bcda0-33b5-92a5-55c3-4985f3dd1413.png)
SESでも何でも、メールを取得するためにはドメインとか取得して、DNS立てる必要があるそう。
全く詳しくないので探り探りでやってみる。笑笑

## ドメインの取得
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/2b9f2d66-f77b-219a-e842-1d209433ce0e.png)
取得した。笑笑
https://www.onamae.com ←ここで簡単に取れました。
最初の1年間は無料で利用可能とのこと。検証の場合は自動更新をOFFにすることをおススメします。
「お名前.com ドメイン取得 方法」とかでググれば一杯説明出てきました(_ _)

## DNSサーバにドメインを登録する
DNSサーバにドメインを登録することで独自のメールサーバを立てることができるようです。
応用情報取ったときに色々勉強はしましたが、実際に触るのは初めてなので探りながら行きましょう。笑笑

今回はAWS完結型で行くのでRoute 53を利用します。
Route 53を利用するとこの後のSESとの連携が楽になりそうでした。（レコードの登録とか自動でやってくれるっぽい）
あ、ちなみにRoute53でもドメイン取得は可能なのですがお金が掛かりそうなので辞めました。

早速登録していきます。
「Route53」→「ホストゾーン」→「ホストゾーンの作成」から、先ほど取得したドメインを登録します。
ドメイン名：先ほど取得したドメイン名
タイプ：パブリックホストゾーン
で登録します。
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/0994caf9-77ca-5d4e-a3b7-b7cf1c66f988.png)
登録が完了したらNSレコードとSOAレコードが払い出されます。（何か怖いので黒塗りにしてます。。）
払いだされた4つのNSレコードをドメイン名と紐づけていきます。
![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/c7fc40e8-cdab-f70c-7ae4-315badd1213f.png)
先ほど取得したドメイン名を選択し、ネームサーバ登録画面に移動します。
Route53に記載されていたNSレコードを上から順に全て登録します。
※ネームサーバ変更まで24~48時間かかる場合があるそうです。
　もしこの先の検証でメールの受信ができなかった場合はこれが原因の可能性があります。（僕はここで引っ掛かりました、、、）
![4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/9ee63a5b-324d-44af-c607-9f67602d647e.png)

## メールを受信できるようにする
先ほど登録したドメインでメールを受信できるように設定していきます。
メール受信にはSES+S3を使用します。

ここで注意。
SESのメール受信は東京リージョンでは対応していないそう。（マジかよ）
そのため、今回の検証はバージニア北部で進めていきます。
![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/6cadb18d-5428-f16d-1261-15370e1f85f1.png)
「SES」→「検証済みID」→「IDの作成」からSESにドメインの認証を行います。
IDタイプ：ドメイン
ドメイン：ドメイン名
を記入します。
![6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/baf160c2-8e6e-adc9-db9a-2b9e653e3c37.png)
SESでドメインが認証されると、Route53に自動でCNAMEレコードが追加されます（便利!!）
![7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/b6b45bad-4767-293b-1131-ae90d576784a.png)
ここ！！
説明書いてくれている人が少ない部分です。
メールを受信するためにはMXレコードを追記する必要があります。当たり前と言ったら当たり前か、、、
「レコードを作成」からMXレコードを記入します。
レコードタイプ：MX
でMXレコードが作成できます。
![8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/de385fe7-71d8-4417-fae0-a748fe5c5b0d.png)
でけた。
![9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/6cb861fb-c55c-44f9-7d69-c1a0f2f32284.png)
ここからはSESの設定をしていきます。
「SES」→「指定Eメールを受信」からルールセットを作成します。
今回は"mail-test"というルールセットを作成しました。
ルールセットを作成したら、「ルールの追加」からメール受信のルールを作成していきます。
![11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/09849955-9c2c-a8be-097c-4be9014b45b0.png)
ポンポン行きましょう。
ルール名：いい感じの名前
その他は画像の通り
で設定します。
![12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/40544e05-b450-1390-815d-beb16177da69.png)
受信者の条件ですね。
条件は「@ドメイン名」だけでいいのですが、そうなると対象ドメインに来たメール全てが受信されることになるので、
受信者の条件は絞っておいた方が賢明です。
![13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/02aeff0b-7816-887a-6f13-971b052402a1.png)
「S3バケットの作成」をクリックして、メール格納用のS3を作成します。
元々あったS3を利用することも可能ですが、その場合は許可とかの設定を忘れずに〇

プレフィックスは設定してもどちらでも良いです。
ただ、この後lambda→S3の格納にも同じS3を利用する場合はプレフィックスを設定しておきましょう。
今回の検証では横着して同じS3利用するのでプレフィックス設定しておきます。
![14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/ce9a2ca1-47cc-9422-6d9d-400e39b6598d.png)
SESの設定完了！！
![15.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/ac3d362d-5dc3-e960-b7ce-b2a03ad4621b.png)
嘘ついた。作成したルールセットは初期設定で無効化されているので、しっかりと有効化しましょう。
![16.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/f88bc4d5-b860-f3c6-b00b-9b976923719d.png)

## メール受信テスト
メールが受信されてS3に可能されるか確認してみます！！
ファイルを添付して送信！！
![17.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/efcd4bf0-5a25-ca18-2478-e6c79a660eb5.png)
お！！受信されている！！
「g6vp6~」ってやつがメールですね。
「SES_SETUP」ってやつはSESとS3の連携した時に自動で保存されるREADME的なファイルだと思われます。
![18.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3138153/8f3e9f3e-ba73-882b-33bf-6f5d579c457c.png)

# part1終わり！！
長くなりそうなので一旦終わります(_ _)
メールの受信からS3格納までの流れを自動化できました。
part2では格納されたメールから添付ファイルを取得しS3に格納するまでの流れ。
part3では取得した添付ファイルをSESを使って送り返す流れを書く感じになるかと。

ほんまに自分が勝手に検証したことをゆる～く書いているだけなので、見づらいとかあればごめんなさい。。
何かあればTwitterにでもDMいただければ嬉しいです。

終わり！！銭湯行ってきます！！

次↓
[メールに添付されたCSVファイルの取り込み→加工→転送をAWSのサーバレスで構築する方法の考察 part2 添付ファイル取り込み編](https://qiita.com/bakuchiku/items/bb76c600c10c3b22ef82 "メールに添付されたCSVファイルの取り込み→加工→転送をAWSのサーバレスで構築する方法の考察 part2 添付ファイル取り込み編")