Alternatives

Mailpit alternative: GrabMail vs Mailpit and MailHog

Mailpit is the self-hosted SMTP catcher that replaced MailHog: one binary, an SMTP port your application talks to, a web inbox and a REST API, free under the MIT licence. GrabMail is a hosted service that receives real mail from the internet at real addresses. One catches what you send in development; the other gives your tests an address the world can write to. Facts read on Mailpit’s own site and repository on 2 September 2026, with a plain account of when to run Mailpit instead.

  • 9 min read
A small grey box with envelopes stacked inside it and a tiny grey terminal screen standing behind, next to a single blue envelope with a perforated edge on a small pedestal

At a glance

Fourteen rows, several of which read “not applicable” for a tool that lives on your own host. Every Mailpit cell is what its documentation, README and runtime-options page said on 2 September 2026; every GrabMail cell is read from the constants the service enforces.

FeatureGrabMailMailpit
Free tierYes: Everything: public domains, your own domain, the API and the MCP server. No account, no card.Yes: Everything: MIT-licensed, no tiers, no accounts. You pay with the host you run it on.
No account, no API keyYes: Nothing to create. A GET with the address in the query string reads the mailbox.Yes: None by default; optional HTTP Basic authentication on the interface and the API.
REST APIYes: Three endpoints over HTTPS, OpenAPI 3.1, one read per second per address.Yes: A REST API with a Swagger document, served by your own instance; a websocket for notifications, outside the official API.
Choose your own addressYes: Any name on 8 public domains, grabmail.io and mixozia.com among them, free.Yes: Any recipient your application sends to is accepted; there are no addresses to allocate.
Your own domainYes: Free and unlimited: one MX record at smtp.grabmail.io, no registration step.Partly: Not applicable: it accepts mail for any domain from your application, and is not built to receive internet mail.
Message retention5 days, fixed. Not a tier, not a setting.Yours to set: the 500 most recent by default, or an age such as --max-age 14d; the default database is a temporary file deleted on exit.
AttachmentsYes: Up to 5 MB per message, downloadable from the inbox and the API.Yes: Yes; messages over 50 MB are rejected by default.
No ads, no trackingYes: No ads, no analytics, no third-party script.Yes: None; it is software you run.
Private inboxNo: Public: anyone who knows the address can read it. Each mailbox has an alias to hand out instead.Yes: As private as your host; nothing leaves it unless you relay it.
MCP server for AI agentsYes: Free MCP server at https://grabmail.io/mcp: create an inbox, wait up to 25 seconds for a message, read it.No: None: no MCP server, no llms.txt.
Sending mailNo: None, by design. Receive only.Partly: It captures rather than sends, but can relay or forward a captured message through an external SMTP server, and has an HTTP send API.
Webhooks or pushNo: None. Poll once a second, or let the MCP wait hold the call open.Yes: An optional webhook on received messages, and a websocket feed.
Official SDKsNo: None. An OpenAPI document and three endpoints instead.No: None; a Swagger document and interactive docs on your instance.
Apps and extensionsPartly: A Chrome extension, loaded by hand; not on the store yet.Partly: A static binary for Windows, Linux and Mac, Docker images, Homebrew, and an optional POP3 server for mail clients.

Checked 2 September 2026. Mailpit’s defaults are quoted from its runtime options: 500 most recent messages kept, a temporary database deleted on exit, a 50 MB message limit. MailHog’s status is inferred from its repository dates, which are quoted; the project carries no deprecation notice.

What Mailpit does well

Mailpit is the tool to run next to your application while you build it. Four things it does that GrabMail does not:

  • It catches everything you send, locally. Point your app at port 1025 and every message lands in the web inbox on 8025 — passwords resets, invoices, the lot — without a single one reaching a real address. GrabMail never sees your outbound mail.
  • It tests the message, not just the delivery. HTML compatibility checks, a link checker, SpamAssassin scoring, screenshots, tagging. GrabMail hands you the message and stops.
  • Chaos. Since version 1.20 it can inject SMTP failures at chosen stages with chosen probabilities, to prove your application copes when the mail server does not. Nothing hosted offers that.
  • It is yours. MIT-licensed, a single binary, two hundred to three hundred messages a second, no vendor, no account, no internet needed. GrabMail is somebody else’s server, and everything on it is public.

Where GrabMail is different

GrabMail does the one thing a local SMTP catcher cannot: exist on the internet, with addresses other people’s servers can deliver to.

  • Real inbound mail. A test signs up to a third-party service and that service sends a code — to GitHub, to Stripe, to whatever you are integrating with, the address has to be real. run-42@grabmail.io is real, has an MX record, and its mail is readable with a keyless GET.
  • Nothing to run, nothing to expose. Making Mailpit receive from the internet means a public host, an MX record and a firewall rule, and its documentation does not position it for that. GrabMail is already there; a CI runner needs only outbound HTTPS.
  • Your own domain as a catch-all, hosted. One MX record at smtp.grabmail.io and every address on the domain receives from anywhere, kept 5 days, no daemon of yours involved.
  • An MCP server for agents. An agent that must sign itself up somewhere cannot use a local SMTP catcher at all. GrabMail’s server at https://grabmail.io/mcp gives it an inbox and a blocking wait_for_message of up to 25 seconds, with no key.

