#address #newtype #parser #validation #str #rfc-compliant

email_address

一个提供符合 RFC 规范的 EmailAddress 新类型实现的 Rust crate。

11 个版本

0.2.9 2024 年 7 月 31 日
0.2.8 2024 年 7 月 31 日
0.2.4 2022 年 11 月 2 日
0.2.3 2022 年 8 月 9 日
0.1.0 2020 年 3 月 24 日

#4 in 电子邮件

Download history 41534/week @ 2024-05-03 48886/week @ 2024-05-10 46337/week @ 2024-05-17 40587/week @ 2024-05-24 45315/week @ 2024-05-31 45499/week @ 2024-06-07 43932/week @ 2024-06-14 44656/week @ 2024-06-21 45526/week @ 2024-06-28 50932/week @ 2024-07-05 47945/week @ 2024-07-12 50190/week @ 2024-07-19 47738/week @ 2024-07-26 49766/week @ 2024-08-02 49258/week @ 2024-08-09 44619/week @ 2024-08-16

201,421 个月下载量
215 个 crate 中使用 (41 个直接使用)

MIT 许可证

66KB
1.5K SLoC

Crate email_address

一个提供符合 RFC 规范的 EmailAddress 新类型实现的 Rust crate。

MIT License Minimum Rust Version crates.io docs.rs Build Audit GitHub stars

主要适用于验证,EmailAddress 类型通过 FromStr::from_str 构建,这将会抛出任何解析错误。在构建之前,也可以使用函数 is_validis_valid_local_partis_valid_domain 来测试有效性,而无需构建实例。

状态

目前,它支持所有 RFC ASCII 和 UTF-8 字符集规则,以及引号和非引号本地部分,但不支持所有 SMTP 头部所需的生成,如折叠空白、注释等。

示例

use email_address::*;

assert!(EmailAddress::is_valid("[email protected]"));

assert_eq!(
    EmailAddress::from_str("Abc.example.com"),
    Error::MissingSeparator.into()
);

规范

  1. RFC 1123: 互联网主机要求 -- 应用和支持,IETF,1989 年 10 月。
  2. RFC 3629: UTF-8,ISO 10646 的转换格式,IETF,2003 年 11 月。
  3. RFC 3696: 检查和转换名称的应用技术,IETF,2004 年 2 月。
  4. RFC 4291 IP 版本 6 地址架构,IETF,2006 年 2 月。
  5. RFC 5234: 用于语法规范的扩展 BNF:ABNF,IETF,2008 年 1 月。
  6. RFC 5321: 简单邮件传输协议,IETF,2008 年 10 月。
  7. RFC 5322: 互联网消息格式,IETF,2008 年 10 月。
  8. RFC 5890: 用于应用程序的国际化域名 (IDNA):定义和文件框架,IETF,2010 年 8 月。
  9. RFC 6531: 用于国际化电子邮件的 SMTP 扩展,IETF,2012 年 2 月。
  10. RFC 6532: 国际化电子邮件头部,IETF,2012 年 2 月。

变更

版本 0.2.9

  • 修复了错误 #21:接受无效的Unicode字符。

版本 0.2.8

  • 修复了错误 #29:恢复了对 Eq 的实现。

版本 0.2.7

  • 特性:为 Option 类型添加了构建函数。
  • 文档:为 Option 类型文档添加了示例。

版本 0.2.6

  • 修复:合并问题。

版本 0.2.5

  • 特性:Pull Request #15 -- 添加任何自由文本作为显示名称的潜在增强。
  • 特性:Pull Request #17 -- 检查域名部分的起始或结束是否包含非字母数字字符。
  • 特性:Pull Request #18 -- 当为空时,用 SubDomainEmpty 代替 InvalidCharacter 出现错误。
  • 特性:Pull Request #19 -- 允许配置最小子域数量。
  • 特性:Pull Request #20 -- 添加不允许域名字面量的选项。
  • 特性:Pull Request #22 -- 处理电子邮件本地部分中的单引号。

感谢 ghandicblaine-arcjetThomasdezeeuw

版本 0.2.4

  • 修复了错误 #11
    1. 为域名部分添加了不区分大小写的比较的 PartialEq 的手动实现。
    2. 因为上述原因,添加了 Hash 的手动实现。
  • new_unchecked 的签名改为更灵活。
  • 添加了 as_str 辅助方法。

版本 0.2.3

  • 添加了新的 EmailAddress::new_unchecked 函数(Sören Meier)。

版本 0.2.2

  • 移除了手动实现的 SendSync,并修复了文档错误(Sören Meier)。

版本 0.2.1

  • From<EmailAddress> 添加了 String
  • EmailAddress 添加了 AsRef<str
  • 添加了 local_partdomain 访问器。
  • 添加了更多单元测试,特别是针对上述列表。
  • 增加了警告和拒绝列表的条件。
  • 修复了一些 Clippy 警告。
  • 修复了编码 mailto URI 方案中的错误。

版本 0.2.0

  • 添加了 UTF-8 支持。
  • 添加了更多测试用例,修复了解析中的缺陷。
  • 方法 to_uri 现在支持将地址作为 URI 的一部分进行 URI 编码。
  • 添加了 is_valid_local_partis_valid_domain 方法。

版本 0.1.0

  • 基于 RFC 5322 的基本类型实现和结构。
  • 见 TODO。

TODO

  1. 支持注释。
  2. 支持换行和空白规则。
  3. 不解析 domain-literal 值,仅进行表面语法检查。

依赖项

~170KB