MailParse vs Stalwart mail-parser
MailParse
mailparse.devStalwart mail-parser
github.comSide by side
| Figure | MailParse | Stalwart mail-parser |
|---|---|---|
| Price from | $29/mo | Free |
| Free plan | Yes | Yes |
| Free trial | — | — |
| Open source | — | — |
| Web | Yes | — |
| macOS | — | Yes |
| Linux | — | Yes |
| API | Yes | — |
| Self-hosted | — | Yes |
| Plans published | 3 | 2 |
| Spec score · Email Parsing Software | 8.0 (#10) | 7.8 (#14) |
Plans
In their own words
MailParse
MailParse receives inbound email and converts MIME messages into structured JSON. It extracts text and HTML bodies, inline images, attachments, headers, and routing details, including nested and multipart messages. Parsed results can be sent by POST to a configured webhook, with exponential-backoff retries and HMAC signature verification, or retrieved through a REST polling API. Polling supports filters for sender, date range, subject, and attachment type, with cursor-based pagination. SPF, DKIM, and DMARC validation, spam scoring, and per-address rules support message handling. Attachments use signed download URLs and are retained for 72 hours by default, with plan-based retention settings. Custom domains require an MX record and ownership verification. If a webhook is unavailable, retries continue for up to 24 hours, with replay and polling recovery. MailParse offers API and web access. Free includes 100 emails monthly; Pro costs $29 per month and Scale $99 per month.
Stalwart mail-parser
Stalwart mail-parser is a free, open-source Rust library for parsing email messages. It supports Internet Message Format RFC 5322, MIME RFC 2045–2049 and other internet messaging RFCs, while attempting to handle messages that depart moderately from those standards. Parsed output includes a MIME tree, text and HTML body lists, and attachments. If one alternative is missing, the library can convert HTML to plain text or plain text to HTML. SIMD kernels accelerate scanning on supported targets, while transfer decoding and charset conversion wait until content is read. Returned strings generally reference the original input message. WHATWG encoding labels are recognized, and the optional full_encoding feature adds legacy multibyte sets including Shift_JIS, Big5 and GB18030. Defaults allow nesting depth 64, 10,000 MIME parts and three decoded nested-message levels. Rust 1.98 is required. No feature is enabled by default; serde adds serialization. The library is licensed under MIT or Apache-2.0 and costs nothing.