rust 发送邮件的实现方法与示例代码

最近在学Rust,想实现一个发送邮件的功能,但不太清楚具体该怎么操作。请问在Rust中发送邮件有哪些常用的库?能否提供一个简单的示例代码展示如何通过SMTP发送带附件的邮件?最好能包含服务器配置、认证和错误处理等完整流程。听说lettre这个库不错,但官方文档看得有点迷糊,有没有更接地气的实现方案?

2 回复

使用 lettre 库发送邮件:

use lettre::{Message, SmtpTransport, Transport};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let email = Message::builder()
        .from("发件人 <from@example.com>".parse()?)
        .to("收件人 <to@example.com>".parse()?)
        .subject("测试邮件")
        .body("邮件内容".to_string())?;

    let mailer = SmtpTransport::relay("smtp.example.com")?
        .credentials(lettre::transport::smtp::authentication::Credentials::new(
            "用户名".to_string(),
            "密码".to_string(),
        ))
        .build();

    mailer.send(&email)?;
    Ok(())
}

需要添加依赖:lettre = "0.10"


在 Rust 中发送邮件可以通过 lettre 库实现,它提供了 SMTP 发送功能。以下是实现步骤和示例代码:

实现步骤

  1. 添加依赖:在 Cargo.toml 中添加 lettretokio(异步支持)。
  2. 配置 SMTP:使用 Gmail、QQ 邮箱等服务的 SMTP 服务器。
  3. 创建邮件:设置发件人、收件人、主题和正文。
  4. 发送邮件:通过 SMTP 传输,需处理认证(如密码或应用专用密码)。

示例代码

use lettre::{transport::smtp::authentication::Credentials, Message, SmtpTransport, Transport};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 创建邮件
    let email = Message::builder()
        .from("发件人 <your_email@gmail.com>".parse()?)
        .to("收件人 <recipient@example.com>".parse()?)
        .subject("Rust 邮件测试")
        .body("你好,这是通过 Rust 发送的邮件!".to_string())?;

    // SMTP 配置(以 Gmail 为例)
    let creds = Credentials::new("your_email@gmail.com".to_string(), "your_app_password".to_string());
    
    let mailer = SmtpTransport::relay("smtp.gmail.com")?
        .credentials(creds)
        .build();

    // 发送邮件
    match mailer.send(&email) {
        Ok(_) => println!("邮件发送成功!"),
        Err(e) => eprintln!("发送失败: {:?}", e),
    }

    Ok(())
}

注意事项

  • 安全:Gmail 等需启用“两步验证”并生成应用专用密码,不要直接使用登录密码。
  • 异步支持:如需异步操作,可使用 lettre 的异步版本(如 async-smtp)。
  • 错误处理:代码中使用了 ? 简化错误,实际中可根据需求细化处理。

通过以上代码,即可在 Rust 中实现邮件发送功能。

回到顶部