【PHP×Docker】Mailpitでメール送信テストを安全に行う方法
目次
こんにちは、堀部です。
PHPでWebアプリを開発していると、メール送信のテストは避けて通れません。しかし、本番環境に誤送信してしまったり、ローカルで送信したはずのメールが確認できなかったり…というトラブルは意外と多いものです。
そんなときに便利なのが Mailpit。今回は、Docker環境でPHPアプリケーションを開発している方向けに、Mailpitを導入してローカルで安全にメール送信を確認する方法を解説します。
Mailpitとは?
Mailpit は、開発用に特化した軽量なSMTPサーバ&メールビューアです。
Dockerコンテナでもサクッと動き、LaravelやWordPressなどPHPベースのアプリとも相性抜群です。
前提環境
- PHPアプリケーション(Laravelなど)
- Docker / Docker Compose を使用した開発環境
- メール送信にSMTPを使用
1. MailpitをDockerに追加
docker-compose.yml にMailpitのサービスを追加します。
version: '3.8'
services:
app:
build: .
ports:
- "8000:80"
depends_on:
- mailpit
# その他の設定...
mailpit:
image: axllent/mailpit
ports:
- "8025:8025" # Web UI(ブラウザで確認)
- "1025:1025" # SMTP(Mailpitが受信)
restart: unless-stopped
2. PHPアプリ側のメール設定を変更
SMTPの送信先をMailpitに設定します。
Laravelの場合
.envを変更します。
MAIL_MAILER=smtp MAIL_HOST=mailpit MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null
プレーンPHPでmb_send_mail()を使っている場合
メール送信にmb_send_mail()を使っていて、内部的に sendmail を使っているケースでは中継ツールが必要です。ここでは msmtp を使って対応します。
1.Dockerfile にmsmtpを追加
RUN apt-get update && apt-get install -y msmtp msmtp-mta
2.msmtprc をプロジェクトルートに作成
# msmtprc defaults auth off tls off logfile /var/log/msmtp.log account mailpit host mailpit port 1025 from noreply@example.com account default : mailpit
3.msmtprc をDocker環境に配置
docker-compose.yml にマウント設定
volumes: - ./msmtprc:/etc/msmtprc
または、Dockerfile にCOPYコマンドを追記
COPY msmtprc /etc/msmtprc
4.php.ini にsendmail_pathを設定
sendmail_path = "/usr/bin/msmtp -t"
3. コンテナを再起動
設定を反映するため、以下のコマンドでコンテナを起動または再起動します
docker compose up -d --build
4. メールを送信して確認
ローカルアプリからメール送信を試してみましょう。正常に動いていれば、ブラウザで以下にアクセスすれば送信されたメールが見られます
http://localhost:8025
まとめ
いかがでしたでしょうか。
MailpitをDocker環境に導入することで、こんなメリットがあります。
- 本番宛ての誤送信を防止
- ローカルでメールの表示確認が可能
- Dockerで簡単に導入・管理
PHP開発中の「メール確認どうしよう問題」をスッキリ解決してくれる心強いツールです。まだ導入していない方は、ぜひ一度試してみてください。
《関連記事》


