MailBrew REST APIリファレンス
MailBrewには2つの使い方があります。
アプリのSMTP送信先をMailBrew(smtp.mailbrew.dev)に設定するだけ。送信したメールをダッシュボードの共有メールボックスでリアルタイム確認できます。
SMTP設定へ →APIでテスト用メールアドレスを発行し、実際にメールを受信。OTP抽出、リンク検証、メールアサーションなどをAPIで自動化できます。CI/CDパイプラインに組み込み可能。
Cloud API →アプリケーションの環境変数を以下のように設定してください。
ダッシュボードの「SMTP設定」で生成したSMTP認証情報を使用すると、宛先アドレスに関係なく送信メールが企業の共有メールボックスに自動的に振り分けられます。テスト時に宛先を意識する必要がなくなります。
通信は暗号化されます。ポート 587(STARTTLS・推奨)または 465(SSL/TLS)を使ってください。587 は暗号化してからでないと認証できません。
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailbrew.dev
MAIL_PORT=587
MAIL_USERNAME=mb_smtp_xxxxx
MAIL_PASSWORD=your_smtp_password
MAIL_ENCRYPTION=tlsLaravel 11 以降は MAIL_PORT=587 だけで自動的に暗号化されます(MAIL_ENCRYPTION=tls は Laravel 10 以前用)。465 を使う場合は MAIL_PORT=465 と MAIL_SCHEME=smtps(Laravel 10 以前は MAIL_ENCRYPTION=ssl)。
Node.js (Nodemailer) の場合:
const transporter = nodemailer.createTransport({
host: 'smtp.mailbrew.dev',
port: 587,
secure: false, // STARTTLS on 587 (for 465: port: 465, secure: true)
requireTLS: true,
auth: {
user: 'mb_smtp_xxxxx',
pass: 'your_smtp_password',
},
});MailBrewに送信されたメールはWeb UIでリアルタイムに確認できます。HTMLメールのプレビュー、添付ファイルのダウンロード、全文検索が可能です。
https://tokyo-rehearsal.mailbrew.dev以下はMailBrewクラウドサービスのAPIエンドポイントです。APIキーによる認証が必要です。
公式SDKを使うとAPIを簡単に呼び出せます。
npm install @mailbrew/sdkconst { MailBrew } = require('@mailbrew/sdk');
const client = new MailBrew('mb_your_key_here');createAddress(options?)一時メールアドレスを作成
const addr = await client.createAddress({ ttl: 3600 });
console.log(addr.address); // "ax7k2m@acme.mailbrew.dev"listAddresses()アドレス一覧を取得
const addresses = await client.listAddresses();deleteAddress(address)アドレスを削除
await client.deleteAddress('ax7k2m@acme.mailbrew.dev');waitForEmail(address, options?)メール受信を待機(ロングポーリング)
const email = await client.waitForEmail(addr.address, { timeout: 30000 });listEmails(address)メール一覧を取得
const emails = await client.listEmails(addr.address);getEmail(address, emailId)メール詳細を取得
const detail = await client.getEmail(addr.address, email.id);extractOtp(address, emailId, options?)メール本文からOTP/認証コードを抽出
const code = await client.extractOtp(addr.address, email.id);
// Custom pattern: { pattern: '\\d{4}' }extractLinks(address, emailId, options?)メール本文からリンクを抽出
const links = await client.extractLinks(addr.address, email.id);
// Filter: { pattern: 'verify' }assertEmail(address, emailId, assertions)メール内容のアサーション(件名・送信元・本文など)
const result = await client.assertEmail(addr.address, email.id, {
subject_contains: 'Welcome',
body_contains: 'verify',
});
console.log(result.passed); // truecaptureOtp(options?)アドレス作成〜OTP抽出を一括で行う
const { address, waitAndExtract } = await client.captureOtp({ ttl: 120 });
// ... trigger email ...
const { code, email } = await waitAndExtract();forwardEmail(address, emailId, to)会社の有効かつメール確認済みメンバーへメールを転送
await client.forwardEmail(addr.address, email.id, 'dev@example.com');createWebhook(url, options?)グローバルWebhookを作成
const wh = await client.createWebhook('https://example.com/hook', {
events: ['email.received'],
});listWebhooks()Webhook一覧を取得
const webhooks = await client.listWebhooks();deleteWebhook(id)Webhookを削除
await client.deleteWebhook(wh.id);すべてのAPIリクエストにはAPIキーが必要です。X-API-Key ヘッダーに含めてください。
X-API-Key: mb_your_key_hereAPIキーにスコープが設定されている場合、該当する権限がないリクエストは403エラーになります。スコープ未設定のキーは全権限を持ちます。
addresses:read— アドレスの一覧・詳細の取得addresses:write— アドレスの作成addresses:delete— アドレスの削除emails:read— メールの一覧・待機・OTPとリンクの取り出し・検査・比較・配信性emails:forward— 会社のメンバー(有効かつメール確認済み)への転送webhooks:read— Webhookの一覧の取得webhooks:write— Webhookの登録・変更webhooks:delete— Webhookの削除発行されるアドレスは企業のサブドメインを使用します。カスタムドメインが設定されている場合はそちらが使用されます。
{random}@{company-slug}.mailbrew.devhttps://tokyo-rehearsal.mailbrew.dev/api/mailbrewステータスごとに、よくある原因です。
401403404410422429エラーメッセージの言語は Accept-Language ヘッダで決まります(日本語にするには Accept-Language: ja を付けます)。指定が無ければ英語です。スコープ名(emails:read など)やコードは、どちらの言語でもそのまま書かれます。
応答のヘッダで、残り何回呼べるかが分かります。
Retry-AfterX-RateLimit-LimitX-RateLimit-Remainingすべての通知に X-Mailbrew-Timestamp(送信時刻のUNIX秒)と X-Mailbrew-Signature: sha256=… が付きます。"{タイムスタンプ}.{本文}" を署名の鍵でHMAC-SHA256した値と、受け取った署名を定数時間で比べてください。本文は加工前の生のバイト列を使い、現在時刻との差が300秒(5分)を超えるものは拒否してください。
X-Mailbrew-TimestampX-Mailbrew-Signatureconst timestamp = req.get('X-Mailbrew-Timestamp') || '';
if (!/^\d+$/.test(timestamp)) return res.sendStatus(401);
if (Math.abs(Math.floor(Date.now() / 1000) - Number(timestamp)) > 300) return res.sendStatus(401);
const expected = 'sha256=' + crypto.createHmac('sha256', process.env.MAILBREW_WEBHOOK_SECRET)
.update(timestamp + '.').update(req.body).digest('hex');
const received = Buffer.from(req.get('X-Mailbrew-Signature') || '');
const expectedBuffer = Buffer.from(expected);
if (received.length !== expectedBuffer.length || !crypto.timingSafeEqual(received, expectedBuffer)) {
return res.sendStatus(401);
}鍵はダッシュボードの Webhook の画面(オーナーだけに表示)で確認できます。アドレスごとの webhook_url への通知は、会社の署名鍵で署名します。
/api/mailbrew/addressesアドレス発行 — 一時メールアドレスを生成します。ttl=0で常設(無期限)アドレスを作成できます。
ttlintegerwebhook_urlstringlocal_partstring{
"data": {
"id": 1,
"address": "ax7k2m@acme.mailbrew.dev",
"webhook_url": null,
"expires_at": "2026-03-29T13:00:00+00:00",
"is_permanent": false,
"created_at": "2026-03-29T12:00:00+00:00"
}
}/api/mailbrew/addressesアドレス一覧 — このAPIキーと、同じ会社の受信で自動で作られたアドレスを返します。自動で作られたアドレスは、同じ会社のどのAPIキーからも読めます。
{
"data": [
{
"id": 1,
"address": "ax7k2m@acme.mailbrew.dev",
"webhook_url": null,
"expires_at": "2026-03-29T13:00:00+00:00",
"is_permanent": false,
"created_at": "2026-03-29T12:00:00+00:00"
}
]
}/api/mailbrew/addresses/{address}アドレス詳細 — アドレスの詳細を取得します。
{
"data": {
"id": 1,
"address": "ax7k2m@acme.mailbrew.dev",
"webhook_url": null,
"expires_at": "2026-03-29T13:00:00+00:00",
"is_permanent": false,
"created_at": "2026-03-29T12:00:00+00:00"
}
}/api/mailbrew/addresses/{address}/emailsメール一覧 — 指定アドレスに届いたメールの一覧を取得します。受信メールは保存期間(全プラン 7 日。組織のセキュリティ設定で短くできます)を過ぎると削除されます。
{
"data": [
{
"id": 1,
"from_address": "noreply@example.com",
"subject": "Your verification code",
"text_body": "Your code is: 847291",
"received_at": "2026-03-29T12:05:00+00:00"
}
]
}/api/mailbrew/addresses/{address}/emails/{id}メール詳細 — 特定のメールの詳細を取得します。
{
"data": {
"id": 1,
"from_address": "noreply@example.com",
"subject": "Your verification code",
"text_body": "Your code is: 847291",
"html_body": "<p>Your code is: <b>847291</b></p>",
"received_at": "2026-03-29T12:05:00+00:00"
}
}/api/mailbrew/addresses/{address}/emails/{id}/otpOTP抽出 — メール本文から認証コード(OTP)を自動抽出します。E2Eテストに最適。
patternstring{
"data": {
"code": "847291",
"email_id": 1,
"source": "text_body"
}
}/api/mailbrew/addresses/{address}/emails/{id}/linksリンク抽出 — メール本文からリンク(URL)を自動抽出します。招待リンクやパスワードリセットリンクの取得に最適。
patternstring{
"data": {
"links": [
"https://example.com/verify?token=abc123",
"https://example.com/unsubscribe"
],
"email_id": 1,
"source": "text_body"
}
}/api/mailbrew/addresses/{address}/emails/{id}/assertメールアサーション — メールの内容を検証します。件名、送信元、宛先、本文の部分一致など、複数条件を同時にチェック。
subjectstringsubject_containsstringfromstringtostringbody_containsstring{
"data": {
"passed": true,
"email_id": 1,
"results": [
{ "field": "subject", "passed": true, "expected": "Welcome", "actual": "Welcome" },
{ "field": "body_contains", "passed": true, "expected": "verify" }
]
}
}/api/mailbrew/addresses/{address}/emails/{id}/forwardメール転送 — 受信メールを会社の有効かつメール確認済みメンバーのアドレスにのみ転送します。
tostring{
"data": {
"forwarded": true,
"to": "dev@example.com"
},
"success": true
}/api/mailbrew/addresses/{address}アドレス削除 — アドレスを削除します。
204 No Content/api/mailbrew/addresses/{address}/emails/waitメール受信待機 — ロングポーリングでメール受信を待機します。
timeoutintegersincestringcountinteger{ "data": [] }/api/mailbrew/addresses/{address}/sequenceメール順序の検証 — 条件に合うメールが順序どおり届くか検証します。
stepsarraytimeoutinteger{ "data": { "passed": true, "steps": [] } }/api/mailbrew/addresses/{address}/emails/{id}/diffメール差分 — 2通のメールの差分を取得します。
againstinteger{ "data": { "email_id": 1, "against_id": 2, "fields": {} } }/api/mailbrew/addresses/{address}/emails/{id}/deliverability配信性の解析 — SPF・DKIM・DMARCなどの配信性を解析します。
{ "data": { "score": 100, "checks": [], "recommendations": [] } }/api/mailbrew/emails外部宛メールの一覧 — SMTP認証で送った外部宛(gmail.comなど)のメールを、封筒の宛先(RCPT TO)で引きます。BCCの宛先でも引けます。MailBrewのアドレスを to に指定しても引けません(アドレスのAPIで取得)。1通ずつの取得・OTP・リンク抽出は /api/mailbrew/emails/{id}・/otp・/links で行えます。
tostringsincestring{
"data": [
{
"id": 1,
"from_address": "noreply@example.com",
"subject": "Your verification code",
"text_body": "Your code is: 847291",
"received_at": "2026-03-29T12:05:00+00:00"
}
]
}/api/mailbrew/emails/wait外部宛メールの受信待機 — 外部宛のメールが届くまでロングポーリングで待機します。パラメータはアドレスの受信待機と同じです。
tostringtimeoutintegersincestringcountinteger{ "data": [] }/api/mailbrew/webhooksWebhook一覧 — グローバルWebhookの一覧を取得します。
{
"data": [
{
"id": 1,
"url": "https://example.com/hook",
"events": ["email.received"],
"is_active": true
}
]
}/api/mailbrew/webhooksWebhook登録 — グローバルWebhookを登録します。全アドレスのメール受信を通知。
urlstringeventsarray{
"data": {
"id": 1,
"url": "https://example.com/hook",
"secret": "abc123...",
"events": ["email.received"],
"is_active": true
}
}/api/mailbrew/webhooks/{id}Webhook更新 — WebhookのURL・イベント・有効状態を更新します。
urlstringeventsarrayis_activeboolean{ "data": { "id": 1, "url": "https://example.com/hook", "events": ["email.received"], "is_active": true } }/api/mailbrew/webhooks/{id}Webhook削除 — Webhookを削除します。
204 No Contentconst { MailBrew } = require('@mailbrew/sdk');
const client = new MailBrew('mb_your_key_here');
// E2E test: create address, wait for email, extract OTP
const { address, waitAndExtract } = await client.captureOtp({ ttl: 120 });
// ... trigger email send to `address` ...
const { code, email } = await waitAndExtract();
console.log(code); // "847291"