self-hostedな環境でアプリを動かしていると、Nextcloud、Wiki、その他各種サービスが「メール送信機能」を備えていますよね。本来なら外部のメールサーバーを設定して、実際にメールを送信することになります。
ただ、個人や小規模チームのホームラボなら、メール送信機能は「あればいい」けど「本物のメール」は要らないことがほとんどです。私自身もパスワードリセットくらいでしかつかったことがありません。そんなときに、わざわざメールサーバーを設定するのは過剰ですよね。
そこで活躍するのがMailpit。ローカルSMTPサーバーとしてメール送信を受け付けて、Web UIで確認できます。本来は開発環境用ですが、self-hostedな用途でも「メール送信機能は欲しいけど外部サーバーは要らない」という場面にぴったりです。
Mailpit
Mailpitは、開発環境でメール送受信機能をテストするための軽量なSMTPサーバーです。単一バイナリで動作し、依存関係がなく、Linux・macOS・Windowsで同じように使えます。古いMailHogの後継で、今も積極的に開発・保守されています。
Mailpitの特徴
1. ローカルSMTPサーバー
Mailpitを起動するだけで、ポート1025でSMTPサーバーが立ち上がります。アプリケーションをこのサーバーに向けるだけで、送信したメールをキャッチできます。実際のメールサーバーは不要です。
mailpit # SMTP: localhost:1025 # Web UI: http://localhost:8025
2. モダンなWeb UI
送信されたメールはhttp://localhost:8025のWebUIで確認できます。HTMLメール、テキストメール、ヘッダー、添付ファイルまで、すべて見えます。
リアルタイム更新なので、メール送信と同時に画面に表示されます。検索・フィルター機能も充実しているので、多数のテストメールの中から特定のメールをすぐ見つけられます。
3. REST APIで自動テスト対応
Web UIだけでなく、REST APIも提供しています。統合テストでメール送信機能を検証できます。
# メール一覧取得
curl http://localhost:8025/api/v1/messages
# メール検索
curl "http://localhost:8025/api/v1/search?query=test@example.com"
# メール削除
curl -X DELETE http://localhost:8025/api/v1/messages/{id}
自動テストでメール内容を確認できるので、「メール送信が実行されたか」「正しい宛先に送信されたか」を自動で検証できます。
4. SMTP認証の柔軟な対応
アプリケーションが「SMTP認証が必須」という設定なら、Mailpitに認証を要求させることもできます。
# 任意のユーザー・パスワードを受け付ける mailpit --smtp-auth-accept-any
この設定なら、どんなユーザー名・パスワードでも接続でき、わざわざ認証情報を厳密に管理する必要がありません。self-hostedな環境では非常に便利です。
5. Docker対応
公式のDockerイメージが用意されており、docker-composeで他のサービスと一緒に起動できます。
version: '3' services: mailpit: image: axllent/mailpit ports: - "8025:8025" # Web UI - "1025:1025" # SMTP command: --smtp-auth-accept-any # 認証設定が必須なアプリ向け app: build: . environment: MAIL_HOST: mailpit MAIL_PORT: 1025 MAIL_USER: anyuser # 何でもOK MAIL_PASSWORD: anypassword # 何でもOK depends_on: - mailpit
アプリケーションはコンテナ内からmailpit:1025でSMTPサーバーに接続でき、認証情報は任意です。
インストール方法
macOSの場合:
brew install mailpit
Linux(スクリプト)の場合:
curl -sL https://raw.githubusercontent.com/axllent/mailpit/develop/install.sh | sudo sh
GitHub Releasesから直接ダウンロードすることもできます。
基本的な使い方
Self-hostedな環境での使い方
例えばNextcloudを自宅サーバーで動かしていて、メール通知を有効にしたい場合:
- ホームラボのマシンでMailpitを起動(または Docker で)
- Nextcloudの管理画面で「メール設定」に進む
- SMTP ホストに Mailpit のサーバー名またはIPを指定(ポート1025)
- あとはいつも通りメール通知が必要な操作をする
http://mailpit-server:8025で受け取ったメール一覧を確認
実際の例(Nextcloud設定):
認証なしの場合:
メールサーバー: 192.168.1.100 SMTPポート: 1025 認証なし 送信元: noreply@homelab.local
認証が必須なアプリの場合(Mailpitを--smtp-auth-accept-anyで起動):
メールサーバー: 192.168.1.100 SMTPポート: 1025 ユーザー名: testuser パスワード: testpass 送信元: noreply@homelab.local
どんな認証情報でも大丈夫です。本番環境のようにシステム複雑に する必要は全くありません。
開発環境での使い方
アプリを開発しているときのメール送信テスト:
Node.jsの場合:
const nodemailer = require('nodemailer'); const transporter = nodemailer.createTransport({ host: 'localhost', port: 1025, secure: false });
Spring Bootの場合(application.properties):
spring.mail.host=localhost spring.mail.port=1025 spring.mail.protocol=smtp
Web UIでメール確認
http://localhost:8025(またはサーバーのIP:8025)にアクセスして、送信されたメール一覧を確認。HTMLレイアウト、リンク、画像の表示も確認できます。

CI/CDやテストでの活用
統合テストの際も、REST APIを使ってメール送信の確認を自動化できます。
# テスト実行
npm test
# テスト内でメール検証
curl http://localhost:8025/api/v1/messages
curl -X DELETE http://localhost:8025/api/v1/messages/{id}
まとめ
Mailpitは、「メール送信機能はいるけど、わざわざメールサーバー設定するほどでもない」という場面で活躍します。
Self-hosted環境で: Nextcloud、Wiki、その他自宅サーバーで動かしているアプリのメール通知機能を、外部メールサーバーなしで完結させられます。
開発環境で: テストメールの誤配信防止、REST APIでの自動テスト対応。
どちらの用途でも、単一バイナリで依存関係なく動作。MailHogの後継として、今も積極的に開発が続いています。
ホームラボで「このアプリ、メール送りたいんだけど...」と思ったら、Mailpitを起動するだけ。わざわざメールサーバーは要りません。
