Free for Windows, macOS & Linux · v0.1.2

MailCatch Test every email. Send none.

MailCatch catches every email your app sends, right on your machine, so you see exactly what your users will get. Then it tells you what's wrong with it. Sign-up codes, password resets, invoices, newsletters: preview, check and test them before anyone else does.

  • Works with any language or framework
  • Nothing reaches a real inbox by accident
  • No account needed
  • API & CLI for your tests
MailCatch showing a captured welcome email, with its one-time code and verify link one click away
Setup time
< 1 minute
SMTP port
1025
Price
$0
Emails sent to real people
0

Email is the part of your app you can't see

Every team has shipped one of these.

During development you either send real emails to real people and hope, or you never look at them at all. MailCatch makes every email visible, checkable and testable before it matters.

The reset link that points to localhost

It worked on your laptop. Your customer clicked http://localhost:8000/reset and got nothing.

01

"Hi {{ first_name }}"

The welcome email that greeted a thousand new customers with an unfilled template tag.

02

The invoice Gmail cut in half

Over 102 KB of HTML and Gmail hides the rest: the total, the footer, the unsubscribe link.

03

Perfect in your editor, broken in Outlook

Rounded buttons turn square, layouts collapse, and dark mode makes your logo vanish.

04

Set up in under a minute

Three steps. One of them is "use your app".

  1. 1
    Install MailCatch and open it

    It starts listening straight away. No account, no sign-up, no configuration file.

  2. 2
    Point your app at it

    Host 127.0.0.1, port 1025, any username and password. That's the whole setup.

  3. 3
    Use your app as normal

    Every email your app sends appears in MailCatch the moment it's sent.

Ready-made settings built in for

  • Laravel
  • Symfony
  • Rails
  • Django
  • Node.js
  • Python
  • PHP
  • Go
  • Java
  • .NET
  • curl
.env
# Laravel - or any framework that sends over SMTP
MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
MAIL_USERNAME=shop-api   # picks the inbox
MAIL_PASSWORD=anything

# That's it. Send an email and watch it land.

Built for the emails that matter

Everything you wish your inbox did.

Find the code, catch the bug, see every screen size, and know exactly what a template change did.

Sign-up & login testing

The code and the link, one click away.

Testing sign-ups and logins means digging through emails for a six-digit code or a magic link. MailCatch finds them for you, so what used to take a minute of scrolling now takes one click.

  • One-time codes detected automatically and shown right in the message list. Click to copy
  • Verify, reset and sign-in links get their own button: open it or copy it instantly
  • Smart enough to ignore order numbers, prices, dates and phone numbers
MailCatch showing a one-time code next to the message in the list, with buttons to copy the code and open the verify link

Email health checks

Catch the mistakes before your customers do.

Every email gets an instant health check, entirely offline. MailCatch tells you what's wrong, why it matters, and how to fix it.

  • Broken templates: unfilled {{ placeholders }}, undefined, NaN and [object Object] in the subject or body
  • Links that won't work: localhost, .test domains and private IPs (the classic wrong-base-URL bug), http:// links and buttons that go nowhere
  • Gmail clipping: a warning when your HTML passes the 102 KB limit
  • Accessibility and deliverability: missing alt text and language, vague "click here" links, no plain-text version, no one-click unsubscribe
  • A spam-risk score, and a link checker that runs only when you ask
  • Outlook
  • Gmail
  • Apple Mail
  • iOS Mail
  • Yahoo Mail
  • Outlook.com
  • Samsung Email
  • Thunderbird

Client support is based on caniemail.com data: see which CSS and HTML features in your email won't work, and where.

The MailCatch Checks tab: a localhost link flagged as an error, a spam-risk score, and a table of email-client support

Preview

See it the way your users see it.

Your users read email on phones, in dark mode, with images blocked. Now you can too, before you ship.

  • Desktop, tablet and mobile widths to catch layouts that don't respond
  • Dark mode, two ways: your email's own dark styles (as Apple Mail shows them), and the forced colour inversion of Gmail and Outlook mobile, where logos vanish and text disappears
  • Remote images blocked by default, just like real inboxes, with a one-click switch
  • Text, headers, raw source and attachments, with inline previews for images, PDFs and text files
A welcome email previewed at mobile width with forced dark mode

Compare

Did that template change break anything?

Pick any two emails and MailCatch shows exactly what changed. Perfect for reviewing a template change before it ships.

  • Subject, sender, recipients, size and attachments compared at a glance
  • A line-by-line diff of the text and the HTML
  • Or both emails rendered side by side
Compare · welcome v1 → v2
  Subject  Welcome to Acme - please verify your email
- From     Acme <no-reply@acme.test>
+ From     Acme App <no-reply@acme.test>
  Size     3.0 KB → 3.1 KB

- <h1>Hi {{ first_name }},</h1>
+ <h1>Welcome aboard, Ada</h1>
  <p>Thanks for signing up.</p>
- <a href="http://localhost:8000/verify">
+ <a href="https://acme.com/verify">

Built for automated tests

Your end-to-end tests can finally check the email too.

Click "Send me a code", wait for the email, read the code, type it in. Three lines, in the language you already test with, and no flaky sleep(5).

  • HTTP API: List, search and fetch messages, read codes and links, clear inboxes.
  • /wait: Waits for the email to arrive, so tests are fast and never flaky. No sleep(5).
  • Live events: Every new message pushed over WebSocket the moment it lands.
  • Headless server: mailcatch serve for CI pipelines and shared development machines.
  • JavaScript
  • TypeScript
  • Python
  • PHP
  • Go
signup.spec.js
const mail = new MailCatch();
await page.click("text=Send me a code");
const message = await mail.waitFor({
  to: "ada@example.com",
  timeout: 30,
});
await page.fill("#code", message.otp_code);
terminal
$ mailcatch serve          # headless, for CI
$ mailcatch wait --to ada@example.com
$ mailcatch tail
$ mailcatch send

