Aimless Blog

Laravelでメール送信できない時の解決法

Tag:
laravelphp

前回 Laravelの認証機能のパスワードリセットでメール送信できなかった問題の解決法。

.envの最初の設定

.envのメール設定はデフォルトで下のようになっている。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

これをGmailから送信するので下のように設定したがエラーが出て送信できなかった。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=xxxxxxxx@gmail.com
MAIL_PASSWORD=xxxxxxx
MAIL_ENCRYPTION=tls

certificate verify failed

解決法

configディレクトリのmail.phpを開き、下記を追加する。

'stream' => [
    'ssl' => [
        'allow_self_signed' => true,
        'verify_peer' => false,
        'verify_peer_name' => false,
	],
],

そして、.envに以下の追加をする。

MAIL_FROM_ADDRESS=送信元のメールアドレスを記述
MAIL_FROM_NAME=送信元の名前

MAIL_FROM_NAMEは無くても大丈夫だけど一応入れてみた。

Gmailを使う場合はGoogleアカウントからログインとセキュリティのページに移動して安全性の低いアプリの許可: 無効を有効に変更する。

.envとmail.phpを変更した後はphp artisan cache:clearでキャッシュをクリアするのを忘れずに。

これでGmailとoutlookメールで試してみたところ無事送信できました。しかし、Gmailの2段階認証を使用している場合はまたエラーが出ることになる……

Gmailで2段階認証を利用している場合

  • Googleアカウントの左のメニューからセキュリティを選択。
  • Googleへのログインのところにあるアプリ パスワードをクリック。
  • アプリを選択をクリックしてその他(名前を入力)を選択。適当に名前をつける。
  • 生成を押すと16桁のパスワードが生成される。
  • このパスワードを.envのMAIL_PASSWORD=に記入する

アプリパスワードを使用すると、2段階認証プロセスに対応していない端末上のアプリからGoogleアカウントにログインできるようになります。
これでLaravelからGmailを利用して送信できるようになります。

参考サイト:stackoverflow Laravel SMTP driver with TLS encryption