ユーザ登録の確認などで,システムからユーザにメールを送信するための準備として,メールアカウントの設定を行う.ここでは,システムのメールアドレスは Google の GMAIL を指定する(その他のメールでは設定が異なる可能性がります).
Gmail は標準でセキュリティの設定がされており,Laravel 等の外部システムからのメール送信が拒否されている.2022年5月までは,送信元のアカウントでログインし,「Google アカウント」の「ログインとセキュリティ」で「安全性の低いアクセスの無効化」を解除しておくことでログインパスワードを使って送信できていました.しかしこの機能は2022年5月30日以降利用できなくなります.よって,今後Laravel からメール送信ができるようにするためには次の手順に従って2段階認証を有効にし,さらにアプリパスワードを設定しなければなりません.なお,2段階認証を設定するためには電話番号が必要で,1つの電話番号で認証可能なGoogleアカウントには上限(5個程度?)があるようです.また,Gmail以外のメールを利用し,SMTPとパスワードで送信できる環境であればここに進んでください.
まず,Google にログインして,画面右上の「Googleアカウント」アイコンをクリックし,「Googleアカウントの管理」を開く.さらに,「セキュリティ」のページを開くと「Googleへのログイン」の項目が表示される.「2段階認証プロセス」がオフになっているので,これをオンする手続きを行う.
次のような画面になるので,内容を確認し「使ってみる」をクリックする.
パスワードを入力して「次へ」をクリックする.
再設定用の電話番号が登録されていたら,その番号が表示される.スマートフォンの正しい番号であることを確認する.さらに,コードの取得方法は「テキスト メッセージ」を選択し,「次へ」をクリックする.
スマートフォンのSMSにGoogle確認コードが含まれたテキストメッセージが届くので,その確認コードを入力する.
2段階認証プロセスを有効にする.
2段階認証プロセスが有効になった.これによって新たなブラウザやPCでGoogleにログインするときには,パスワードだけでなく,スマートフォンのSMSに届く確認コードも必要になる.
Google の2段階認証が設定されたので,Laravelからメールを送信するためにアプリパスワードを設定する.
Google にログインして,画面右上の「Googleアカウント」アイコンをクリックし,「Googleアカウントの管理」を開く.さらに,「セキュリティ」のページを開くと「Googleへのログイン」の項目が表示される.「2段階認証プロセス」がオンになっており,アプリパスワードが「なし」になっていることを確認して,アプリパスワードを作成する.
本人確認のために,パスワードの入力が求められる.
アプリパスワードを作成する.まず,「アプリを選択」で「メール」を選ぶ.
「デバイス選択」は「その他(名前を入力)」を選ぶ.
適当な名前を付ければよいが,ここでは「Vagrant」としておく.その後「生成」ボタンをクリックする.
これにより,16文字のアプリパスワードが生成されたので,これをメモ(コピー)する.「完了」をクリックする.
アプリパスワードが生成されたことが確認できた.
プロジェクトの設定ファイル .env に次のような設定を記述する.なお,接続のためのパスワードを平文で入力しなければならないので,ファイルの管理には十分に注意する必要がある(特に Git に含めないように注意する.また,本番環境ではファイルの所有者及びグループに対するアクセス権の設定にも注意が必要である).Gmail の2段階認証を使っている場合は MAIL_PASSWORD=
にアプリパスワードを指定する(ログインパスワードではない)ことにも注意する.
.env (抜粋)
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=xxxxxxxxxxxxxxx@gmail.com
MAIL_FROM_NAME=Laravelユーザ管理システム
MAIL_USERNAME=xxxxxxxxxxxxxxx@gmail.com
MAIL_PASSWORD=zzzzzzzzzzz
MAIL_PRETEND=false
php artisan tinker
を使って,コマンドラインからメールの送信ができることを確認(テスト)しよう.メールの送信が成功すれば,null が返るはずである.
[GakuinHana@rin06 laravelUser]$ php artisan tinker ⏎ Psy Shell v0.9.6 (PHP 5.6.36 — cli) by Justin Hileman >>> Mail::raw('Test Mail', function($message) { $message->to('yyyyyyyyy@zzzzzz.com')->subject('test'); }); ⏎ => null >>> exit ⏎ Exit: Goodbye [GakuinHana@rin06 laravelUser]$