#rfc-5322 #parser-serializer #rfc2822 #address

addr-spec

一个极快的 UTF-8 电子邮件地址解析器和序列化器

13 个版本

0.8.3 2024年6月10日
0.8.1 2024年2月11日
0.7.1 2023年2月6日

46电子邮件

Download history 10/week @ 2024-04-14 7/week @ 2024-04-21 1/week @ 2024-04-28 137/week @ 2024-05-05 3/week @ 2024-05-12 7/week @ 2024-05-19 26/week @ 2024-05-26 23/week @ 2024-06-02 220/week @ 2024-06-09 88/week @ 2024-06-16 106/week @ 2024-06-23 88/week @ 2024-06-30 51/week @ 2024-07-07 52/week @ 2024-07-14 12/week @ 2024-07-21 433/week @ 2024-07-28

549 每月下载量

MIT/Apache

54KB
1.5K SLoC

addr-spec

crates.io license ci docs

一个极快的 UTF-8 电子邮件地址解析器和序列化器。它提供

  • 无偏见、正确的电子邮件地址解析(在RFC 5322中定义为 addr-spec),
  • 使用低级内存管理进行极快的序列化和反序列化,
  • 保证电子邮件地址的唯一性,
  • 支持UTF-8,并按照RFC 6532中建议的NFC标准化,以及
  • 基于RFC 5322第3.4.1节RFC 6532第3.2节中的语法集进行格式验证,具有位置精确的错误。

特性

此crate支持以下特性

  • normalization - 这将启用(NFC)地址的标准化。
  • comments - 这允许解析(但不能序列化;请参阅注意事项)注释。
  • literals - 这允许解析和序列化文本域名。
  • white-spaces - 这允许解析(但不能序列化;请参阅注意事项)空白字符。

默认情况下,normalization 已启用。

注意事项

折叠空白字符

序列化折叠空白字符(简称FWS)不受支持,因为它依赖于传输机制。如果您需要沿着可折叠边界拆分地址,可以使用into_serialized_parts,它返回本地部分和域的序列化版本。

注释

序列化注释不受支持,因为它依赖于传输机制。目前,注释被解析,但被跳过,因为没有统一的方式来处理它们。如果您希望存储注释,请提交一个包含您用例的问题。

替代方案

email_address

此crate提供了一个“新类型”EmailAddress,底层只是验证并包装一个地址字符串。

它不支持空白字符、注释和UTF-8规范化,也不支持地址规范化(例如,"te st"@example.comtest@example.com等价,但无法与email_address区分开来)。

基准测试

email_address支持的场景中(无注释、无空白字符、无UTF-8/地址规范化),关闭所有功能后,email_address的性能略优于addr_spec约5%,这是有意义的,因为email_address无法区分等效的地址。

迁移

强烈建议在生产环境中只使用addr_spec,因为addr_spec提供了存储和查找的唯一性保证以及其他特殊功能(基于位置的错误、SMTP风格的Display写入器等)。如果这不可行,我们为来自email_address的用户提供了Into<EmailAddress>Into<AddrSpec>。请注意,Into<AddrSpec>只是Into<EmailAddress>右逆,即AddrSpec -> EmailAddress -> AddrSpec将始终产生相同的AddrSpec,但EmailAddress -> AddrSpec -> EmailAddress可能不会产生相同的EmailAddress

依赖项

~0–360KB
~13K SLoC