お問い合わせフォームのあるLPを作ったとき、開発環境にMailpit(メールピット)というツールが使われていました。
ところが私は、それが何なのか全然わかっていませんでした…
これからDockerを再起動して、自分でもMailpitを使えるようにする段階なので、調べたことを初心者目線でまとめていきます!
Mailpit(メールピット)とは?
Mailpitは、開発中のWebサイトやアプリから送られたメールを、本物の宛先に届けずに受け止めてくれるテスト用のツールです。
受け止めたメールは、ブラウザで開く専用の画面で見ることができます。
お問い合わせフォームには、送信されたらお店側と入力した人にメールが届く仕組みを入れることが多いと思います。
ただ、開発中にテスト送信するたびに本物のメールが飛んでしまうと、間違って実在するアドレスに届いてしまう心配があります。
Mailpitを使うと、送ったメールはすべてMailpitの中で止まり、外には出ていきません。
たとえるなら、どこにも配達しない郵便局の受付のようなものです。
手紙(メール)は受け付けるけれど、配達はせずに、中身をこちらで確認できるように保管しておいてくれます。
MailHogの後継ツール
調べた範囲では、以前はMailHog(メールホッグ)という似たツールがよく使われていたようです。
MailHogは開発が止まっていて、Mailpitはその代わりとして作られたツールのようです。
古い記事でMailHogが出てきたら、同じ役割のツールだと思って読むとわかりやすいと思います。
Mailpitには2つの入り口(ポート)がある
Mailpitには、役割の違う2つの入り口があります。
この入り口をポートと呼び、番号で区別しています。
| ポート番号(初期設定) | 役割 | 使うのは誰? |
|---|---|---|
| 1025 | メールを受け取る入り口(SMTP) | フォームのプログラム |
| 8025 | 届いたメールを見る画面(Web画面) | 私たち人間 |
フォームのプログラムは1025番にメールを送り、私たちはブラウザで8025番を開いて、届いたメールを見る、という分担です。
この番号は初期設定の値なので、環境によっては変更されていることもあります。
Dockerとは?
Mailpitは、Docker(ドッカー)を使って動かすことが多いです。
Dockerは、パソコンの中に小さな作業部屋をいくつも作って、その中でソフトを動かす仕組みです。
この部屋ひとつひとつをコンテナと呼びます。
お問い合わせフォームの開発環境なら、PHPが動くコンテナと、Mailpitが動くコンテナが別々に用意されていることが多いようです。
部屋が分かれているので、Macに直接いろいろなソフトをインストールしなくても開発環境を作れるのが特徴です。
よく出てくる言葉
| 言葉 | ざっくりした意味 |
|---|---|
| イメージ | コンテナを作るための設計図 |
| コンテナ | 設計図から作られた、実際に動いている部屋 |
| Docker Desktop | Dockerを画面で操作できるアプリ |
| compose.yaml(docker-compose.yml) | どのコンテナをどう動かすかを書いた設定ファイル |
MailpitのイメージはDocker Hubで axllent/mailpit という名前で公開されています。
【手順①】Docker Desktopを起動する
Macの場合、アプリケーションフォルダからDocker Desktopを開きます。
画面上のメニューバーにクジラのアイコンが出て、起動が終わるまで少し待ちます。
Docker Desktopが起動していないと、コンテナは動きません。
Mailpitの画面が開かないときは、まずここを確認するといいと思います。
【手順②】コンテナを起動する
起動の方法は、Docker Desktopの画面から操作する方法と、ターミナルでコマンドを打つ方法の2つがあります。
Docker Desktopの画面から起動する
左のメニューの「Containers」を開くと、これまでに作ったコンテナが一覧で表示されます。
docker composeで作った環境は、プロジェクト名のまとまりの中にコンテナが入っています。
停止中のコンテナには再生ボタン(▶)があり、押すと起動します。
状態の欄がRunningになっていれば起動中、Exitedなら停止中です。
ターミナルが苦手な場合でも、起動と停止はこの画面だけでできます。
ターミナルから起動する
compose.yamlがあるプロジェクトのフォルダで、次のコマンドを実行します。
docker compose up -d
設定ファイルに書かれたコンテナが、まとめて起動します。
-d は、裏側で動かし続けるという意味です。
止めるときは次のコマンドです。
docker compose stop
【手順③】Mailpitの画面を開く
コンテナが起動したら、ブラウザで次のアドレスを開きます。
http://localhost:8025
Docker Desktopのコンテナ一覧で、Mailpitの行のポート欄に8025:8025と表示されていれば、そこをクリックしても開けます。
localhostは自分のパソコン自身を指す言葉なので、このアドレスは自分のMacの中でしか開けません。
ポート番号はcompose.yamlで確認できる
compose.yamlの中には、次のような書き方でMailpitの設定が入っています。
services:
mailpit:
image: axllent/mailpit
ports:
- "8025:8025"
- "1025:1025"
コロンの左側がMacから開くときの番号、右側がコンテナの中の番号です。
たとえば左側が8026になっていたら、開くアドレスは http://localhost:8026 になります。
【手順④】フォームからテスト送信して確認する
開発中のお問い合わせフォームに入力して送信すると、Mailpitの画面の受信一覧にメールが増えます。
Mailpitの画面は自動で更新されるので、再読み込みしなくても新しいメールが表示されるようです。
メールは外に出ていかないので、入力するメールアドレスは sample@example.com のような仮のものでも確認できます。
メール画面の見方
一覧からメールをクリックすると、上に送信元(From)・宛先(To)・件名(Subject)が表示され、その下にタブが並んでいます。
| タブ | 見られるもの |
|---|---|
| Text | 文字だけのテキスト版 |
| Headers | 送信元・宛先・日時などの細かい情報 |
| Raw | 加工していないメールの生データ |
| Link Check | 本文中のリンクが切れていないか |
お問い合わせフォームのテストで主に見るのは、上の送信元・宛先・件名と、Textのタブだと思います。
テスト送信で確認したいところ
宛先が、お店側と入力した人の両方に正しく送られているか。
件名や送信元の名前が意図どおりになっているか。
フォームに入力した内容が、本文に抜けなく入っているか。
日本語が文字化けしていないか。
フォームのプログラム側の設定(参考)
調べた範囲では、フォームのプログラム側では、メールの送信先サーバーをmailpit、ポートを1025にしていることが多いようです。
ブラウザからはlocalhostで開きますが、コンテナ同士はcompose.yamlのサービス名で呼び合うため、PHPのコンテナから見た送信先はlocalhostではなくmailpitになります。
ここが食い違っていると、フォームを送信してもMailpitにメールが届きません。
つまずきやすいポイント
Mailpitの画面が開かない
Docker Desktopが起動しているか、MailpitのコンテナがRunningになっているかを確認します。
テストメールが消えた
docker compose down やゴミ箱アイコンでコンテナを削除すると、保存先の設定によってはメールも消えます。 一時的に止めたいだけのときは、停止ボタンか docker compose stop を使います。
本番公開のとき
Mailpitは開発中のテスト専用です。 公開するサーバーでは、本物のメールが届くように送信の設定を切り替えておかないと、お問い合わせのメールが誰にも届かない可能性があります。
迷惑メールフォルダに入るかどうかはMailpitでわかる?
お問い合わせフォームのメールが相手の迷惑メールフォルダに入ってしまうと、せっかくのお問い合わせに気づけません。
これをMailpitで事前に見つけられるのか気になったので、調べてみました。
調べた範囲では、Mailpitでわかるのは文面が迷惑メールっぽく見えるかどうかまでで、実際に迷惑メールフォルダに入るかどうかまでは判定できないようです。
Mailpitでできること:文面のスパムチェック
Mailpitには、SpamAssassin(スパムアサシン)という迷惑メール判定ソフトと連携して、メールの迷惑メールっぽさを点数で見られる機能があります。
ただしSpamAssassinはMailpitに入っているわけではなく、別のコンテナとして用意する必要があります。
方法(実際にはやっていないため調べた範囲で)
Mailpitの作者が連携用のイメージを axllent/spamassassin という名前で公開しているので、compose.yamlに次のような設定を足す形になるようです。
services:
mailpit:
image: axllent/mailpit
ports:
- "8025:8025"
- "1025:1025"
environment:
MP_ENABLE_SPAMASSASSIN: spamassassin:783
spamassassin:
image: axllent/spamassassin
設定が入ると、Mailpitでメールを開いたときにスパムチェックの画面が増え、点数と、どのルールに引っかかって点数が上がったのかを確認できます。
設定を変えたあとは、コンテナを起動し直すと反映されます。
Mailpitでは確認できないこと:送信側の設定
調べてみると、迷惑メールフォルダに入るかどうかは、文面よりも送信する側の設定に左右されることが多いようです。
具体的には、送信元ドメインのSPF・DKIM・DMARCという、なりすましではないことを証明する認証の設定が正しく入っているかどうかです。
送信元のサーバーの評判も判定に関係するようです。
これらは本番のサーバーから実際に送らないと確認できないので、自分のパソコンの中で動くMailpitでは見ることができません。
まとめ
Mailpitは、開発中のフォームから送ったメールを外に出さずに受け止めて、ブラウザの画面で中身を確認できるテスト用のツールでした。
Dockerはそれを動かすための作業部屋のような仕組みで、Docker Desktopを起動してコンテナを動かし、http://localhost:XXXX を開けば届いたメールを見られる、という流れです。
私のように、気づいたら開発環境に入っていて何なのかわからなかった、という状態からでも、役割とポートの関係がわかると一気に見通しがよくなると思います。
実際に自分の環境で動かしてみて、わかったことがあればまた追記したいと思います。


