3 个版本
0.4.8 | 2024年1月6日 |
---|---|
0.4.7 | 2024年1月6日 |
0.4.6 | 2024年1月6日 |
#9 in #dkim
93 每月下载量
在 3 个包中使用 (通过 xsmtp)
71KB
1.5K SLoC
mail-send
mail-send 是一个 Rust 库,用于通过 SMTP 构建、签名和发送电子邮件。它包括以下功能
- 生成符合 Internet Message Format 标准的电子邮件消息 (RFC 5322)。
- 完全支持 MIME (RFC 2045 - 2049),并为每个消息体部分自动选择最合适的编码。
- DomainKeys Identified Mail (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 (Google 独家)
- 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
包。请注意,此库不支持解析电子邮件消息,因为此功能由单独的 mail-parser
包提供。
测试
要运行测试套件
$ cargo test --all-features
或,要使用 MIRI 运行测试套件
$ cargo +nightly miri test --all-features
许可证
根据以下任一许可证授权
- Apache 许可证,版本 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
版权
版权 (C) 2020-2022,Stalwart Labs Ltd.
依赖项
~11–23MB
~408K SLoC