Route53で取得したドメインとMialgunでメール送信機能実装

## Mialgunを選んだわけ

- 無料で1日に100件まで送信が可能。
- 今すぐに実装したい。
この条件に当てはまっていたのが、Mailgunでした。

よく比較されるものとして、Sendgridがあります。
こちらは、申し込み時に[審査](https://sendgrid.kke.co.jp/blog/?p=183)があります。申し込み後2営業日以内に本登録完了のお知らせがきます。使用できるまで最短でも翌日となるため、今回は選択しませんでした。

## ドメインとは？
ドメインとは、インターネット上の住所のようなもので、Webサイトがどこにあるかを判別する情報です。インターネットの住所はIPアドレスという数字の羅列で表されますが、それを人間にも分かる文字列にしたものがドメインです。

## Mailgun設定
### アカウント作成
https://www.mailgun.com/

<img width="700![スクリーンショット 2024-09-07 9.21.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012370/c228d452-01b5-ea59-815a-be5480362a9c.png)
0" alt="スクリーンショット 2024-09-07 8.59.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012370/c270ee10-5c81-4856-d0e4-6c3c4a069e6b.png">

無料プランで使用するため、`Add payment info now`のチェックボックスは外します。formを入力後、確認メールが届くのでそこから中の管理画面に入ってください。

### ドメイン作成
Mailgun標準のsandboxモードでは、承認されたメールしか送信ができないため、独自ドメインを作成します。
Send -> Sending -> Domains から右上の`Add new domain`　をクリックします。
<img width="700" alt="スクリーンショット 2024-09-07 9.19.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012370/adac5c10-9471-857c-e679-80685bb2c873.png">

- ドメイン名は任意のものを入力してください。
- Domain reginはUSのままでいいです。
<img width="700" alt="スクリーンショット 2024-09-07 9.21.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012370/6260ca97-1428-2c4a-3090-7534150e236d.png">

### レコード設定
メールの送信だけなら`SPF`、`DKIM`のレコードだけをRoute53に追加するだけで十分です。

ドメイン名の DNS クエリが Route53 を通じて解決され、Mailgun でのメール送信が正しく機能するようになります。このプロセスを通じて、メール配信率を向上させ、送信メールがスパムとして扱われるリスクを低減します。

##### SPF（Sender Policy Framework）
電子メールの送信元ドメインが詐称されていないかを検査するための仕組み
##### DKIM（DomainKeys Identified Mail）
送信者のなりすましやメールの改ざんを検知できるようにするもの
mailgun 
<img width="700" alt="Monosnap Sending: Overview - Mailgun Send 2024-09-07 09-48-15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012370/dbfc706c-ed02-f8d4-3301-b33e81744bdf.png">

### Route53のホストゾーンにレコードを追加
AWSコンソールを開きRoute53のホストゾーンを表示します。
<img width="700" alt="Monosnap Route 53 コンソールホストゾーン 2024-09-07 10-00-24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012370/9b775e55-9b35-fa59-5b5a-91f2930a628c.png">

今回は既に取得してあるドメインに対して、レコードを追加します。任意のホストゾーンを選択してください。詳細画面から、`レコードを作成`をクリックしてください。

<img width="700" alt="Monosnap refcon24.com - 詳細 2024-09-07 10-06-30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012370/e202d0d5-a09a-594a-95a6-cc8dc5753a02.png">

### レコード追加
先ほど、Mailgunで表示されていた、レコードを追加します。
- Route53画面のレコード名の欄には、Mailgun画面の各レコードに表示されているHostnameを入力してください。
- レコードタイプは、`SPF`と`DKIM`は`TXT`を選択してください。
- Route53画面の値には、Mailgun画面の各レコードに表示されているEnter this valueを入力してください。
<img width="700" alt="Monosnap refcon24.com - レコードを追加 2024-09-07 10-11-57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012370/99fd27fe-b64d-52ce-6ac7-9ad951a5dbd6.png">

### 接続の確認       
右上の`Verify DNS settings`から接続の確認ができます。反映まで数分かかります。接続ができないからといって焦る必要はありません。
設定したレコードが`Unverifed`から緑色の✅になっていたら接続が確認できたということです。
全て確認できたら、Send -> Sending -> Domainsの画面にいきましょう。✅になっていたらドメインの作成に成功したということです。

<img width="700" alt="Monosnap Sending: Domains - Mailgun Send 2024-09-07 10-30-59.pngg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012370/91bb81a5-6d3f-7191-9ae0-2c2afc99d754.png">

### APIキー取得
右上のプロフィールから、`API Security`を選択してください。
<img width="700" alt="Monosnap Dashboard - Mailgun by Sinch 2024-09-07 10-41-24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012370/93d80190-6ec4-f70b-ba9f-3976cf4d13ad.png">

`Create API key`をクッリクしてください。
<img width="700" alt="Monosnap Mailgun by Sinch 2024-09-07 10-41-56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012370/6fa101b8-d76f-4465-c312-6c5cc936f50c.png">
`Create Key`をクリックしてください。
<img width="700" alt="スクリーンショット 2024-09-07 10.44.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012370/b687d016-09e0-bbb2-2536-2c54ed214759.png">
※API Keyは一度しか表示されませんので、必ずコピーして忘れないようにしてください。
<img width="700" alt="Monosnap Mailgun by Sinch 2024-09-07 10-48-21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3012370/4468f679-5f2b-6511-319d-efa198b83a85.png">

## 実装
既にローカルでメール送信のロジックは記述してあるとする。

### envに環境変数を記述
```
MAIL_DRIVER=mailgun
MAILGUN_DOMAIN=Mialgunに追加したドメイン
MAILGUN_SECRET=API Key

MAIL_FROM_ADDRESS=Mialgunに追加したドメイン
```
### ライブラリインストール
Mailgunドライバーをインストールします。
```
composer require symfony/mailgun-mailer symfony/http-client
```
Laravelにはデフォルトでconfig/servicesに以下の記述があり、envが正しく設定されていれば追加でコードは書く必要はありません。
```php
'mailgun' => [
        'domain' => env('MAILGUN_DOMAIN'),
        'secret' => env('MAILGUN_SECRET'),
        'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
        'scheme' => 'https',
    ],
```
https://laravel.com/docs/11.x/mail#mailgun-driver:~:text=of%20these%20drivers.-,Mailgun%20Driver,-To%20use%20the