LoginSignup
6
2

More than 1 year has passed since last update.

DockerでMailHogを使ってPHPのメール送信確認をする

Posted at

Dockerでメール送信確認をする時に、sendmailの設定をしないといけなかったり、うまく外に出ていかなかったり面倒な場合がありますが、MailHogを使うと簡単にできます。
また、メールは実際には送信されないので、テストのつもりが間違ってメールを送ってしまった!という心配もないので安心です。
(PHPのアプリケーションでメール送信する場合について書きます。)

設定

MailHogを導入

MailHogをdocker-compose.ymlのサービスに追加します。

docker-compose.yml
services:
    mailhog:
        image: mailhog/mailhog
        ports:
            - 8025:8025

アプリケーションの設定

1. PHPのmailをMailHogに変更する場合

フレームワークの設定(後述)で設定してもいいですが、ローカルと本番で設定を変えたくない等の場合や、素のPHPを使用する場合は、phpのメール送信コマンドをsendmailからmhsendmailに置き換えます。

まず、PHPアプリケーションのDockerfileでmhsendmailのインストールを追加します。

Dockerfile
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の設定ファイルで、sendmail_pathmhsendmailにします。
php.ini に直接書いてもいいですが、mail.iniというファイルを作って/etc/php.d/mail.iniへ設置することにします。

mail.ini
[mail function]
sendmail_path = "/usr/local/bin/mhsendmail --smtp-addr=mailhog:1025"
docker-compose.yml
services:
    php:
        volumes:
            - ./mail.ini:/etc/php.d/mail.ini:ro

(その他の必要な設定は適宜記述してください。)

2. フレームワークの設定で設定する場合

mhsendmailを使用せずに、フレームワークの設定でMailHogを使います。

Laravelの場合

.envにMailHogの設定を書きます。

.env
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_FROM_ADDRESS=test@example.com

CakePHPの場合

app/Config/email.php.defaultをコピーして、 app/Config/email.phpにMailHogの設定を書きます。

app/Config/email.php
public $default = array(
    'transport' => 'Smtp',
    'from' => 'test@example.com',
    'host' => 'mailhog',
    'port' => 1025,
    'timeout' => 30,
);

※ローカルと本番等で切り替える必要がある場合は、適宜書き分けてください。

メールの確認

ブラウザで http://localhost:8025/ を開くと、送信されたメールが確認できます。
Dockerを停止すると消えてしまうので、残しておく必要がある場合は、volumeを設定するといいようです。

参考

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2