問題
Laravelってユーザー認証とか用意してくれてありがたいよね
laravel new で作ったアプリにAuth入れてユーザー登録はうまくいった
ただ、パスワードリセット用のメールを送ろうとしたら、エラー500が出て何時間も詰まった
環境変数とか設定してないから、そりゃエラーは出るだろうけど、それだけじゃなかったので備忘録として記しておこう
前提
Laravel7です
なので、laravel/uiをインストールするところから始めます
初心者にとってはおまじないですが、以下を実行
// laravel/uiをインストール
% composer require laravel/ui
// Auth関連ファイル(基本的なスキャフォールド)を生成
% php artisan ui vue --auth
// フロントエンドに必要なパッケージをインストール&必要なファイルをコンパイル・ビルド
% npm install && npm run dev
このようにしてAuth機能を使えるようになっていることが前提です
解決法
解決法というかメール送れるようにする方法
今回は、GメールのSMTPを使ってメールを送れるようにしたいと思います
行うことは以下のリスト
- Gメール側でアプリパスワードを生成
- Herokuの環境変数設定
- mail.phpの編集
では順にやっていきましょう
アプリパスワードの生成
Googleアカウントからセキュリティ→Googleへログインパネルのアプリパスワード
※2段階認証をオンにしないとアプリパスワードは出てこない
パスワード聞かれるので入力
デバイス名をその他でアプリ名(何でも良さそう?)を記入→生成
基本、生成したパスワードは覚えておく必要がないが、これをあとで環境変数に設定するのでメモしておく
Herokuの環境変数を設定
% heroku config:set MAIL_MAILER=smtp
% heroku config:set MAIL_HOST=smtp.gmail.com
% heroku config:set MAIL_PORT=587
% heroku config:set MAIL_USERNAME=自分のGmailアドレス
% heroku config:set MAIL_PASSWORD=アプリパスワード(16桁)
% heroku config:set MAIL_ENCRYPTION=tls
% heroku config:set MAIL_FROM_ADDRESS=自分のGmailアドレス
% heroku config:set MAIL_FROM_NAME=アプリ名
TLSの代わりにSSLを使う場合は以下農用に設定してください
% heroku config:set MAIL_PORT=465
% heroku config:set MAIL_ENCRYPTION=ssl
ローカル環境でメール送信を行いたい場合は、これと同様の環境設定を.envファイルに書き込む
mail.phpの編集
デフォルトで設定してあるなら編集する必要はないですね
確認してください
'default' => env('MAIL_MAILER', 'smtp')
smtpの設定は、さらに下の方でデフォルトで設定してあるので、そのまま使いましょう
おわり
3つのことを行うだけで、Heroku実環境でLaravelアプリからメールが送れるようになります
簡単ですね
もし、これでもエラーが出てしまった場合は、エラーをしっかり読んで調べましょう
エラー500などのページしか出てこない場合は、Herokuの環境変数にAPP_DEBUG=trueを設定してみましょう
エラーを確認した後は必ずAPP_DEBUG=falseに戻しておきましょう