Laravel 送信メールサーバーの設定

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"

MAIL_DRIVER=smtp

Laravelのインストールしたての際はMAIL_MAILERとなっていますが、MAIL_DRIVERに書き換えてください。値はsmtpでどのようなGmailアカウントでも固定です。

MAIL_HOST=smtp.gmail.com

こちらも固定です。誰でもsmtp.gmail.comを設定します。

MAIL_PORT=587

暗号化のプロトコルがtlsの場合はポートが587になります。SSLの場合はまた違うポートになりますが、個々では割愛。

MAIL_USERNAME=sample@gmail.com

MAIL_USERNAMEの値はGmailのメールアドレスになります。@以下も含めた全体ですのでご注意。

MAIL_PASSWORD=xxxxxxxxxxxxxxxx

アプリの設定で発行されたパスワードです。発行時は半角で4文字づつ分けていますが、ここで設定するときはスペースを取り去ってください。

MAIL_ENCRYPTION=tls

暗号化プロトコルをtlsで設定します。

MAIL_FROM_ADDRESS=roughlangx@gmail.com

FROMの値なので適当なものを。返信可能な場合は実物のメールアドレスを。そうでない場合はno-reply@example.comなどで構いません。

MAIL_FROM_NAME="APP_NAME"

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'

MailHog

MailHogを使ってみる

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


  • News

  • Categories

  • Tags

  • Archives

  • Page index