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
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%的字符串都是引用。
基准测试
此图表显示了解析单个邮件所需的时间。
通过 rustup run nightly cargo bench
和 rustup run nightly cargo bench --no-default-features
运行这些基准测试。
测试需要一个包含旁边 mail.txt
文件的原始邮件的 Cargo.toml
。
一些库的性能取决于邮件的内容,因此此库不总是最快的。
许可证:MIT
依赖项
~110KB