【Mailpit/Mail.tm】Webアプリ開発でメール機能検証に役立つツール
はじめに
Webアプリ開発において、ユーザー登録やパスワードリセットといった「メール送信機能」は欠かせません。
ローカル環境でメール機能の動作を確認したい。送信されたメールの中身をすぐ見たい。本番環境でも、社用アドレスを使わず複数のテストユーザーで動作検証をしたい——こうしたニーズは開発中によくあります。
そんなシーンで役立つのが、ローカル開発環境における簡易メール送信機能テストツール「Mailpit」と捨てメールアドレス発行ツール「Mail.tm」です。この記事では、これらの導入方法と使い方をLaravel アプリ開発を例に紹介します。
対象者
- Web アプリ開発中で、メール送信機能をテストしたい人
- Mailtrap の代替ツールを探している人
- 複数のメールアドレスでメール送信機能のテストをしたい人
結論
この2つを組み合わせることで、Web開発におけるメール検証がとても楽になります。
-
Mailpit
📬「ローカルで送信メールを可視化する開発者用ポストボックス」
→ 開発中のメール送信が正しく動作しているかを確認できます -
Mail.tm
🕶️「一時的な受信専用アドレスを即時発行できる捨てメアド発行ツール」
→ テスト用の受信ボックスでユーザー目線の動作確認ができます
使い分け方
ツール | 目的 | 理由 |
---|---|---|
Mailpit | メール送信が正しく行われたかの確認 | Laravelからの送信処理・Mailableの表示内容などを即時確認できる |
Mail.tm | メールアドレスの一意制約付き登録フォームを検証 | 新しいテスト用メールアドレスを即発行でき、再登録NGも試せる |
Mailpitとは?
Mailpit は、ローカルで動作するメールキャプチャツールです。開発中のアプリケーションから送られたメールを SMTP で受信し、ブラウザでその内容を確認できます。MailHog の後継として注目されています。
※Mailtrap の無料枠終了に悩んでいる方にもおすすめです。
Mailpitの導入方法
Dockerで簡単にMailpitを立ち上げることができます
docker run -p 1025:1025 -p 8025:8025 axllent/mailpit
- ポート 1025:SMTP 用
- ポート 8025:Web UI 用
macOS向け:HomebrewでのMailpit導入
brew install mailpit
mailpit
LaravelやPHPでのメール送信設定
.envの記述例(local環境専用)
MAIL_MAILER=smtp
MAIL_HOST=localhost
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
※ .env.production
や .env.staging
に混入しないよう注意。
config/mail.php
のガード例
'host' => env('APP_ENV') === 'local' ? 'localhost' : env('MAIL_HOST', 'smtp.example.com'),
Laravelの送信コード例
use Illuminate\Support\Facades\Mail;
Mail::raw('これはテストメールです。', function ($message) {
$message->to('test@example.com')
->subject('テスト送信');
});
Mailableクラスを使う場合
php artisan make:mail TestMail
作成された App\Mail\TestMail
に以下を記述:
public function build()
{
return $this->subject('テスト送信')
->view('emails.test')
->with(['content' => 'これは Mailable で送るテストメールです']);
}
送信処理:
Mail::to('test@example.com')->send(new TestMail());
Mailpitを用いてブラウザでメール確認する方法
確認手順
- Mailpit が起動していることを確認
- ブラウザで http://localhost:8025 にアクセス
- メール一覧が表示され、クリックで詳細表示も可能
Docker ComposeでMailpitを常駐させる
docker-compose.yml
の例:
version: '3'
services:
mailpit:
image: axllent/mailpit
ports:
- "1025:1025"
- "8025:8025"
volumes:
- ./mailpit-data:/data
CI環境(GitHub Actions)へのMailpit統合
- name: Run Mailpit
run: docker run -d -p 1025:1025 -p 8025:8025 axllent/mailpit
よくある注意点(誤送信対策)
-
.env
のメール設定は必ず環境ごとに分けましょう -
Mail::fake()
を組み合わせることでテスト内での送信確認も可能です - 誤って本番メールを送信しないよう、APP_ENV とMAIL設定の整合性に注意
Mail.tmと組み合わせて「本番に近い登録テスト」も実現
Mailpit はローカルでのメール送信テストに最適ですが、実際のユーザー登録フロー(重複チェックや認証リンク確認)には Mail.tm のような使い捨てメールサービスの併用が効果的です。
Mail.tm の活用手順
- https://mail.tm/ にアクセス
- 自動生成されたメールアドレスをコピー
- アプリ内の新規登録フォームに貼り付けて送信
- Mail.tm の画面に戻り、リアルタイムで届くメールを確認
- 本文のリンクをクリックして認証完了
想定される活用シーン
- ユーザー登録時の「メール重複不可」バリデーションの検証
- 「認証リンクの有効期限切れ」などの動作確認
- 本番に近いメールUI体験を通じた E2E 的検証
Mailpit で送信処理が正常に動くことを確認した後、Mail.tm で「実ユーザー」を想定した外部テストを行うことで、開発と検証の両輪を高精度に回すことができます。
よくある注意点(誤送信対策)
-
.env
のメール設定は必ず環境ごとに分けましょう -
Mail::fake()
を組み合わせることでテスト内での送信確認も可能です - 誤って本番メールを送信しないよう、APP_ENV とMAIL設定の整合性に注意
おわりに
開発中のメール送信テストは、「本番環境に近い形で安全に」行うのが理想です。
Mailpit を使えば、その理想が簡単に叶います。Mailtrap の無料枠がなくなった今、ローカル環境で安心・快適にメールテストを行う選択肢として、Mailpit は非常に有力なツールです。
加えて、Mail.tm を活用することで、「実際に届くメールUI」「重複不可バリデーション」「認証リンクの動作確認」など、本番に近いシナリオでのテストも可能になります。
私自身、Mailpit × Mail.tm の併用により、手動検証の工数と不安が大幅に減りました。あなたの開発環境にも、ぜひこの組み合わせを取り入れてみてください。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】
ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion