Laravelのメール送信機能でHerokuのMailgun使った時ハマりまくったのでうまくいった設定とか書く

Laravelでメール送信出来る機能を実装して、本番のHerokuでもメール送信出来るようにしようと思いMailgunを使ったのですが、ハマりにハマったので、うまく行った手順と設定をメモしておきます。
なお、送信メールは事前にお名前.comで取得した独自ドメインを使っています。
(メールサーバーはさくらレンタルサーバーを使っていますがここでは関係ありませんでした)

実際に実施した手順と設定を書いて行きます。

#herokuでMailgunアドオン導入
HerokuCLIをインストールした状態で以下コマンドを実行し、Mailgunの無料プラン(starter)を導入します。

```
heroku addons:create mailgun:starter
```


#HerokuのMailgunアドオン画面で設定
Mailgunのアドオンを追加すると自分が作成したHerokuアプリの「Overview」タブを開くとMailgunのアドオンが表示されるようになります。
<img width="563" alt="スクリーンショット 2017-10-13 19.36.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/121811/c26d7130-c0b7-fce5-2534-fc9f32116811.png">

##1.ドメインの追加
MailgunをクリックするとHerokuのMailgunアドオンの管理画面に遷移します。
「Domains」タブの「Add New Domain」をクリックします。
<img width="458" alt="スクリーンショット 2017-10-13 19.40.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/121811/bc65faf2-b1fb-e266-061e-664c4b5ead65.png">

以下のようにドメイン名を入力する画面が表示されるのでドメイン名を入力して「Add Domain」をクリックします。
<img width="805" alt="スクリーンショット 2017-10-13 19.40.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/121811/4dfdcce1-9079-7eb3-1b5f-76c2098e0083.png">

この時、サブドメイン(www.example.comみたいな)を入力することをおすすめされますが、僕はサブドメイン無しで入力しました。
それで問題は特になかったです。

