📪

【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を用いてブラウザでメール確認する方法

確認手順

  1. Mailpit が起動していることを確認
  2. ブラウザで http://localhost:8025 にアクセス
  3. メール一覧が表示され、クリックで詳細表示も可能

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 の活用手順

  1. https://mail.tm/ にアクセス
  2. 自動生成されたメールアドレスをコピー
  3. アプリ内の新規登録フォームに貼り付けて送信
  4. Mail.tm の画面に戻り、リアルタイムで届くメールを確認
  5. 本文のリンクをクリックして認証完了

想定される活用シーン

  • ユーザー登録時の「メール重複不可」バリデーションの検証
  • 「認証リンクの有効期限切れ」などの動作確認
  • 本番に近いメール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スキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
https://onewedge.co.jp/

GitHubで編集を提案

Discussion