RustMail vs Mailpit vs MailHog
Three local SMTP mail catchers with the same default ports. This page is written by the RustMail project, so it says where the others are stronger too.
Pick Mailpit
if you want the widest feature set: HTML client compatibility scores, live link checks, SpamAssassin, POP3 and SMTP failure injection. It is mature and actively maintained.
Pick RustMail
if your tests live in CI: an assertion endpoint built for curl -f, a blocking rustmail assert command and an official GitHub Action, plus full-text search, auth results and a terminal UI.
Move off MailHog
it has had no release since 2020. Both alternatives listen on the same ports, so switching is a one-line change in your Docker Compose file.
Features
| Feature | RustMail | Mailpit | MailHog |
|---|---|---|---|
| Language | Rust | Go | Go |
| License | MIT or Apache 2.0 | MIT | MIT |
| Storage | SQLite, or in memory | SQLite | In memory, MongoDB or files |
| Search | Full-text | Search with filters | By sender, recipient or text |
| Mobile preview | Yes | Yes | Not listed |
| HTML client compatibility check | No | Yes | Not listed |
| Spam score | No | With SpamAssassin | Not listed |
| DKIM, SPF, DMARC and ARC results | Yes | Not listed | Not listed |
| POP3 server | No | Yes | Not listed |
| SMTP failure injection | No | Yes | Yes |
| Release to a real SMTP server | Yes | Yes | Yes |
| Webhooks | Yes | Yes | Not listed |
| CI assertion endpoint | Yes | General REST API | General HTTP API |
| CLI assert mode | Yes | Not listed | Not listed |
| Official GitHub Action | Yes | Not listed | Not listed |
| Terminal UI | Yes, plus a Neovim plugin | Not listed | Not listed |
"Not listed" means the feature is not in the project's README feature list as of October 2026. Corrections are welcome as an issue on GitHub. For speed, memory and disk, see the benchmarks.
Switching from MailHog or Mailpit
Your app's SMTP settings do not change: RustMail listens on 1025 for SMTP and serves the inbox on 8025. Tests that call the MailHog or Mailpit HTTP API do need updating, because RustMail has its own REST API. For most CI checks the assertion endpoint replaces the polling code entirely.