目次
1. Dockerでコンテナを生成
docker-compose.yml に以下を追加します。mail:
image: mailhog/mailhog:latest
container_name: mailhog
restart: always
ports:
- 8025:8025
- 1025:1025
僕の環境ではproxy経由で複数ネットワークが動いているので、MailHog用のdocker-compose.ymlを別途用意しました。
version: '3.8'
services:
mail:
image: mailhog/mailhog:latest
container_name: mailhog
restart: always
ports:
- 8025:8025
- 1025:1025
networks:
- proxy-network
networks:
proxy-network:
name: proxy_network
参考
ローカルのDockerで複数サービスを動かしproxyでドメインを捌くようにしてみた – NOBODY:PLACE2. mhsendmail をインストール
フレームワークのメール送信機能を使っている場合には、SMTPサーバを指定出来ると思うので必要ありません。現在の環境ではデフォルトのsendmailを使用するようになっているので、それをMailHog用のsendmail、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
参考
DockerでMailHogを使ってPHPのメール送信確認をする – Qiita3. sendmail_path を書き換え
こちらもフレームワークを使用している場合には必要ありません。メール設定用の ini ファイルを作成
[mail function]
sendmail_path = "/usr/local/bin/mhsendmail --smtp-addr=mailhog:1025"
docker-composeにて配置(設定例/抜粋)
volumes:
- ./app/php.ini:/usr/local/etc/php/php.ini
- ./app/mail.ini:/usr/local/etc/php/conf.d/mail.ini
参考
DockerでMailHogを使ってPHPのメール送信確認をする – Qiita4. docker-compose を再起動
docker-compose down
docker-compose up --build -d
5. メール送信テスト
メール送信(PHP)
mail(
'test@example.com',
'テスト',
'テスト本文',
'From: from@example.com'
);
受信確認
http://localhost:8025 にアクセスしてメールが受信できていることを確認します。OK!
その後の設定・改修
プログラムのメール送信部分にいくつか設定・改修する部分があります。- ローカル開発環境で動かしているときにはMailHogに送るようにする
- 日本語を送信すると文字化けするので対応する
- プレーンテキストとHTMLメール両方を送る(マルチパート)ようにする
現在は外部のメール送信サービスを利用して送信していて、それぞれ意識せずに対応してくれているんですけど、mb_send_mail() ではそれが出来なくなるので。ていうかむしろもうPHPMailerとかSwiftMailerとか入れて送った方が楽なのかも知れません。脆弱性は心配だけどローカルだけだし、その場合、2と3は必要なくなるわけですしね……要検討。