42 个版本

0.15.0 2024 年 4 月 29 日
0.14.1 2024 年 1 月 17 日
0.14.0 2022 年 12 月 6 日
0.13.8 2022 年 1 月 24 日
0.2.0 2016 年 6 月 22 日

#2 in 邮件

Download history 22343/week @ 2024-05-01 21366/week @ 2024-05-08 19962/week @ 2024-05-15 18643/week @ 2024-05-22 22705/week @ 2024-05-29 19155/week @ 2024-06-05 19137/week @ 2024-06-12 16543/week @ 2024-06-19 21011/week @ 2024-06-26 19138/week @ 2024-07-03 18690/week @ 2024-07-10 22910/week @ 2024-07-17 27136/week @ 2024-07-24 29276/week @ 2024-07-31 30087/week @ 2024-08-07 27547/week @ 2024-08-14

118,412 每月下载量
79 个 Crates 中使用 (50 直接)

0BSD 许可证

170KB
3K SLoC

mailparse

Build Status Crate

简单的 MIME 邮件消息解析器。

API

本库的主要入口点是以下函数

    parse_mail(&[u8]) -> Result<ParsedMail, MailParseError>

此函数接受原始消息数据,包括头和正文,并返回一个结构化对象,以便更轻松地访问邮件消息的各个部分。还有其他公共函数可以解析消息的较小部分;请参阅完整文档

该库旨在处理现实世界的电子邮件数据,例如通过在 IMAP 服务器上使用 FETCH 命令或 Maildir 获取的数据。因此,该库应能够成功处理任何有效的 MIME 格式化消息,尽管它可能不会遵循覆盖格式的各个规范中的所有严格要求(主要是 IETF RFC 822、2045、2047、2822 和 5322)。例如,此库接受使用 \n(ASCII LF)作为行分隔符的原始消息数据,而不是 RFC 规定的 \r\n(ASCII CRLF)行分隔符。

示例用法

    use mailparse::*;
    let parsed = parse_mail(concat!(
            "Subject: This is a test email\n",
            "Content-Type: multipart/alternative; boundary=foobar\n",
            "Date: Sun, 02 Oct 2016 07:06:22 -0700 (PDT)\n",
            "\n",
            "--foobar\n",
            "Content-Type: text/plain; charset=utf-8\n",
            "Content-Transfer-Encoding: quoted-printable\n",
            "\n",
            "This is the plaintext version, in utf-8. Proof by Euro: =E2=82=AC\n",
            "--foobar\n",
            "Content-Type: text/html\n",
            "Content-Transfer-Encoding: base64\n",
            "\n",
            "PGh0bWw+PGJvZHk+VGhpcyBpcyB0aGUgPGI+SFRNTDwvYj4gdmVyc2lvbiwgaW4g \n",
            "dXMtYXNjaWkuIFByb29mIGJ5IEV1cm86ICZldXJvOzwvYm9keT48L2h0bWw+Cg== \n",
            "--foobar--\n",
            "After the final boundary stuff gets ignored.\n").as_bytes())
        .unwrap();
    assert_eq!(parsed.headers.get_first_value("Subject"),
        Some("This is a test email".to_string()));
    assert_eq!(parsed.subparts.len(), 2);
    assert_eq!(parsed.subparts[0].get_body().unwrap(),
        "This is the plaintext version, in utf-8. Proof by Euro: \u{20AC}");
    assert_eq!(parsed.subparts[1].headers[1].get_value(), "base64");
    assert_eq!(parsed.subparts[1].ctype.mimetype, "text/html");
    assert!(parsed.subparts[1].get_body().unwrap().starts_with("<html>"));
    assert_eq!(dateparse(parsed.headers.get_first_value("Date").unwrap().as_str()).unwrap(), 1475417182);

文档

请参阅docs.rs中的rustdoc。

MSRV 政策

目前支持的最小 Rust 版本(MSRV)是 1.51.0。MSRV 的增加将保持在最低限度,并且将始终伴随次要版本号的增加。

支持 mailparse

如果您想支持 mailparse 的开发,请通过向对抗气候变化捐赠您的金钱、时间和/或精力来支持。一种快速简便的方式是向Replant.ca Environmental 捐赠,那里每捐款一美元就种植一棵树!

依赖项

~3.5MB
~125K SLoC