LoginSignup
7
11

More than 3 years have passed since last update.

【Laravel】Herokuでメール送れるようにする

Last updated at Posted at 2020-06-25

問題

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の編集

デフォルトで設定してあるなら編集する必要はないですね
確認してください

config/mail.php
'default' => env('MAIL_MAILER', 'smtp')

smtpの設定は、さらに下の方でデフォルトで設定してあるので、そのまま使いましょう

おわり

3つのことを行うだけで、Heroku実環境でLaravelアプリからメールが送れるようになります
簡単ですね
もし、これでもエラーが出てしまった場合は、エラーをしっかり読んで調べましょう
エラー500などのページしか出てこない場合は、Herokuの環境変数にAPP_DEBUG=trueを設定してみましょう
エラーを確認した後は必ずAPP_DEBUG=falseに戻しておきましょう

7
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
11