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 在 电子邮件
5,559 每月下载量
用于 10 个crate(直接使用6个)
74KB
1.5K SLoC
mail-send
mail-send 是一个Rust库,用于通过SMTP构建、签名和发送电子邮件消息。它包括以下功能
- 生成符合互联网消息格式标准(RFC 5322)的电子邮件消息。
- 完全支持 MIME(RFC 2045 - 2049),并为每个消息体部分自动选择最优质的编码。
- 域名密钥识别邮件(DKIM)签名(RFC 6376),支持ED25519-SHA256、RSA-SHA256和RSA-SHA1。
- 简单邮件传输协议(SMTP;RFC 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
许可证
许可以下之一
- Apache License,版本 2.0(《LICENSE-APACHE》或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(《LICENSE-MIT》或 http://opensource.org/licenses/MIT》)
由您选择。
版权
版权(C)2020-2022,Stalwart Labs Ltd.
依赖项
~11–39MB
~807K SLoC