Craft CMS のテストメールを Mailpit で受信する

過去記事の「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 を付けて、コンテナの生成も行います。

Mailpit の画面サンプル

起動したら 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 にテストメールが届いていれば完了です。

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日目の記事です。
よかったら、お気軽にご参加ください。