用 Rust 发送电子邮件:强大的邮件处理工具
Rust 是一种系统编程语言,越来越多地被用于构建可靠且高性能的 Web 服务。其中一项典型任务是发送电子邮件。在本文中,我们将详细讲解 Rust 生态系统中两个关键的电子邮件处理库:lettre(发送)和 mailparse(解析)。您将学习如何配置 SMTP 客户端、发送带附件的邮件以及处理收到的邮件。
lettre 库:通过 SMTP 发送邮件
lettre 是一个现代化的、支持异步和同步操作的库,用于通过 SMTP、SMTP-SSL 和 STARTTLS 发送电子邮件。它支持:
- 发送纯文本和 HTML 邮件
- 附件(图片、文档、压缩包)
- 身份验证(LOGIN、PLAIN、XOAUTH2)
- DKIM 签名和 TLS 加密
- 与 async/await 配合使用(tokio、async-std)
首先,在 Cargo.toml 中添加依赖:
[dependencies]lettre = { version = "0.11", features = ["builder", "smtp-transport", "tokio1-rustls-tls"] }tokio = { version = "1", features = ["full"] }基础示例:发送纯文本邮件
use lettre::transport::smtp::authentication::Credentials;use lettre::{Message, SmtpTransport, Transport};
#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { // 构建邮件 let email = Message::builder() .from("发件人 <sender@example.com>".parse()?) .to("收件人 <recipient@example.com>".parse()?) .subject("来自 Rust 的问候!") .body("这是一封使用 lettre 库发送的测试邮件。".to_string())?;
// 配置 SMTP(Gmail、Yandex、Mail.ru 等) let creds = Credentials::new("sender@example.com".to_string(), "your_password".to_string()); let mailer = SmtpTransport::relay("smtp.gmail.com")? .credentials(creds) .build();
// 发送 match mailer.send(&email) { Ok(_) => println!("邮件发送成功!"), Err(e) => eprintln!("发送错误:{}", e), } Ok(())}发送带附件的 HTML 邮件
要发送包含 HTML 内容和文件的邮件,请使用 MultiPart:
use lettre::message::{header, MultiPart, SinglePart};use lettre::{Message, SmtpTransport, Transport};use std::fs;
let file_content = fs::read("document.pdf")?;let attachment = SinglePart::builder() .header(header::ContentType::parse("application/pdf")?) .header(header::ContentDisposition::attachment("document.pdf")) .body(file_content);
let html_part = SinglePart::builder() .header(header::ContentType::TEXT_HTML) .body(String::from("<h1>你好!</h1><p>这是一封带附件的 HTML 邮件。</p>"));
let email = Message::builder() .from("sender@example.com".parse()?) .to("recipient@example.com".parse()?) .subject("HTML + 附件") .multipart( MultiPart::mixed() .multipart(MultiPart::alternative().singlepart(html_part)) .singlepart(attachment), )?;mailparse 库:解析收到的邮件
mailparse 是一个轻量级库,用于解析 MIME 格式的电子邮件。如果您通过 IMAP/POP3 处理邮件或读取 .eml 文件,它会非常有用。主要功能包括:
- 提取邮件头(From、To、Subject、Date)
- 获取邮件正文(文本/HTML)
- 提取带 MIME 类型的附件
- 解码 Base64 和 Quoted-Printable
示例:读取 .eml 文件
use mailparse::*;
fn main() { let eml_content = std::fs::read("email.eml")