Amazon SES導入

開発しているアプリにAmazon SESを導入した話をまとめました。
Amazon SESは、Eメールを送信するサービスになります。

## AmazonSESの設定
- リージョンは東京リージョンを選択
- https://aws.amazon.com/jp/blogs/news/amazon-ses-tokyo/
    - 2020年に東京リージョンが開設した模様

## ドメイン検証


検証済みの特定のドメインからであれば、任意のどのようなメールアドレスにでも送信できるようになるので、ドメインの検証を行う

- Domains
    - Verify a New Domain
        - Domainを入力
            - 所持しているドメインを入力
        - Generate DKIM Settingsにチェック
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/520e3699-2d39-a9ad-a5ba-8d4175bb29f7.png)


- CSVをダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/c4d1bfa8-6f30-f393-69d9-6dfc6a81d1e2.png)

- Use Route53
    - 受信もしたい場合はMXレコードの設定にチェック
    - もし同じドメインでgoogle workspace等で受信設定していたりなど、受信は別のツールで行う場合は、MXレコードのチェックは外す。
    - 外さないと、勝手に受信のためのMXレコードに値が上書きされてしまい、元々Route53に登録していたMXレコードが上書きされてしまい、既存のツールで受信ができなくなってしまったりするので注意が必要
    - そのほかの項目はチェックする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/94c4beff-a382-d96f-3ebe-92edf7b7ec4e.png)


## AWSへ本番環境利用申請

- 初期は以下のようにsandboxになっている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/19912206-9d7a-0a26-81ab-0ec13bfdc6a4.png)


- Amazon SESダッシュボードから``Sending Statistics``→``Edit your account details``

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/ef45ac2d-3e93-e7c8-5484-101b05990962.png)


- 申請中
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/ae1c08ff-97c8-b4d6-f3a9-3dfb95774c21.png)


- 承認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/c2c2fd5a-b7cb-3fc3-944b-c6339881059f.png)


- Sending Statisticsを確認
    - sandbox制限が解除されているか
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/e6689212-324a-997b-ca6a-16fa84524744.png)



## AWS IAM 設定
２通りの方法がある
- SMTP SettingsからIAMユーザーを作りクレデンシャル発行
- IAMユーザーを作成しses fullaccessのポリシーをアタッチ

今回はIAM > Users > Create New Users から新規ユーザーを作成し、発行された、Access key IDとSecret access keyを使用。
※Note: にも記載があるように SMTP Credentialsは AWS access key とは別の識別子のようで、Railsでの設定方法が公式と違うようで送信できなかった。
<img width="1554" alt="image.png (651.7 kB)" src="https://img.esa.io/uploads/production/attachments/10655/2021/11/16/78280/e4f43859-08d0-4eba-934f-d8d0dc6db9a8.png">

### 参考：SMTPで作る場合は以下の手順（この場合だとRailsの設定ファイルの書き方が変わる）
- SMTP Settings
    - Create My SMTP Credentials
    - user_nameとpasswordを発行
    - IAMユーザーが新規作成される

<img width="2734" alt="image.png (122.6 kB)" src="https://img.esa.io/uploads/production/attachments/10655/2021/11/15/78280/ab5bdc11-d5b6-4083-b3b4-b343e7c246c4.png">


<img width="2720" alt="image.png (145.4 kB)" src="https://img.esa.io/uploads/production/attachments/10655/2021/11/15/78280/88e83996-59cc-4d5a-8f0a-b9fe02f97640.png">


## メールアドレスの検証
- 本番環境の申請を通していないと、予め設定されたメールアドレスにしかメールを送信することができないので、検証用に自分のメアドを登録しておく
- 本番の申請が承認された後も、fromのemailはここでリスト登録しておかないとエラーになるので、fromに指定予定のemailはここで登録しておく。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/24d0071e-e4b0-e09e-c8da-b7bd0dd576e0.png)

届いたemailのリンクを踏むとverifiedになる


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/64e56f2b-7fcc-f566-9052-94d777496f16.png)




## Test Mail が送信できることを確認
- Identiity Management > Domains > my-domain.com を選択 > Send a Test Email

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/831621d3-c559-fbad-f662-280b1401fcfc.png)


## Railsの設定

- gem aws-sdk-railsの導入

https://github.com/aws/aws-sdk-rails

```Gemfile
gem 'aws-sdk-rails'
```

- 初期設定
```config/initializers/aws_ses.rb
unless Rails.env.development? || Rails.env.test?
  creds = Aws::Credentials.new(
    Rails.application.credentials.aws_ses.fetch(:access_key_id),
    Rails.application.credentials.aws_ses.fetch(:secret_access_key)
  )
  Aws::Rails.add_action_mailer_delivery_method(:ses, credentials: creds, region: 'ap-northeast-1')
end

```

- 各環境の設定
    - mailerをses経由で使う設定
    - 2.7 Action MailerのビューでURLを生成するための設定
https://railsguides.jp/action_mailer_basics.html#action-mailer%E3%81%AE%E3%83%93%E3%83%A5%E3%83%BC%E3%81%A7url%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B

```environment/production.rb
config.action_mailer.delivery_method = :ses
  config.action_mailer.default_url_options = { host: 'hoge.com' }
```

- gem letter_opener導入
    - メールの送信履歴をローカルで確認
```config/development.rb
config.action_mailer.delivery_method = :letter_opener_web
```

- ActionMailer Preview
    - メール本文の確認


## １日あたり送信できるメールの上限数を増やす方法
今回は、本番用の申請が通ればデフォルトで50000emails per 24hoursだったので、それより増やす必要はなく対応せず。

- サポートセンター(Amazon SES画面の``Request Increased Sending Limits``からでも可能)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/0ece5894-7c66-ea72-5587-8934924e05f8.png)


- create case
<img width="1478" alt="image.png (79.8 kB)" src="https://img.esa.io/uploads/production/attachments/10655/2021/11/16/78280/601b2e90-6480-44cc-9c01-16fcce58e9a5.png">

- 上限数を設定
<img width="2106" alt="image.png (238.0 kB)" src="https://img.esa.io/uploads/production/attachments/10655/2021/11/16/78280/664f6c1e-04b8-4928-afc1-742913bf4bb4.png">

<img width="1984" alt="image.png (90.3 kB)" src="https://img.esa.io/uploads/production/attachments/10655/2021/11/16/78280/7997643e-3d23-4db0-8966-5227aedfbf74.png">

<img width="2062" alt="image.png (115.0 kB)" src="https://img.esa.io/uploads/production/attachments/10655/2021/11/16/78280/0abaa34b-413b-497f-86bc-90e3139dc1b4.png">

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367608/b011b617-7195-6b40-8103-6032ddd1181d.png)


## 参考
ありがとうございます。

https://zenn.dev/yukito0616/articles/3f224d68382c0d
https://qiita.com/tanakaworld/items/94f1ba66801100f6a44f

いかがでしたでしょうか？よろしくお願いいたします。