Webアプリケーションやお問合せフォーム、会員登録機能を開発しているとき、一番心臓に悪いのが「メール送信機能のテスト」ではないでしょうか。
「テストデータをポチッと送信したら、うっかり本物の実在するアドレス宛にテストメールが飛んでしまった!」「ローカル環境からGmailやSendGridなどの外部SMTPにつないでいたら、認証エラーや送信制限に引っかかって作業がストップした」……こうしたトラブル、開発者なら誰もが一度は冷や汗を滝のように流した経験があるはずです😿
実は店主も昔、お問合せフォームのテスト中に実在する知り合いのメールアドレス宛に『テスト本文です!あああ』と連打送信してしまい、大慌てで平謝りの電話をかけた苦い記憶があります(本当に寿命が縮まりました…)。
そんな開発現場の恐怖とストレスを一発で吹き飛ばしてくれる神ツールが、今回ご紹介するローカル用メールキャプチャツール「Mailpit(メールピット)」です!😼✨ 導入からDocker設定、各種言語での接続方法まで、画像付きで徹底的に解説していきます!
- Mailpitの概要と、長年使われてきた「MailHog」から乗り換えるべき決定的な理由
- Mailpit公式サイト&GitHubからのダウンロード・導入手順
- Docker / Docker Compose を使った1分での爆速起動設定
- PHP / Laravel / WordPress / Node.js / Python 等での接続コード実例
- HTMLメールプレビュー、リンク検証、ヘッダー解析などの神機能まとめ
1. Mailpitとは? なぜMailHogから乗り換えるべきなのか
Mailpitは、Go言語で開発されているオープンソースの超軽量ローカルSMTPサーバー&Web UIツールです。
開発中のWebアプリから送信されたメールをすべて横取り(キャプチャ)し、外部のインターネットには1通たりとも送信せず、ブラウザ上の専用ダッシュボードに受信メールをリアルタイムに一覧表示してくれます。
Mailpitの詳しい機能紹介や公式ドキュメント、各OS向けのダウンロード先は以下の公式リンクから確認できます。
- 公式サイト(ドキュメント): Mailpit Documentation (mailpit.axllent.org)
- 公式GitHubリポジトリ: axllent/mailpit (GitHub)
- 最新リリースページ(バイナリDL): Mailpit Releases (Windows .exe / Mac / Linux)
- Mac (Homebrew) でのインストール:
brew install mailpit - Windows (Scoop) でのインストール:
scoop install mailpit
かつてローカル開発のメールキャプチャといえば「MailHog」が定番中の定番でした。しかしMailHogは何年ものあいだ開発が止まっており、大量のメールを受信するとメモリを食い潰してブラウザが固まるなどの問題がありました😿
「頼むから誰かMailHogの後継を作ってくれ〜!」と全世界のエンジニアが願っていたところに登場したのが、このMailpitです!
| 比較項目 | かつての定番「MailHog」 | 現代の決定版「Mailpit」 |
|---|---|---|
| 開発状況 | 数年間更新停止(非推奨) | 活発にアップデート継続中 ✨ |
| パフォーマンス | メール数が増えると重くなる | SQLite保存で数千通でも爆速・超軽量 🚀 |
| メールプレビュー | シンプルなプレビューのみ | HTML/テキストの綺麗な表示対応 ✨ |
| リンク検証機能 | なし(外部へ飛ぶ危険あり) | Link CheckでURL一覧・安全検証 🛡️ |
| ヘッダー&生データ | 簡易ヘッダーのみ | Headers / RawでMIME完全解析 📜 |
| メッセージ検索 | シンプルなテキスト検索 | 差出人・宛先・ヘッダー・本文の詳細フィルタ 🔎 |
店主も実際にMailHogからMailpitに乗り換えたとき、「うわ、起動も画面描画も速すぎる……!しかもデザインがめちゃくちゃ綺麗!」と感動してしまいました😻
2. Mailpitの動作構造と基本ポート
Mailpitを立ち上げると、主に以下の2つのポートが待ち受け状態になります。仕組みはいたってシンプルです!
- SMTPポート(デフォルト:
1025): WebアプリやPHPプログラムがメールを送信する宛先。面倒なパスワード認証などは一切不要で、誰でも送信を受け付けてくれます。 - Web UIポート(デフォルト:
8025): ブラウザでアクセスして受信メールを確認するダッシュボード画面(http://localhost:8025/)。
3. 爆速で動かす!導入・起動手順
方法A:Dockerコマンドで今すぐ起動する(最も手軽)
Docker環境があれば、ターミナルで以下のコマンドを1行叩くだけで準備完了です!
docker run -d \
--name mailpit \
-p 1025:1025 \
-p 8025:8025 \
--restart unless-stopped \
axllent/mailpit:latest
コマンド実行後、ブラウザで http://localhost:8025/ を開けば、もう受信ダッシュボードがスタンバイしています。
方法B:Docker Compose に組み込む(プロジェクト開発のベストプラクティス)
Webアプリの開発現場では、プロジェクトの docker-compose.yml にサービスとして追加しておくのが一番スマートでおすすめです。
version: '3.8'
services:
# お手持ちのWebアプリコンテナ(例: PHP/Node.js/Pythonなど)
app:
build: .
ports:
- "8080:80"
depends_on:
- mailpit
# Mailpitの追加(これだけでOK!)
mailpit:
image: axllent/mailpit:latest
container_name: mailpit
restart: unless-stopped
ports:
- "1025:1025" # SMTPサーバー
- "8025:8025" # Webダッシュボード
environment:
MP_MAX_MESSAGES: 500 # 保持する最大メール数(古いものから自動削除)
MP_DATABASE: /data/mailpit.db # メールの永続化が必要な場合
volumes:
- mailpit-data:/data
volumes:
mailpit-data:
同じDockerネットワーク内からは、ホスト名 mailpit、ポート 1025 を指定するだけで簡単に繋がります。
4. 各種言語・フレームワークからの接続設定例
「実際にプログラムからどうやって送ればいいの?」という方向けに、主要な言語やフレームワークでの設定例をまとめました。
① PHP(ネイティブ / mail()関数)
php.ini の sendmail_path または SMTP ディレクティブを設定します。
; php.ini の設定例(Mailpitをローカルで動かしている場合)
[mail function]
SMTP = localhost
smtp_port = 1025
sendmail_from = no-reply@example.com
② Laravel(.env)
Laravelは設定ファイルの書き換えだけで一瞬で繋がります。.env を以下のように設定してください。
MAIL_MAILER=smtp
MAIL_HOST=mailpit # Docker内部ならコンテナ名、ホスト直なら 127.0.0.1
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@akanekoza.com"
MAIL_FROM_NAME="${APP_NAME}"
③ WordPress(WP Mail SMTP)
WordPressのローカル環境(LocalやDockerなど)でテストメールを確認したい場合は、プラグイン「WP Mail SMTP」の設定で「その他のSMTP」を選び、以下のように入力します。
- SMTPホスト:
mailpit(Docker環境)またはlocalhost - 暗号化: なし(None)
- SMTPポート:
1025 - 認証: オフ(No Authentication)
④ Node.js(Nodemailer)
Node.js環境では nodemailer を使って手軽に送信テストができます。
import nodemailer from 'nodemailer';
const transporter = nodemailer.createTransport({
host: 'localhost', // Docker外から送る場合
port: 1025,
secure: false, // TLS不要
ignoreTLS: true
});
await transporter.sendMail({
from: '"赤猫座の道具店" <support@akanekoza.com>',
to: 'test-user@example.com',
subject: '【テスト】ご注文ありがとうございます',
text: 'プレーンテキストの本文です。',
html: '<h1>HTMLメールの本文です</h1><p>ご注文内容をご確認ください。</p>'
});
⑤ Python(Django / smtplib)
Djangoの場合は settings.py に以下を記述するだけです。
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
EMAIL_USE_TLS = False
EMAIL_USE_SSL = False
5. 開発が劇的に快適になる!Mailpitの神機能たち
Mailpitのすごさは、「ただメールを受信できる」だけではありません。開発者が『これ欲しかった!』と唸る機能がぎっしり詰まっています😼
① 直感的で快適なメール詳細・HTMLプレビュー
受信したメールをクリックすると、見やすい詳細画面でテキストやHTMLメールのレイアウトを即座に確認できます。
「送信されたHTMLメールのデザインが崩れていないか」「リンクURLや差出人情報が正しいか」などを、普段使いのメールソフトを開くことなくブラウザ上だけでストレスなくチェックできます。
② リンク一覧と安全検証(Link Checkタブ)
Mailpitの超便利機能の1つが「Link Check」タブです。メール本文に含まれるすべてのURLリンクを自動で抽出し、リンク切れ(404エラー等)がないかステータスコードを自動検証してくれます。
「認証用URLのパラメータが正しいか」「メール内のリンクが正しく200 OKで開けるか」を画面上で一発チェックできるため、開発中の誤クリックによる外部遷移や事故も防いでくれます。
③ ヘッダー解析&生データ確認(Headers / Rawタブ)
「Headers」タブでは、送信元・宛先・件名・Message-ID・日時などの各種メールヘッダーが綺麗に整理されて表示されます。
さらに「Raw」タブを開けば、SMTPでやり取りされた生のMIME/EMLソースをそのまま確認・コピーできるため、メールヘッダーのデバッグや文字化け原因の調査にも役立ちます(添付ファイルがある場合も画面上から直接ダウンロード可能です)。
④ REST APIを活用したE2E自動テスト(Playwright / Cypress)
Mailpitには強力なREST APIが標準で備わっています。http://localhost:8025/api/v1/messages にアクセスすると、受信したメールデータをJSONで取得できます。
// 例: Playwright / Jest 等で「パスワード再設定メールが届いたか」を自動検証
const res = await fetch('http://localhost:8025/api/v1/messages');
const data = await res.json();
const latestEmail = data.messages[0];
console.log('件名:', latestEmail.Subject);
// 本文中の認証コードやURLを正規表現で抽出して自動テストを継続!
6. 事故を「仕組み」でゼロにするための鉄則
どれだけ気をつけていても、人間である以上「うっかり」はいつか起こります🙀
メール送信事故を防ぐ最大の秘訣は、個人の注意深さに頼るのではなく「開発環境からは外部のSMTPに物理的に繋がらない構造を作ること」です。
ローカル環境ではMailpit以外の送信先をシャットアウトし、「どこにどう送ってもMailpitがすべてキャッチしてくれる」という安心安全な砂場(サンドボックス)を作っておくことこそが、プロの開発現場における最大の防御策です
まとめ:道具を整えて、安心してコードを書こう!
メール送信機能は、ユーザー登録や注文処理など、Webサービスの信頼性に直結する大切なパーツです。
だからこそ、「本番に誤送信したらどうしよう……」とおびえながら開発するのではなく、絶対に外に漏れないMailpitという頼もしい味方を用意して、伸び伸びと開発を楽しみましょう!
まだ本番SMTPや自分の個人メールでヒヤヒヤしながらテストしている方は、ぜひ今日からMailpitを導入してみてくださいね!🐱
