LaravelでGメールを送信する方法。アプリパスワードを取得すればOK。

Laravelにログイン機能を実装し、パスワードリセットのために以下のようにメール送信の設定を追加。

.env

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=account@gmail.com
MAIL_PASSWORD=password
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=account+noreplay@gmail.com
MAIL_FROM_NAME=Laravelからのメール

他のメール プラットフォームで Gmail のメールをチェックする – Gmail ヘルプ

https://support.google.com/mail/answer/7126229?hl=ja

この状態でパスワードリセットのメールを送信しようとしたら、以下のようなエラーが発生。

Laravelからメールを送信したときのエラー

Swift_TransportException
Failed to authenticate on SMTP server with username "account@gmail.com" using 3 possible authenticators.
Authenticator LOGIN returned Expected response code 235 but got code "534", with message "534-5.7.9 Application-specific password required. Learn more at
 534 5.7.9 

ホスト名・ポート番号・メールアドレス・パスワードなどは間違っていないし、Googleアカウントの2段階認証を解除してもダメだった。

色々調べた結果、Laravelのような外部アプリからメールを送信するときは普通にログインするときに使用するパスワードではなく「アプリパスワード」と呼ばれる専用のパスワードが必要と判明(取得方法は後述)。

※実際、エラーメッセージ中の”Application-specific password required(アプリケーション特有のパスワードが必要)”との記述がある。

Googleアカウントのアプリパスワードを取得する方法

  1. LaravelにログインしたいアカウントでGoogleにログインする
  2. 右上のメニュー(自分の名前が表示された丸いアイコンをクリックして開く)の「Googleアカウントを管理」をクリック
  3. 左側のメニューの「セキュリティ」をクリック
  4. 「Google へのログイン」の「アプリパスワード」をクリック
  5. 「アプリを選択」から「その他」を選び、適当なアプリ名(Laravelアプリ、等)を入力して「生成」をクリック
  6. 画面に表示されるアプリパスワードを取得(一度しか表示されないので注意)

取得したアプリパスワードはLaravelの.envの”MAIL_PASSWORD”にコピペすればOK。

.env

MAIL_PASSWORD=app_password

これでLaravelからメールを送信できるようになる(Googleアカウントの二段階認証は有効にしたままでOK)。

もし、アプリパスワードを使ってもログインできないときは以下も試す。

  • 一旦サービスを停止させて再開する
  • 再開前にキャッシュを削除する
Laravel キャッシュの削除

$ php artisan cache:clear
Application cache cleared!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です