2026/04/02

GitHub Actionsでメール認証フローを自動テストする完全ガイド

GitHub ActionsCI/CDE2ESDK

なぜCIでメールテストが必要か

サインアップ確認、パスワードリセット、招待メール — 多くのWebアプリケーションはメール送信に依存しています。しかし、これらのフローをCIで自動テストしているチームはまだ少数です。

理由は明確です。CIサーバーにはメールを受信する仕組みがないからです。

MailBrewはAPIベースのメール受信サービスです。CI環境から数行のコードでメールの受信・検証が可能になります。

アーキテクチャ

GitHub Actions Runner
  → アプリケーション(テスト用SMTP: smtp.mailbrew.io:587)
  → MailBrew API(メール受信を待機・取得)
  → テストアサーション

アプリケーションのSMTP設定をMailBrewに向けるだけで、送信されたメールをAPI経由で取得できます。

セットアップ

1. APIキーの設定

GitHubリポジトリのSettings > Secrets に MAILBREW_API_KEY を追加します。

2. ワークフローファイル

name: E2E Tests
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Install dependencies
        run: npm ci

      - name: Run E2E tests
        run: npx playwright test
        env:
          MAILBREW_API_KEY: ${{ secrets.MAILBREW_API_KEY }}
          SMTP_HOST: smtp.mailbrew.io
          SMTP_PORT: 587

3. テストコード

import MailBrew from '@mailbrew/sdk';

const mb = new MailBrew(process.env.MAILBREW_API_KEY);

// テスト用アドレスを発行
const addr = await mb.addresses.create({ ttl: 300 });

// アプリケーションにサインアップ
await signupUser(addr.address, 'password123');

// 確認メールの受信を待機(最大30秒)
const emails = await mb.addresses.waitForEmail(addr.address, {
  timeout: 30,
  count: 1,
});

// アサーション
expect(emails[0].subject).toContain('メールアドレスの確認');
expect(emails[0].html_body).toContain('確認する');

SDK別のコード例

Python

from brewmail import MailBrew

mb = MailBrew(os.environ['MAILBREW_API_KEY'])
addr = mb.addresses.create(ttl=300)

# メール送信トリガー
trigger_signup(addr.address)

# 待機 & 検証
emails = mb.addresses.wait_for_email(addr.address, timeout=30)
assert 'メールアドレスの確認' in emails[0].subject

PHP

use BrewMail\MailBrew;

$mb = new MailBrew(env('MAILBREW_API_KEY'));
$addr = $mb->addresses()->create(['ttl' => 300]);

// 待機 & 検証
$emails = $mb->addresses()->waitForEmail($addr->address, ['timeout' => 30]);
$this->assertStringContains('確認', $emails[0]->subject);

ベストプラクティス

  1. TTLを短く設定する — テストアドレスは5分(300秒)程度で十分
  2. タイムアウトを明示するwaitForEmailのtimeoutは30秒がおすすめ
  3. テストごとに新しいアドレスを使う — 並列実行時の競合を防止
  4. アサーションAPIを活用するPOST /assert で件名・本文・宛先を一括検証

まとめ

メール認証フローのCIテストは、もはや「やりたいけどできない」ものではありません。MailBrewを使えば、既存のCI/CDパイプラインに数分で組み込めます。

無料プランで始める →

← ブログ一覧
© 2026 MailBrew