Chaos mode · Break your email on purpose

Real mail servers time out, reject messages and drop connections. Does your app cope?

Find out on your laptop instead of in production. Turn chaos mode on for one inbox and choose what goes wrong: extra latency, temporary failures, permanent rejections or dropped connections, at exactly the step you want to test. Then watch whether your app retries, and tells the user.

  • Latency
  • 421
  • 451
  • 452
  • 550
  • 552
  • 554
  • Dropped connection

Everything else you'd expect

Done properly.

  1. 01

    An inbox per project

    The SMTP username decides where mail lands, so every app or service keeps its own inbox, with names and colours.

  2. 02

    Instant search

    Full-text search across subjects, addresses and bodies, and a list that stays fast with thousands of emails.

  3. 03

    Lives in your tray

    Keeps catching mail with the window closed, starts at login, and sends one tidy notification when a test suite sends fifty.

  4. 04

    Release to a real inbox

    Need to see it in actual Gmail or Outlook? Forward any email through your own mail server, only to addresses you've allowed.

  5. 05

    Open in your mail client

    Read captured mail in Outlook, Thunderbird or Apple Mail over POP3.

  6. 06

    Attachments, previewed

    Images, PDFs, text, CSV and JSON open inline. Messages up to 25 MB are accepted by default.

  7. 07

    Automatic cleanup

    Keep a set number of messages per inbox, or delete them after a number of days.

  8. 08

    Light, dark & keyboard

    Light and dark themes that follow your system, and shortcuts for everything you do often.

Private by design

Your test data stays on your computer.

  • Runs entirely on your machineNo account, no cloud, no upload. Test data with real names, addresses and tokens never leaves your computer.
  • Never delivers by accidentMailCatch catches mail; it doesn't send it on. Release only works for recipients you've explicitly allowed.
  • Safe previewsEmail HTML is shown in a locked-down sandbox with no scripts, and remote content is blocked until you allow it.
  • Local by defaultThe SMTP server and API listen only on your own computer unless you choose otherwise, and the API rejects requests from websites.

Works with your stack

If it can send email over SMTP, it works with MailCatch.

On Windows, macOS and Linux. No plugin, no SDK, no code change.

  • Laravel
  • Symfony
  • WordPress
  • Ruby on Rails
  • Django
  • Flask
  • FastAPI
  • Express
  • NestJS
  • Next.js
  • Spring Boot
  • ASP.NET
  • Go
  • Phoenix
  • …and everything else

MailCatch vs testing with a real inbox

Stop guessing what your emails look like.

CapabilityA real inboxMailCatch
Where the email goes A real inbox, maybe a real customer's Caught on your machine. Never delivered
Seeing the email Log in to a mailbox and wait Appears the instant it's sent
Sign-up codes & magic links Open, scroll, select, copy One click, right in the list
Broken templates & localhost links Found by your customers Flagged on every email
Dark mode & mobile Borrow a phone Desktop, tablet, mobile, two dark modes
Outlook & Gmail support Guesswork Feature by feature, per client
Automated tests Polling a mailbox, sleep(5) HTTP API, /wait, client libraries, CLI
Mail server failures Wait for production Chaos mode, on demand
Your test data Stored on someone else's servers Never leaves your computer
Price Often per seat or per message Free

Get MailCatch 0.1.2 · Free

Catching mail in a minute.

Pick the file for your system. We'll email you a one-time code (we test our emails too), and the download starts as soon as you enter it.

First launch & updates

Windows

If Windows shows "Windows protected your PC", choose More info → Run anyway. On Windows 10, the installer adds Microsoft's WebView2 if it's missing.

Updating

Download the newest version and install it over the old one. Your inboxes, captured emails and settings are kept.

The first-launch warning appears because MailCatch is new and not yet widely downloaded; it only shows once. Verify your download (optional): each file's SHA-256 checksum is in SHA256SUMS.txt.

Download MailCatch

Where should we send your code?

We'll email you a one-time code to start . No account, no spam.

FAQ

Questions, answered.

Something else? Ideas or partnership enquiries? Email jamal@unravelers.tech.

Is MailCatch really free?

Yes. Download it and use it for as many projects as you like.

Will my emails reach real people?

No. MailCatch catches every email and keeps it on your machine. The only way an email leaves is if you use Release and send it to an address you've added to your allow list.

Do I need to change my code?

No. Change your SMTP host and port to MailCatch's (usually 127.0.0.1 and 1025) in your development settings, the same way you'd configure any mail server.

Can I use it in CI?

Yes. Run the mailcatch serve command-line server on the CI machine, then use the HTTP API, the client libraries or mailcatch wait in your tests.

Can my whole team use it?

Each developer runs MailCatch on their own machine. For a shared staging or CI environment, run mailcatch serve on that machine and point the environment's SMTP settings at it.

What about attachments and large emails?

Attachments are captured and previewable (images, PDFs, text, CSV, JSON), and can be opened or saved. Messages up to 25 MB are accepted by default; you can raise the limit.

Where is my data stored?

In a folder on your computer, which you can open from Settings. Old messages can be cleaned up automatically.

Why does Windows or macOS show a warning the first time?

Both systems double-check apps that aren't yet widely downloaded. It only happens on the first launch; the steps are in the download section above.

Which systems are supported?

Windows 10 and 11 (64-bit), macOS 11 or later on Apple silicon and Intel, and 64-bit Linux (Ubuntu, Debian, Fedora, openSUSE and others).

Before your customers see it

See every email your app sends. Fix it before it ships.

MailCatch is free for Windows, macOS and Linux. Set up in under a minute, and never send a broken email again.