AWSの開発環境構築手順：SES編

# SESとは？

ChatGPTに質問しました。

> Q:SESに関して5行程度で教えてください。

> A: 
AWSのSES（Simple Email Service）は、スケーラブルでコスト効率の良いEメール送信サービスです。
主にマーケティングメールや通知、トランザクションメールの送信に適しており、アプリケーションから簡単にメールを送れるAPIやSMTPインターフェースを提供しています。
SESは、スパム対策やDKIM署名などのセキュリティ機能が組み込まれており、信頼性の高いメール送信が可能です。
また、メール送信のレポート機能もあり、開封率やクリック率の分析に役立ちます。

メールサーバー(SMTPサーバー)の機能を提供してくれます。
SESというよりもSMTPの理解を深めると、後述の手順が良く理解できそうです。
SMTPで送られるメッセージは下記3つで構成されています。
- Envelope：送信元と送信先の情報を持ち、これを使用して送受信が行われる
- Header：普段目にするFROM、TOやタイトルなど
- Body：メール本文

またメールに欠かせないドメインの認証技術には下記3つが存在します。
- SPF：Envelopeのドメインのなりすましを検知
- DKIM：Header、Bodyの改ざんを検知
- DMARC：SPF、DKIMで検知されたときの処理を設定

参考：[AWS SESでのドメイン認証（SPF・DKIM・DMARC）設定のポイント](https://miraitranslate-tech.hatenablog.jp/entry/aws-ses-sender-domain-authentication)

# 作業内容

## SESのID作成

Amazon SES>設定>IDと進み、[IDの作成]を押す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836454/06b9d903-54d9-4339-0a52-407122cd9d73.png)
<br>

下記を設定する
- IDタイプ：ドメイン
- ドメイン：project.com
- 「カスタム MAIL FROM ドメインの使用」にチェック
- MAIL FROM ドメイン：mail ※Envelopeで使用される 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836454/83d716b1-d5f9-2306-7d7d-1ca467cc7584.png)
<br>

下記を設定する
- IDタイプ：Easy DKIM
- DKIM 署名キーの長さ：RSA_2048_BIT

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836454/674a4a37-6a1b-0da1-9480-ec1221cc0cf4.png)
<br>

[IDの作成]を押す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836454/f77f6e01-b626-a255-b778-804a82b3bab5.png)

## Route53のレコードを確認

Route53>ホストゾーン>project.comと進むと、登録されているレコードが一覧表示される
現状、下記が作成されているはず
- Aタイプ：ALB用
- CNAME：前手順の「DKIMの詳細設定」で「DNS レコードの Route53 への発行」にチェックが入っていれば自動で作成される
- MX：前手順の「ID の詳細」で「DNS レコードの Route53 への発行」にチェックが入っていれば自動で作成される
- TXT：前手順の「ID の詳細」で「DNS レコードの Route53 への発行」にチェックが入っていれば自動で作成される、SPF用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836454/9ba21890-f2e0-c246-1a5a-191f78f5781f.png)
<br>

SESで作成したIDのページを開くと、下の方にDMARCのレコードを作成する項目があるので、[DNS レコードの Route53 への発行]を押す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836454/84ece217-1f02-2890-259e-d0465c59f563.png)
<br>

Route53を確認すると下記レコードが作成されている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836454/1c7c0f6d-0409-2291-59e4-100d3052f3b5.png)

※`none`は全て受信する設定、運用していく上で必要に応じて`quarantine` `reject`に変える

## テストメール送信

### テストメール用の送信先アドレスを登録する

Amazon SES>設定>IDと進み、[IDの作成]を押す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836454/06b9d903-54d9-4339-0a52-407122cd9d73.png)
<br>

- 「E メールアドレス」を選択
- テストで使用する送信先のメールアドレスを入力
- [ID の作成]を押す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836454/b7b4de6d-ee44-ee3f-6d0a-67a9d8e10b05.png)
<br>

### テストメールを送信する

先ほど作成したドメインのIDにチェックを入れて、[テスト E メールの送信]を押す

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836454/e0bae850-7b98-beac-cd93-4e7457ecb50d.png)
<br>

下記を入力して、[テスト E メールの送信]を押す
- From-address：任意のアドレス
- シナリオ：「カスタム」
- カスタム受信者：登録したメールアドレスを入力
- 件名：任意の件名
- 本文：任意の本文

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836454/68840064-0f4e-e22f-17e9-a05a9ac664a3.png)
<br>

メールが送信される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836454/cf0e1af0-6347-ebcd-6b4a-dffa05cef742.png)

## PythonでSESを使用する

下記ページを参考に実装

- [EC2にデプロイしたDjangoからAWS SESを使う](https://qiita.com/taku-y-9308/items/2fa81d859e6176d82dbe)
- [A complete Amazon SES API v2 Newsletter workflow using an AWS SDK](https://docs.aws.amazon.com/ses/latest/dg/sesv2_example_sesv2_NewsletterWorkflow_section.html)

# 参考記事

- [何もかもわからない人間によるAmazon SESメールのドメイン認証学習記録](https://qiita.com/ryo_one/items/c0135e43ca809e9f64f2)
- [AWS SESでのドメイン認証（SPF・DKIM・DMARC）設定のポイント](https://miraitranslate-tech.hatenablog.jp/entry/aws-ses-sender-domain-authentication)
- [シミュレーターを使用した Amazon SES でのテストメール送信](https://docs.aws.amazon.com/ja_jp/ses/latest/dg/send-an-email-from-console.html)
- [EC2にデプロイしたDjangoからAWS SESを使う](https://qiita.com/taku-y-9308/items/2fa81d859e6176d82dbe)
- [A complete Amazon SES API v2 Newsletter workflow using an AWS SDK](https://docs.aws.amazon.com/ses/latest/dg/sesv2_example_sesv2_NewsletterWorkflow_section.html)