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.
Judged purely as an API. What the request contract guarantees on retry, how complete the webhook event coverage is, whether suppressions are readable and writable programmatically, and how much the message log retains when something needs debugging in production.
Against high-frequency programmatic sends where a missed delivery is a product failure, MailHog covers none of the capabilities this audience leans on (idempotency keys, webhook coverage, event stream, the suppressions API, batch sending, and SDK breadth), so it fits only where those needs are genuinely absent.
- Idempotency keys: No
- Webhooks: No
- Event stream: No
- Operating since: Not published
- Suppressions API: No
- Best published rate per 1,000: Tiers not published in comparable form
- Batch sending: No
- SDKs: None
- Deliverability: Not applicable; capture-only.
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 |