13 个版本
0.8.3 | 2024年6月10日 |
---|---|
0.8.1 | 2024年2月11日 |
0.7.1 | 2023年2月6日 |
46 在 电子邮件
549 每月下载量
54KB
1.5K SLoC
addr-spec
一个极快的 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.com
与test@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