はじめに
Laravel のローカル開発でメール送信を確認したいとき、
- 実メールは送りたくない
- SMTP の設定で時間を使いたくない
- 画面でサクッと確認したい
ということ、よくあります。
今回は
Docker で動かしている Laravel の PHP コンテナから Mailpit を使って、
メール送信を確認してみた ので、その手順をまとめます。
Mailpit とは
Mailpit は、開発用のメールキャッチャーです。
特徴は以下の通りです。
- SMTP サーバとして動作する
- 送信されたメールを Web UI で確認できる
- 実際には外部にメールを送らない
- Docker との相性がとても良い
Laravel のローカル開発用途として、かなり扱いやすいツールです。
今回の構成
今回の構成はシンプルです。
- Laravel:PHP コンテナ
- Mailpit:別コンテナ
- docker-compose で同一ネットワーク
Laravel から見ると、
SMTP サーバが Mailpit に置き換わるだけ という構成になります。
docker-compose の例
Mailpit を追加した docker-compose の例です。
services:
app:
build: .
container_name: laravel-app
depends_on:
- mailpit
environment:
MAIL_MAILER: smtp
MAIL_HOST: mailpit
MAIL_PORT: 1025
mailpit:
image: axllent/mailpit:latest
container_name: mailpit
ports:
- "8025:8025"
- "1025:1025"
ポイントは次の通りです。
- SMTP ポートは 1025
- Web UI は 8025
- Laravel からの SMTP ホストは mailpit(サービス名)
Laravel の .env 設定
Laravel 側のメール設定を Mailpit 用に変更します。
MAIL_MAILER=smtp
MAIL_HOST=mailpit
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=test@example.com
MAIL_FROM_NAME="Local Laravel App"
Mailpit は認証不要なので、
ユーザー名・パスワード・暗号化設定は不要です。
Laravel からメールを送信してみる
Laravel では、いつも通り Mail を使って送信します。
- コントローラ
- バッチ
- キュー
- テストコード
どこから送っても問題ありません。
送信処理を実行すると、
- エラーは出ない
- 実際のメールは外部に送られない
- Mailpit にメールが保存される
という挙動になります。
Mailpit の Web UI を確認
ブラウザで次の URL にアクセスします。
http://localhost:8025
すると、以下が確認できます。
- 送信されたメール一覧
- 件名・送信元・送信先
- メール本文(HTML / テキスト)
- HTML メールのレイアウト
Blade で作った HTML メールの見た目確認にも便利です。
実際に使ってみた感想
使ってみて感じたのは、
- セットアップがとても簡単
- SMTP 周りで悩まなくていい
- UI が見やすい
- ローカル開発用途として十分
という点でした。
「とりあえずメール送信の確認をしたい」
という用途には、かなりちょうどいいです。
よくあるハマりポイント
Laravel から接続できない
- MAIL_HOST に localhost を指定していないか確認
- Docker コンテナ内からは mailpit(サービス名)を使う
Web UI が見られない
- ポート 8025 がホストに公開されているか確認
- mailpit コンテナが起動しているか確認
まとめ
- Mailpit は Laravel のローカル開発にとても便利
- PHP コンテナからは SMTP サーバとして使うだけ
- Docker との相性が良く、設定も簡単
- 実メールを送らず安全に確認できる
Laravel 開発で
「メール送信どう確認しよう?」と悩んだら、
Mailpit はかなりおすすめです。