#header-parser #pest-parser #parser #peg

电子邮件地址列表

基于Pest的解析器,用于解析电子邮件标题中的地址列表,如“发件人”、“收件人”、“抄送”等。

5个不稳定版本

0.3.0 2024年4月25日
0.2.5 2019年11月20日
0.2.1 2018年12月1日
0.2.0 2018年12月1日
0.1.0 2018年11月10日

235电子邮件

GPL-3.0 许可证

44KB
1K SLoC

Rust 1K SLoC // 0.0% comments Pest 143 SLoC

email-address-list

Crate version Documentation License

这是一个相对简单的基于Pest的解析器,从“电子邮件地址列表”中提取“联系人”,例如从“发件人”、“收件人”、“抄送”等标题中提取。

该库的目标是实用而非“正确”。它在解析甚至最糟糕的垃圾邮件时都(可能过度地)宽容。对现实世界数据进行有限测试,但语法可能还需要工作以捕获更多边缘情况。

0.0.x版本可能包含错误修复和功能,0.x.0可能破坏兼容性。

示例

RFC兼容的标题

use email_address_list::*;

let manual: AddressList = vec![
    Contact::new("[email protected]").set_name("Túsainm Sloinne"),
    Contact::new("[email protected]")
].into();

let result = parse_address_list(
    "Túsainm Sloinne <rí[email protected]>, [email protected]"
).unwrap();

assert!(result.deep_eq(&manual));

不兼容RFC的标题

let manual: AddressList = vec![
    Contact::new("[email protected]").set_name("Ime Priimek"),
    Contact::new("[email protected]"),
    Contact::new("[email protected]")
        .set_name("Oblikovan, Nepravilno"),
    Contact::new("napač[email protected]"),
].into();

let result = parse_address_list(
    concat!(
        r#""Ime Priimek" <[email protected];[email protected]>, "#,
        "Oblikovan, Nepravilno <[email protected],>>, ",
        "<'napač[email protected]'>",
    )
).unwrap();

assert!(result.deep_eq(&manual));

如果您发现email-address-list失败示例,无论是省略地址还是提供错误地址,请与作者分享。

有关更多信息,请参阅文档

谢谢

依赖关系

~4–6.5MB
~130K SLoC