Laravelの送信メールサーバーの設定は簡単です。手順だけで言えばものの数分、中の構造や仕組みを理解するのに半日あれば事足ります。
ここでは、GoogleのGmailの送信メールサーバーを使って送信してみる方法を紹介します。通常のSMTPサーバーでも全く同じです。
Docker環境ではメールをapp_mailhog
を使ってあたかも受信したかのように開発をすることができます。私は個人的にGmailを使って開発をしてしまった方が楽かなと思っているので、あえてapp_mailhog
を使わないで開発しています。
GmailでSMTPサーバーを立てるのは比較的簡単です。手順を別項でまとめていますので、そちらを使って作成してください。以下のようなパラメータが取得できます。.env
に記述します。
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=sample@gmail.com
MAIL_PASSWORD=xxxxxxxxxxxxxxxx
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=roughlangx@gmail.com
MAIL_FROM_NAME="APP_NAME"
Laravelのインストールしたての際はMAIL_MAILERとなっていますが、MAIL_DRIVER
に書き換えてください。値はsmtp
でどのようなGmailアカウントでも固定です。
こちらも固定です。誰でもsmtp.gmail.com
を設定します。
暗号化のプロトコルがtlsの場合はポートが587
になります。SSLの場合はまた違うポートになりますが、個々では割愛。
MAIL_USERNAMEの値はGmailのメールアドレスになります。@以下も含めた全体ですのでご注意。
アプリの設定で発行されたパスワードです。発行時は半角で4文字づつ分けていますが、ここで設定するときはスペースを取り去ってください。
暗号化プロトコルをtlsで設定します。
FROMの値なので適当なものを。返信可能な場合は実物のメールアドレスを。そうでない場合はno-reply@example.comなどで構いません。
FROMの名前に当たる部分です。適当な文字列でOKです。
受信できるメールアドレスにテスト送信します。通常tinkerを使うのが楽です。
(docker-compose exec app php artisan tinkerという例があるけど、dockerの中に入る必要ないです。そのまま実行してください。)
$ php artisan tinker
Psy Shell v0.10.8 (PHP 7.3.25 — cli) by Justin Hileman
>>> Mail::raw('Hello', function($m) { $m->subject('hello')->to('sample@gmail.com'); });
>>>null
返り値がnullになれば成功です。
エラーになった場合は設定を見直します。
Swift_TransportException with message 'Connection could not be established with host mailhog :stream_socket_client(): php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known'
Laravelの開発環境としてMailHogというローカル開発でメールの送受信ができるDockerコンテナがデフォルトでインストールされています。まずはdocker ps
で確認してみます。
$ docker ps | grep mailhog
77815e6ac81c mailhog/mailhog:latest "MailHog" 45 hours ago Up 25 hours 0.0.0.0:1025->1025/tcp, :::1025->1025/tcp, 0.0.0.0:8025->8025/tcp, :::8025->8025/tcp app_mailhog_1
mailhogが動いていたらOKです。http://localhost:8025/
にアクセスすると簡易的なWEBメーラーが見れます。
Laravelのメール送信テストはtinkerを使うと便利です。がmailhogの場合はdockerにログインする必要があります。
続きは coming soon