【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開発中の「メール確認どうしよう問題」をスッキリ解決してくれる心強いツールです。まだ導入していない方は、ぜひ一度試してみてください。
 
 
 
 
《関連記事》

PostgreSQL×Dockerで環境構築
技術
2023.2.21(Tue)

手順をすべて紹介。Windows環境にPostgreSQL×Dockerで環境構築する方法

#PHP#SQL

exited with code 1
技術
2022.12.9(Fri)

Dockerコンテナ作成時に exited with code 1 が発生

#技術

Laravel×Dockerで環境構築
技術
2022.1.21(Fri)

手順をすべて紹介。Windows環境にLaravel×Dockerで環境構築する方法

#PHP

記事をシェア
MOST VIEWED ARTICLES