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.
The question here is which one a backend engineer would rather operate. That means SDK depth in the language already in use, whether a retry can safely be replayed, how much the event log tells you when a customer says the email never arrived, and whether the pricing curve stays sane as volume grows.
Against password resets, receipts, and magic links shipped from application code, MailHog covers developer experience, and does not cover SDK breadth, idempotency keys, event stream, and webhook coverage. Whether that gap matters depends on how central those are to the build.
- DX score: 5/10
- SDKs: None
- Idempotency keys: No
- Operating since: Not published
- Event stream: No
- Best published rate per 1,000: Tiers not published in comparable form
- Webhooks: No
- Deliverability: Not applicable; capture-only.
- Free tier: Free, MIT-licensed
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 |