Keep Mailpit.
Add real delivery.

Mailpit is the right tool for localhost — free, fast, a single binary that catches everything your dev server sends. This page is about what happens when your tests leave localhost, because a redirected SMTP socket can't follow them there.

real MX · zero ops · plays fine alongside Mailpit
MAILPIT IS RIGHT WHEN
MAILFIXTURE IS RIGHT WHEN

The difference is the network boundary

Mailpit works by impersonating your SMTP server: you point your app at its socket, and every message your code hands to the transport shows up in its UI. That's genuinely the right architecture for development — instant, private, free. But notice what it proves: your app called send. The message never touched DNS, never met your provider's API, never got rendered by the template pipeline your production config actually uses.

MailFixture sits on the other side of the wire. Inboxes are real addresses on real domains with real MX records — your app sends through whatever it sends through in that environment, and the test asserts on what actually arrived. That catches the bugs SMTP capture is structurally blind to: the staging config that still points at the sandbox provider, the DKIM setup that quietly broke, the signup form that rejects your test domain, the template variable that only renders wrong in the provider's pipeline.

It also means there's nothing to point anywhere: a preview deploy on Vercel, a QA environment someone else owns, a mobile build talking to production APIs — if it can send email to an address, you can test it.

Side by side, honestly

Two tools, two jobs. Rows where Mailpit wins say so.
MAILFIXTUREMAILPIT
Price Free tier, paid from $15/mo Free, open source — Mailpit wins
Works offline / air-gapped No — it's a hosted service Yes — Mailpit wins
Receives mail via Real MX on real domains An SMTP socket you redirect
Tests the production delivery path Yes — provider, DNS, templates No — mail never leaves the box
Against deployed environments Yes, no config changes Only if you rewire their SMTP
Parallel CI workers Isolated inboxes per test Shared instance, or one each
OTP / link extraction extracted.otp.best, typed Your regex on the body
Waiting for a message Long-poll, held server-side Poll the REST API
SPF/DKIM/DMARC verdicts Automatic on every message (extracted.auth) No — optional SpamAssassin score only
MCP server for AI agents Built in — remote, one command Community bridge, self-hosted
Ops burden None Run, persist, upgrade it yourself
mailpit facts from mailpit.axllent.org (spamassassin integration from its docs, jul 7, 2026), mcp bridge = github.com/amirhmoradi/mailpit-mcp (community) — july 2026. it's a genuinely good tool — this table is about fit, not quality.

The CI version of your Mailpit test

Same shape you already write — create somewhere for the mail to land, trigger the flow, assert. The difference is the address is real, so this exact test runs unchanged against localhost, staging, or a preview deploy:

signup.spec.ts · Playwright
const mail = new MailFixture(); // reads MAILFIXTURE_API_KEY

const inbox = await mail.createInbox({ ttlSeconds: 900 });
await page.fill('#email', inbox.address); // a real, routable address
await page.click('text=Send code');

const otp = await inbox.waitForOtp({ timeout: 30_000 });
await page.fill('#otp', otp);

Fair questions

Should I stop using Mailpit?
No. For local development it's the best tool in its category — free, instant, works offline. Keep it. MailFixture picks up where the localhost network boundary becomes the problem: CI, staging, and the real delivery path.
Can MailFixture run self-hosted or air-gapped?
No — hosted only. If mail can't leave your network, use Mailpit; that's exactly the job it's built for.
Why does real MX delivery matter in tests?
Because that's where production bugs live: provider configuration, DNS, recipient validation, the template your email provider actually rendered. SMTP capture proves your app called send; a real inbox proves the email arrived.
100 messages/mo free · no card · keep mailpit for localhost
Start free Read the quickstart