過去記事の「Craft CMS のテストメールを MailHog で受信する」で触れている通り、これまではローカル環境のテストメール受信を MailHog でまかなっていました。
「システムからの通知メールを受信する」程度の目的であれば、このまま利用し続けても問題なさそうではあるものの。次の理由から、Mailpit へ移行することにしました。
- MailHog は2年以上更新されていない(更新する予定もない模様)
- MailHog は ISO-2022-JP など、日本語のエンコーディングにデフォルトで対応していない(送信前に、明示的にエンコード処理を挟む必要があった)
そこで、今回は Mailpit への移行手順をまとめてみます。
事前準備
docker-composer.yml の作成
Mailpit 用のプロジェクトディレクトリで docker-composer.yml
を作成します。
services:
mailhog:
container_name: mailpit
image: axllent/mailpit
restart: unless-stopped
volumes:
- ./mailpit:/data
environment:
MP_MAX_MESSAGES: 5000
MP_DATABASE: /data/mailpit.db
MP_SMTP_AUTH_ACCEPT_ANY: 1
MP_SMTP_AUTH_ALLOW_INSECURE: 1
ports:
- 8025:8025
- 1025:1025
networks:
default:
external: true
name: webproxy
Docker Hub の公式イメージを利用しつつポート番号を指定しておけば問題ありませんが、サンプルでは nginx のリバースプロキシと同じネットワークにするための設定を行っています。
コンテナの起動
$ docker-compose up -d --build
初回のみ --build
を付けて、コンテナの生成も行います。
起動したら http://localhost:8025/ にアクセスできることを確認しておきましょう。
コンテナの調整
Mailpit のインストール
Mailpit コンテナと連動できるよう、Craft CMS 用のコンテナに bash スクリプトをインストールします。
## install MailPit
# ----------
RUN ["/bin/bash", "-c", "bash < <(curl -sL https://raw.githubusercontent.com/axllent/mailpit/develop/install.sh)"]
Mac へのインストールもできるようですので、詳細は公式ドキュメントを参照してください。
Installation - Mailpit
https://mailpit.axllent.org/docs/install/
php.ini の調整
次に、php.ini で sendmail_path
を指定します。
# MailPit
sendmail_path="/usr/local/bin/mailpit sendmail -t --smtp-addr mailpit:1025"
ここまで調整できたら、コンテナを再生成しておきましょう。
Craft CMS のメール設定を修正
続けて Craft CMS の管理画面で「設定 > メール」に移動し、次の設定になっているか確認してから 保存
します。
ラベル | 値 |
---|---|
輸送タイプ | Sendmail |
Sendmailのコマンド | /usr/local/bin/mailpit sendmail -t --smtp-addr mailpit:1025 |
テスト
ボタンをクリック後、Mailpit にテストメールが届いていれば完了です。
なお、ごく稀にローカルの Docker 環境で Sendmailのコマンド
プルダウンが一見正しく設定されているようでも、微妙に異なる値が選択されていることがありました。
その際は、プルダウンを再選択して保存すると、解消されるかもしれません。
やってみて
当初、--smtp-addr
でコンテナとポートを指定できていないことに気づけずしばらく試行錯誤していたのですが、ddev リポジトリの issue に助けてもらいました。
Mailpit not working out of the box with sendmail in Craft CMS · Issue #5739 · ddev/ddevhttps://github.com/ddev/ddev/issues/5739#issuecomment-1911244382
その後、改めて MailHog の記事を見たら同様のコードを掲載していたので「何のためのコードなのか、実は理解できてなかったんだな...」と恥ずかしくなったのは内緒です w
という訳で、これは Craft CMS Advent Calendar 2024 1日目の記事です。
よかったら、お気軽にご参加ください。