19 个版本

0.4.9 2024 年 7 月 3 日
0.4.7 2024 年 3 月 5 日
0.4.6 2023 年 12 月 30 日
0.4.1 2023 年 10 月 3 日
0.2.0 2022 年 5 月 31 日

#68电子邮件

Download history 1014/week @ 2024-05-02 1169/week @ 2024-05-09 1319/week @ 2024-05-16 1207/week @ 2024-05-23 1513/week @ 2024-05-30 1082/week @ 2024-06-06 1283/week @ 2024-06-13 1305/week @ 2024-06-20 1686/week @ 2024-06-27 1332/week @ 2024-07-04 942/week @ 2024-07-11 803/week @ 2024-07-18 1842/week @ 2024-07-25 1243/week @ 2024-08-01 1157/week @ 2024-08-08 1135/week @ 2024-08-15

5,559 每月下载量
用于 10 个crate(直接使用6个)

Apache-2.0 OR MIT

74KB
1.5K SLoC

mail-send

crates.io build docs.rs crates.io

mail-send 是一个Rust库,用于通过SMTP构建、签名和发送电子邮件消息。它包括以下功能

  • 生成符合互联网消息格式标准(RFC 5322)的电子邮件消息。
  • 完全支持 MIMERFC 2045 - 2049),并为每个消息体部分自动选择最优质的编码。
  • 域名密钥识别邮件(DKIM)签名(RFC 6376),支持ED25519-SHA256、RSA-SHA256和RSA-SHA1。
  • 简单邮件传输协议(SMTPRFC 5321)交付。
  • 通过 TLS 的安全SMTP服务扩展(RFC 3207)。
  • 认证的SMTP服务扩展(RFC 4954),具有自动机制协商(从最安全到最不安全)。
    • CRAM-MD5(《RFC 2195》;已过时但仍然支持)
    • DIGEST-MD5(《RFC 2831》;过时但仍然支持)
    • XOAUTH2(谷歌专有)
    • LOGIN
    • PLAIN
  • 完整的异步(需要Tokio)。

使用示例

通过需要认证的SMTP服务器发送消息

    // Build a simple multipart message
    let message = MessageBuilder::new()
        .from(("John Doe", "[email protected]"))
        .to(vec![
            ("Jane Doe", "[email protected]"),
            ("James Smith", "[email protected]"),
        ])
        .subject("Hi!")
        .html_body("<h1>Hello, world!</h1>")
        .text_body("Hello world!");

    // Connect to the SMTP submissions port, upgrade to TLS and
    // authenticate using the provided credentials.
    SmtpClientBuilder::new("smtp.gmail.com", 587)
        .implicit_tls(false)
        .credentials(("john", "p4ssw0rd"))
        .connect()
        .await
        .unwrap()
        .send(message)
        .await
        .unwrap();

使用DKIM签名消息并通过SMTP中继服务器发送

    // Build a simple text message with a single attachment
    let message = MessageBuilder::new()
        .from(("John Doe", "[email protected]"))
        .to("[email protected]")
        .subject("Howdy!")
        .text_body("These pretzels are making me thirsty.")
        .attachment("image/png", "pretzels.png", [1, 2, 3, 4].as_ref());

    // Sign an e-mail message using RSA-SHA256
    let pk_rsa = RsaKey::<Sha256>::from_rsa_pem(TEST_KEY).unwrap();
    let signer = DkimSigner::from_key(pk_rsa)
        .domain("example.com")
        .selector("default")
        .headers(["From", "To", "Subject"])
        .expiration(60 * 60 * 7); // Number of seconds before this signature expires (optional)

    // Connect to an SMTP relay server over TLS.
    // Signs each message with the configured DKIM signer.
    SmtpClientBuilder::new("smtp.gmail.com", 465)
        .connect()
        .await
        .unwrap()
        .send_signed(message, &signer)
        .await
        .unwrap();

有关如何构建消息的更多示例,请参阅 mail-builder crate。请注意,此库不支持解析电子邮件消息,因为此功能由 mail-parser crate 分别提供。

测试

要运行测试套件

 $ cargo test --all-features

或,要使用 MIRI 运行测试套件

 $ cargo +nightly miri test --all-features

许可证

许可以下之一

由您选择。

版权(C)2020-2022,Stalwart Labs Ltd.

依赖项

~11–39MB
~807K SLoC