MailHog
Classic local SMTP catcher (unmaintained since 2020).
MailHog popularized the local SMTP-catcher pattern. It is written in Go, runs SMTP on 1025 and a web UI on 8025, and shipped with a "Jim" chaos-testing mode. The repository has seen no meaningful updates since 2020. Mailpit is a drop-in replacement on the same ports.
A SaaS product sends on behalf of its customers, so the deciding factors are tenant isolation, whether suppressions can be scoped rather than global, and whether support can answer why one specific account did not receive one specific email. Lifecycle automation and transactional sending usually need to coexist.
Against trial expiry notices, dunning, onboarding sequences, and per-tenant transactional mail, MailHog covers none of the capabilities this audience leans on (multi-tenant support, event stream, the suppressions API, scheduling, and webhook coverage), so it fits only where those needs are genuinely absent.
- Multi-tenant: No
- Event stream: No
- Suppressions API: No
- Operating since: Not published
- Scheduling: No
- Best published rate per 1,000: Tiers not published in comparable form
- Deliverability: Not applicable; capture-only.
- Webhooks: No
- Starts at: Free
Not applicable; capture-only.
Legacy projects already wired to it.
New projects. Mailpit runs on the same ports with active maintenance.
- › Familiar from years of tutorials and boilerplates
- › Single Go binary with a Docker image and a chaos-testing mode
- › No meaningful releases since 2020
- › HTML and modern CSS rendering trails current email clients
- › Open issues and pull requests are effectively unattended
Features at a glance
| API | Yes |
| SMTP | Yes |
| SDKs | None |
| Webhooks | No |
| Templates | none |
| React Email | No |
| Batch send | No |
| Scheduled send | No |
| Suppressions | No |
| Multi-tenant | No |
| Inbound parsing | No |
| Event stream | No |
| Idempotency keys | No |
| Dedicated IP | No |