新規のユーザがユーザ登録を行ったときには,登録されたメールアドレスが正しいかどうかを検証する必要があります.ここでは,システムからメールを送信するための準備を行います.具体的には Gmail を利用してメールを送信するための設定を行います.
Gmail では標準でセキュリティの設定がされており,Laravel 等の外部システムからのメール送信を標準では拒否するようになっています.2022年5月までは設定次第で Gmail のパスワードを使った送信ができていました.しかし,この機能が2022年5月30日で利用できなくなりました.現在は Laravel 等の外部システムからメールを送信するためには次の手順に従って2段階認証を有効にし,さらにアプリパスワードを設定しなければなりません.なお,2段階認証を設定するためには有効な電話番号が必要で,1つの電話番号で認証可能な Google アカウントには上限(5個程度?)があるようです.一方で,Gmail 以外のメールを利用し,SMTP とパスワードでメールを送信できる環境であればここに進んでください.
まず,Google にログインして,画面右上の「Google アカウント」アイコンをクリックし,「Google アカウントの管理」を開きます.さらに,「セキュリティ」のページを開くと「Google へのログイン」項目が表示されます.次の画面で「2段階認証プロセス」がオフになっているので,これをオンにする手続きを行います.
次のような画面になるので,内容を確認し「使ってみる」を押下します.
正しいパスワードを入力して「次へ」を押下します.
再設定用の電話番号が設定されていたら,その電話番号が表示されます.自身のスマートフォンの正しい番号であることを確認します.さらに,コードの取得方法は「テキスト メッセージ」を選択して「次へ」をクリックします.
スマートフォンの SMS に Google 確認コードが含まれたテキストメッセージが届きます.その確認コードを次の画面に入力します.
2段階認証プロセスを有効にします.
2段階認証プロセスが有効になった.これによって新たなブラウザやPCでGoogleにログインするときには,パスワードだけでなく,スマートフォンのSMSに届く確認コードも必要になる.
2段階認証プロセスが有効になりました.これによって新たなブラウザや PC で Google にログインするときには,パスワードだけでなく,スマートフォンの SMS に届く確認コードも必要になります.
Google の2段階認証を設定できたので,Laravel 等の外部システムから Gmail でメールを送信するためにアプリパスワードを設定します.
Google にログインして,画面右上の「Google アカウント」アイコンをクリックし,「Google アカウントの管理」を開きます.さらに「セキュリティ」のページを開くと「Google へのログイン」の項目が表示されます.ここで「2段階認証プロセス」がオンになっており,アプリパスワードが「なし」になっていることを確認してからアプリパスワードを作成します.
本人確認のためにパスワードの入力が求められます.
アプリパスワードを作成します.まず「アプリを選択」で「メール」を選びます.
「デバイスを選択」では「その他(名前を入力)」を選びます.
適当な名前をつければ良いですが,ここでは「Vagrant」としておきます.その後「生成」ボタンを押下します.
以上の作業で16文字のアプリパスワードが生成されました.これをメモ(コピー)し,「完了」をクリックします.
次の画面でアプリパスワードが生成されたことが確認できます.
Laravel プロジェクトの設定ファイル .env にメールの設定を記載します.なお,接続のためのパスワードを平文で入力しなければならないので,このファイルの管理について十分に注意する必要があります.特に Git のリポジトリに含めないように注意してください.また,本番環境ではファイルの所有権およびグループに対するアクセス権の設定にも注意が必要です.(本番環境 Web サーバのアクセスログを確認すると .env などを指定した不正なアクセスが頻繁に来ていることがわかります.) Gmail の2段階認証を使う場合には,MAIL_PASSWORD=
に上で設定したアプリパスワードを指定する(ログインパスワードではない)ことにも注意してください.
.env (抜粋)
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=xxxxxxxxxx@gmail.com
MAIL_FROM_NAME=laravelAuth
MAIL_USERNAME=xxxxxxxxxx@gmail.com
MAIL_PASSWORD=applicationpassword
MAIL_PRETEND=false
メール送信の設定ができたら,実際に Laravel からメールを送信できることを確認します.これには php artisan tinker
を利用します.次のコマンドで正しいメールアドレスを指定して実行すると,メールの送信ができます.メールの送信に成功すると = Illuminate\Mail\SentMessage {#6364}
というメッセージが表示されます.
vagrant@ubuntu2204 laravelAuth $ php artisan tinker ⏎ Psy Shell v0.11.22 (PHP 8.1.2-1ubuntu2.14 — cli) by Justin Hileman > Mail::raw('Test Mail', function($message) { $message->to('yyyyyyyy@gmail.com')->subject('test'); }); ⏎ = Illuminate\Mail\SentMessage {#6364} > exit ⏎ INFO Goodbye. vagrant@ubuntu2204 laravelAuth $
メールを受信できているか自身のメール環境で確認してください.