#mime #parser #rfc-5322

email-parser

最快的最轻量级的邮件解析 Rust 库。支持 MIME。

8 个版本 (4 个破坏性更新)

0.5.0 2020年12月17日
0.4.0 2020年11月14日
0.3.0 2020年11月11日
0.2.0 2020年11月8日
0.1.3 2020年6月29日

#125 in 邮件


用于 2 crates

MIT 许可证

170KB
4.5K SLoC

email-parser

最快的最轻量级的邮件解析 Rust 库!
此库默认没有依赖(仅有一个小的可选依赖)。

目标

此库的目标是完全符合 RFC 5322。然而,此库不打算支持已过时的语法,因为其已过时12年,这会减慢一切。
此库支持 MIME,并将支持 PGP。

示例

let email = Email::parse(
    b"\
    From: Mubelotix <[email protected]>\r\n\
    Subject:Example Email\r\n\
    To: Someone <[email protected]>\r\n\
    Message-id: <[email protected]>\r\n\
    Date: 5 May 2003 18:58:34 +0000\r\n\
    \r\n\
    Hey!\r\n",
)
.unwrap();

assert_eq!(email.subject.unwrap(), "Example Email");
assert_eq!(email.sender.name.unwrap(), vec!["Mubelotix"]);
assert_eq!(email.sender.address.local_part, "mubelotix");
assert_eq!(email.sender.address.domain, "mubelotix.dev");

按需付费

邮件可以被详细化。无论你正在构建什么,你肯定不是使用它的所有功能。
那么,为什么你要为不使用的报头字段付费呢?此库允许你启用所需的报头,从而使其他报头值被解析为非结构化报头,这要快得多。
通过禁用所有报头值解析,此库可以解析整个邮件快两倍!但如果你需要启用所有功能,请不要担心;这个库本身已经非常快了!

零拷贝(几乎)

此库尽可能避免使用拥有 String,而是使用 Cow<str>
得益于这种方法,大约90%的字符串都是引用。

基准测试

此图表显示了解析单个邮件所需的时间。

Benchmark

通过 rustup run nightly cargo benchrustup run nightly cargo bench --no-default-features 运行这些基准测试。
测试需要一个包含旁边 mail.txt 文件的原始邮件的 Cargo.toml
一些库的性能取决于邮件的内容,因此此库不总是最快的。

许可证:MIT

依赖项

~110KB