4 个版本

0.1.4 2023年11月26日
0.1.3 2022年3月12日
0.1.2 2021年2月14日
0.1.0 2020年4月25日

#30 in 电子邮件

Download history 1166/week @ 2024-03-14 1462/week @ 2024-03-21 1400/week @ 2024-03-28 1688/week @ 2024-04-04 1558/week @ 2024-04-11 1190/week @ 2024-04-18 1272/week @ 2024-04-25 1347/week @ 2024-05-02 1388/week @ 2024-05-09 1199/week @ 2024-05-16 1013/week @ 2024-05-23 1086/week @ 2024-05-30 929/week @ 2024-06-06 764/week @ 2024-06-13 1001/week @ 2024-06-20 659/week @ 2024-06-27

3,469 每月下载量
用于 4 个 crate(直接使用 2 个)

自定义许可证

33KB
658

EmlParser

EmlParser 是一个用于解析 .eml 文件的 crate。目前,这个 crate 非常基础,支持从电子邮件头和消息体中提取字段 (name,value) 对。特殊的头 ToFromSubject 被分开;其他所有头目前都列在 Vec<HeaderField> 中。

该 crate 的解析尝试遵循 RFC-0822,但实际上在处理换行符方面似乎与 RFC 有所偏差。规范说明正文和头由一个空行分开,由 CRLF 定界。通常,我们实际上会看到 \n\n,所以 EmlParser 允许 \n\n\r\r\r\n\r\n

注意,头字段 可以 包含换行符,定义为 线性空白

找到头和正文之间的分隔符遵循以下转换图

Transition diagram for detecting the header/body delimiter

用法

您可以使用 EmlParser 与一个 &str 或一个文件名一起使用

let eml: Eml = EmlParser::from_file("Re: hello.eml")?
    .ignore_body()
    .parse()?;

let expected = HeaderFieldValue::SingleEmailAddress(EmailAddress::NameAndEmailAddress {
    name: "Anne Thompson".to_string(),
    address: "[email protected]".to_string(),
});

assert_eq!(Some(expected), eml.from);
assert_eq!(Some("Re: hello".to_string()), eml.subject);

依赖关系

~10MB
~232K SLoC