Built for Dev & QA teams
Email testing for your CI pipeline, without the enterprise price tag
mailcatchr gives every test run its own catchall inbox. Point your app at it, send mail, then inspect and assert through the UI, the REST API, the TypeScript SDK, or a real POP3/IMAP client.
- Free tier, no credit card
- First mailbox in under two minutes
- Real SMTP, POP3 & IMAP
Features
Everything you need to test email.
From first send to final assertion.
Catch inbound mail, read it back over real protocols, and assert on it from code, all from one workspace.
Catchall inboxes
Every mailbox is a whole subdomain, so any address on it just works. Generate unique addresses per test, no setup per address.
Real mail protocols
Inbound over real SMTP. Read back over POP3 or IMAP with per-mailbox credentials. Test actual mail clients, not just an API.
REST API + TypeScript SDK
Scoped API keys, a clean REST surface and an SDK for the ergonomics: poll for a message, read bodies, download attachments.
Webhooks
Signed callbacks push mail events into your pipeline the moment a message lands. No polling required.
2FA / TOTP testing
Store TOTP authenticators per workspace and fetch the current code over the API to automate two-factor login flows end to end.
Built for teams
Up to 250 team members on Business, role-based access, and SAML SSO on Business and up. One workspace, one bill.
How it works
Three steps from signup to a green build
No SMTP servers to run, no DNS to configure. Your inbox exists the moment you create it.
-
Create a catchall mailbox
Every mailbox gets its own subdomain. Anything sent to
*@acme-ci.mailcatchr.comlands in it, no per-address setup. -
Point your app at it
Sign up test users with addresses on your subdomain. Your app sends mail exactly as it does in production.
-
Assert from your suite
Long-poll for the message, read the body, pull the 2FA code. From the SDK, the REST API, or a real IMAP client.
// Wait for the password-reset email, then assert on it.
var msg = await mc.AwaitMessageAsync(
mailboxId,
to: "alice@acme-ci.mailcatchr.com",
subject: "Reset your password",
timeout: TimeSpan.FromSeconds(30));
msg.Should().NotBeNull();
msg!.Subject.Should().Be("Reset your password");
// Read the full body when you need the link inside it.
var detail = await mc.GetMessageAsync(mailboxId, msg.Id);
detail.TextBody.Should().Contain("/reset?token=");
import { createClient } from "@mailcatchr/sdk";
const mc = createClient({ apiKey: process.env.MC_KEY! });
// Need a 2FA code mid-test? Read it from a stored authenticator.
const totp = await mc.totps.code(authenticatorId);
await page.fill('input[name="otp"]', totp.code);
// Send from a verified identity to an address you control.
await mc.send(mailboxId, {
from: "noreply@acme.send.mailcatchr.com",
to: "qa@acme-ci.mailcatchr.com",
subject: "Welcome",
textBody: "Hi there",
});
# Long-poll until a matching message lands (204 on timeout).
curl -H "Authorization: Bearer $MC_KEY" \
"https://api.mailcatchr.com/v1/mailboxes/$MAILBOX/messages/await?to=alice@acme-ci.mailcatchr.com&subject_contains=Reset&timeout_seconds=30"
# Current code from a stored TOTP authenticator.
curl -H "Authorization: Bearer $MC_KEY" \
"https://api.mailcatchr.com/v1/totp/$TOTP_ID/code"
Pricing
Simple pricing. No seat math.
Up to 250 team members on Business, no per-seat pricing. Outbound sending is pay-as-you-go on every tier: $0.50 per 1,000 emails from a prepaid wallet.
Free
$0
forever
Evaluate properly, no credit card.
- 1 mailbox (catchall subdomain)
- 100 inbound emails / day
- 3-day message retention
- 500 MB storage
- 1 team member · 1 webhook endpoint
- 5 API keys · 1 TOTP authenticator
- Full API, SDK, webhooks & POP3/IMAP
Most popular
Business
$29 /month
billed monthly
For QA teams running real suites.
Everything in Free, plus
- Unlimited mailboxes
- 10,000 inbound emails / day
- Up to 250 team members · 50 webhook endpoints
- Retention up to 30 days
- 50 GB storage
- 100 API keys · 50 TOTP authenticators
- SAML SSO
Need bigger limits, longer retention, or custom terms? Contact sales for a tailored plan.
Prices in USD, excluding taxes. Annual billing is two months free ($290/year for Business).
FAQ
Questions, answered
Do I need a credit card for the free tier?
No. The free tier is a real evaluation environment (one catchall mailbox, 100 emails a day, full API and SDK access) with no card on file.
How does outbound sending work?
Outbound is pay-as-you-go on every tier: you top up a prepaid wallet and sends are debited at $0.50 per 1,000 emails. Recipients are restricted to addresses you control, so test suites can't accidentally spam real users.
What happens to my test data?
Messages are kept for your mailbox's retention window (3 days on Free, up to 30 days on Business; longer windows are available on custom plans) and then deleted, including the stored attachments. You can export your workspace data or delete the whole workspace at any time.
Can my whole team use one account?
Yes. Business includes up to 250 team members with Owner / Admin / Member roles at no per-seat cost, and Business and up can switch the workspace to SAML SSO with your identity provider. Need more seats? Contact sales for a custom plan.
Can I cancel any time?
Yes. You can change or cancel your plan from workspace settings whenever you like. Cancelling keeps Business until the end of the period you've paid for, then drops to Free without deleting your data.
Your next test run deserves a real inbox
Set up your first catchall mailbox in the next two minutes.
Create your free inboxFree tier · no credit card · cancel anytime