Price, side by side

There is nothing to price at Mailpit: it is free software, and its cost is the host you run it on. GrabMail’s only paid plan buys access to a pool of domains kept off the disposable-mail blocklists; everything in the table above stays free.

TierGrabMailMailpit
FreePublic domains, your own domain, API, MCP. No account, no cap.Everything, MIT-licensed: SMTP capture, web inbox, API, POP3, chaos, checks.
Cheapest paidPremium, $24 a month: API access to the off-blocklist domain pool, paid in crypto.None.
Above thatPro $78 and Scale $148 a month: more messages and keys on the same pool.None.
What you pay withPublicity: every mailbox is readable by anyone who knows the address.A host, a port, and the fact that it cannot receive from the internet.

As published on 2 September 2026. GrabMail’s pricing page has the full grid.

For developers: reading a mailbox

The two APIs read different mail, so here is the one that reads inbound mail from the outside world. This reads a GrabMail mailbox with no header, no key and no account:

shell
$ curl -sG https://grabmail.io/api/v1/mailbox --data-urlencode "address=anything@grabmail.io" | jq '{count, alias}'

Mailpit’s equivalent is GET http://localhost:8025/api/v1/messages on your own instance, listing what your application sent to it — the right call for asserting your app produced the right message. Reading what a third party sent to a test user is GrabMail’s job; the reference is three endpoints, and the GitHub Actions guide shows both kinds of test in one workflow.

In CI the two sit side by side: Mailpit as a service container on 1025 for the application’s own mail, GrabMail addresses for the sign-ups the suite performs against real services. Neither needs a secret.

For AI agents

Mailpit publishes no MCP server and no llms.txt, and a local SMTP catcher is not something an agent signing up to a website can use. GrabMail’s server at https://grabmail.io/mcp gives an agent an inbox with no key: create_inbox, a blocking wait_for_message of up to 25 seconds, read_message.

Email for AI agents covers the four-call loop and the guard rails; the client guide has the configuration for Claude, Cursor and five others.

Switching from Mailpit or MailHog

From MailHog, switch to Mailpit — that is the maintained replacement for the same job. From either to GrabMail only for the tests that receive:

  1. Replace MailHog with Mailpit for capture. Same idea, same ports, a maintained project: docker run -p 8025:8025 -p 1025:1025 axllent/mailpit. Nothing about that involves GrabMail.
  2. Find the tests that talk to the outside. A test that registers with a real third-party service and waits for its mail cannot be served by a local catcher. Give it run-{id}@grabmail.io, or an address on a domain you point at smtp.grabmail.io.
  3. Read it with a GET. /api/v1/mailbox?address=… every second with a deadline; the Playwright guide has the loop. No token, no service container.
  4. Keep Mailpit for everything else. Templates, links, spam scores, failure injection: that is its job, and GrabMail cannot do any of it.

Which one, for what

The honest split is by direction:

Pick GrabMail when

  • a test or an agent must receive mail from a service you do not control;
  • you need a real address with an MX record, and nothing to host or expose;
  • an agent needs an inbox it can open and wait on, with no account.

Pick Mailpit when

  • you want to see and check everything your application sends, without it leaving your machine;
  • you want chaos testing, spam scoring and HTML checks on your own templates;
  • nothing may leave your network, and you want software rather than a service.

When to stay with Mailpit

Three situations where GrabMail is the wrong tool:

  • Your tests check what you send. GrabMail cannot see your application’s outbound mail at all. That is Mailpit’s whole purpose.
  • Your mail must not leave the building. A local catcher keeps every message on your host; every GrabMail mailbox is public on the internet.
  • You test failure. Chaos mode, relay to a real server, forwarding rules: features of a tool you run, with no hosted equivalent here.

Questions

Is GrabMail a Mailpit or MailHog alternative?

Only for tests that receive mail from the outside world, which neither Mailpit nor MailHog was built for. For capturing and inspecting your own application’s outbound mail, Mailpit is the tool, and GrabMail is not an alternative to it.

Is MailHog still maintained?

Its repository is not archived and carries no deprecation notice, but on 2 September 2026 its last release was v1.0.1 from August 2020, its last commit from August 2022, and it had over two hundred open issues. Mailpit is the maintained project for the same job.

Can Mailpit receive email from the internet?

It is an SMTP server you point your application at, not a service with an MX record; its documentation does not position it for internet mail, and doing so would mean exposing your host. GrabMail exists for exactly that case.

How long does Mailpit keep messages?

As long as you say: the 500 most recent by default, an age such as --max-age 14d if you set one, and nothing at all after exit unless you configure a database file. GrabMail keeps every message 5 days.

Can I use both in one pipeline?

That is the usual arrangement: Mailpit as a service container for the application’s own mail, GrabMail addresses for the sign-ups the suite performs against real services. The GitHub Actions guide shows the receiving half.

Try it while it is fresh

An address takes one click, no account and no card. Everything in this guide works on it straight away.

Welcome back

Your inboxes and your domains, in one place.