Laravelのパスワードリセットなどでメール送信を行うとき
パスワードリセットが正常に機能していないと気づき、調べてみた。
どうやらLaravelアプリケーションからメールを送信するときは、".env"と"config/mail.php"の設定が必要のようである。
".env"
MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=465 MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS=q4mapp@gmail.com MAIL_FROM_NAME=q4mapp MAIL_USERNAME=q4mapp@gmail.com MAIL_PASSWORD=tk435963 MAIL_PRETEND=false
"config/mail.php"
<?php return [ // Mail Driver 'driver' => env('MAIL_DRIVER', 'smtp'), // SMTP Host Address 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), // SMTP Host Port 'port' => env('MAIL_PORT', 587), // Global "From" Address 'from' => [ 'address' => env('MAIL_FROM_ADDRESS', null), 'name' => env('MAIL_FROM_NAME', null) ], // E-Mail Encryption Protocol 'encryption' => env('MAIL_ENCRYPTION', null), // SMTP Server Username 'username' => env('MAIL_USERNAME', null), // SMTP Server Password 'password' => env('MAIL_PASSWORD', null), // Sendmail System Path 'sendmail' => '/usr/sbin/sendmail -bs', // Mail "Pretend" 'pretend' => env('MAIL_PRETEND', false), ];
これによってローカルではメール送信が成功したが、herokuでは成功しなかった。
herokuでは.envがpushされないため、別の方法で設定を流し込んでやる必要がある。
$ heroku config:set MAIL_DRIVER=smtp Setting MAIL_DRIVER and restarting ⬢ q4m... done, v48 MAIL_DRIVER: smtp
上記のコマンドのようにしてローカルで設定した.envの中の変数をherokuアプリにも反映させることができる。
これでパスワードリセットのメール送信がうまくいった。