##2.DNSレコードの設定 on お名前.com
ドメインを追加すると、「Domains」タブのページに追加したドメインが表示されます。
自分た追加したドメインをクリックすると以下のようなページに遷移します。
![スクリーンショット 2017-10-13 19.45.52.png](https://qiita-image-store.s3.amazonaws.com/0/121811/2820273b-a577-386a-da34-890ff7eb6cf5.png)

上記の緑の部分が最初の段階では黄色の「Unverified」になっています。

画面下部に移動すると「Domain Verification & DNS」という項目があるので開きます。
以下のような画面が表示され、「Type」のところが`TXT`、`MX`、`CNAME`になっている行が数行表示されます。
（下の画像は`TXT`の部分)
![DNSレコード画面.png](https://qiita-image-store.s3.amazonaws.com/0/121811/c2539aeb-adca-b7a0-186d-db6812065bb7.png)

これをDNSレコードというらしいです。
独自ドメインでメールを送受信したり、メールの開封等をトラッキングする場合に設定が必要で、以下のような役割になっているようです。
メール送信：TXT
メール受信：MX
トラッキング：CNAME

上記のコードをお名前.comの「ドメイン関連機能の設定」から設定して行きます。

まずお名前.comからドメインNaviにログインします。
(独自ドメインを取得した際にログインID/Passも発行されているはずです)

ログイン後画面上部の「ドメイン設定」をクリックすると以下のような画面が表示されます。
<img width="928" alt="スクリーンショット 2017-10-13 20.11.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/121811/42bdc125-7623-69a2-e83b-22f5213768aa.png">

左側のメニュー一覧から「ネームサーバーの設定」 > 「ドメイン関連機能の設定」を選択します。
<img width="241" alt="スクリーンショット 2017-10-13 20.13.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/121811/3e3ae238-bf96-1177-8edb-910604e51309.png">

内部ドメイン一覧から設定するドメイン(メール送信に使うドメイン)を選択して「次に進む」をクリック。

「DNSレコード設定を利用する」の「設定する」をクリックします。
<img width="635" alt="スクリーンショット 2017-10-13 20.14.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/121811/b556b27d-72f1-910c-63a2-5eb9770758dc.png">

以下のようにレコードを追加するフォームが表示されます。
![スクリーンショット 2017-10-13 20.15.35.png](https://qiita-image-store.s3.amazonaws.com/0/121811/054070ce-4a0d-99ad-ad35-b8e294d45fdc.png)
それぞれの入力箇所に、対応する情報(Mailgunアドオンの管理画面から)を入力して「追加」をクリックします。

ホスト名：Hostname
TYPE：Type(画像はTXT)
TTL：そのまま
VALUE：Enter This Value
（Current Value）はここでは無視してOK

「登録済み」の項目に先ほど追加したレコードが追加されているか確認します。
<img width="687" alt="スクリーンショット 2017-10-13 20.21.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/121811/712c3136-3a4c-2b69-1eb2-c452651aab33.png">

その後画面下部の「確認画面へ進む」をクリックします。

###※注意点
TXTレコードをコピぺすると、
①`v=spf1`と`include・・・`の間にスペースがありますが、ここに改行が入っている可能性があるので、一度スペースを消して、再度半角スペースを入れて下さい。
②`k=rsa;`の後ろに改行が入っているのでペースト後に改行を削除して下さい。
上記2点をやらないとうまく有効化されませんでした。

また、ボタンのすぐ上に、「DNSレコード設定用ネームサーバー変更確認」という項目があります。
既に送信用メールを別の用途で使っている方は、ここにチェックを入れないようにして下さい。
ここにチェックを入れてしまうと、既存のネームサーバーを上書きしてしまいます。

ボタンクリック後は指示通りに進めば設定が始まります。
完了したらお名前.comに登録しているアドレスにメールで通知が来ます。

##3.ネームサーバー追加
DNSレコードが追加出来たら、お名前.comで以下をネームサーバーに追加します。
プライマリとセカンダリを既に使っている場合は、3番目、4番目に設定してもメール送信は出来ました。

`01.dnsv.jp`、`02.dnsv.jp`

##4.DNSレコードの有効化チェック
お名前.comへのDNSレコードを追加とネームサーバーの追加が完了したら、再度Mailgunアドオンの管理画面に戻ります。
![DNSレコード画面.png](https://qiita-image-store.s3.amazonaws.com/0/121811/ba5738fd-bc90-a717-c741-448e5f5a1444.png)

ここで「Check DNS Records Now」ボタンをクリックします。
これで、ちゃんとDNSレコードが設定されていた場合、Typeの左側が緑色になります。(設定前は黄色or赤)

画面の上部に戻ると「Unverified」から「Active」になっていると思います。
(一度クリックしても緑色にならない場合は何度かクリックすると緑になる場合があります。(原因は不明))

ここまで出来たら、後はHerokuの環境変数に本場用のメール関連変数を設定して完了です。

#Herokuの環境変数にMailgunの変数を設定
環境変数に設定する必要があるMailgun関連の変数は以下になります。
それぞれ以下の画面に表示された値を設定します。
![ドメイン画面2.png](https://qiita-image-store.s3.amazonaws.com/0/121811/876d7cb2-76cf-d3e6-309a-43e6e4705365.png)


`MAIL_DRIVER`=`mailgun`
`MAILGUN_API_KEY`=`API Key`の値
`MAILGUN_DOMAIN`=作成したドメイン名(`example.com`)
`MAILGUN_PUBLIC_KEY`=`API Key`の値
`MAILGUN_SMTP_LOGIN`=`Default SMTP Login`の値
`MAILGUN_SMTP_PASSWORD`=`Default Password`の値
`MAILGUN_SMTP_PORT`=`587`
`MAILGUN_SMTP_SERVER`=`smtp.mailgun.org`

`MAILGUN_API_KEY`と`MAILGUN_PUBLIC_KEY`がややこしいですが、一度`MAILGUN_API_KEY`のみ設定してメール送信してみたところエラーになり、`MAILGUN_PUBLIC_KEY`も設定したら送信できたので、`MAILGUN_PUBLIC_KEY`の方を見ているのかもしれません。
両方設定しておくのが無難かと思います。

以上で本番環境でメール送信が成功しました！