概要
ローカル環境でメール送信処理をテストする際。
実際にメール送信されないようにしつつ、挙動をテストするため、MailHogを利用しました。
設定方法などメモします。
環境
- PHP8.1系
- Laravel9系
- ローカル環境はDockerにて構築
設定方法
MailHogを導入
docker-compose.yml
にMailHogの記述を追加します。(ここで立ち上がるコンテナが、ローカル用のSMTPサーバーとなります)
DockerHubに公開されているイメージをそのまま利用できます。
services:
mailhog:
image: mailhog/mailhog:latest
ports:
- "8025:8025"
- "1025:1025"
1025
はSMTPポート用、8025
はHTTPポート用(ブラウザからMailHog管理画面にアクセスする用)として設定しています。
(PHP用設定)mhsendmailを導入
PHPのメール送信処理は、デフォルトでは内部でsendmail
を用いています。参考
MailHogを利用する場合は、メール送信コマンドをmhsendmail
に変更する必要があります。
mhsendmailをインストール。
RUN curl -sSL https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64 -o mhsendmail && \
chmod +x mhsendmail && \
mv mhsendmail /usr/local/bin/mhsendmail
php.ini
に以下の設定を追加。
sendmail_path = "/usr/local/bin/mhsendmail --smtp-addr=mailhog:1025"
(Laravel)環境変数設定
メール関連の環境変数を以下のように設定します。
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_FROM_ADDRESS="送信元アドレス"
動作確認
http://localhost:8025
にアクセスすることで、画面上からメール送受信を確認することができます。
mail(
'test1@example.com',
'test',
'test',
'From: test2@example.com'
);