rust:使用lettre库实现邮件发送

lettrerust的电子邮件包,可以实现邮件收发等管理功能。今天我们就使用它来实现一个简单的邮件发送功能。

安装依赖

首先在Cargo.toml文件下新增依赖lettre,lettre-email

ini 复制代码
[package]
....
​
[dependencies]
lettre = "0.9"
lettre_email = "0.9"

新增依赖后,在第一次运行时项目时会自动安装对应依赖,如果下载速度过慢,可参考以下方法更改默认镜像地址。

当前用户工作目录.cargo文件夹下新建config.toml,此处我们使用科大的镜像地址,配置文件内容如下:

关于用户工作目录:Windows系统一般位于:c:/用户/你的用户名/.cargoLinux位于/home/你的用户名/.cargo

ini 复制代码
[source.crates-io]
replace-with = 'ustc'
​
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
​

配置完成后,再次运行rust项目时,则会自动下载并配置资源,如下图所示。如未生效,请重启电脑后重试。

实现代码

main.rs文件导入lettre的相关相关资源,代码如下:

rust 复制代码
extern crate lettre;
extern crate lettre_email;
​
use lettre_email::Email;
use lettre::smtp::authentication::Credentials;
use lettre::{SmtpClient,Transport};

此处以使用qq邮箱的smtp服务发送邮件为例,smtp地址为smtp.qq.com,需要注意的是,在设置发件邮箱密码时,请使用授权码,而不是真实邮箱密码。qq邮箱授权码申请见下文说明。最终main函数的代码如下:

ini 复制代码
fn main() {
    // 收件人邮箱
    let email_receiver= "123@outlook.com";
    // 发件人邮箱
    let mine_email ="123@qq.com";
    // 服务器host
    let smtp_server="smtp.qq.com";
    // 请使用授权码,而不是真实密码
    let password="xxxxxx";
​
    let email=Email::builder()
    .to(email_receiver)
    .from(mine_email)
    .subject("email from rust")
    .text("This is a test email from lettre")
    .build()
    .unwrap();
​
    let creds = Credentials::new (
            mine_email.to_string(),
            password.to_string()
        );
​
        let mut mailer=SmtpClient::new_simple(smtp_server)
        .unwrap()
        .credentials(creds)
        .transport();
​
    let result = mailer.send(email.into());
    if result.is_ok(){
        println!("Email sent");
    }else {
        println!("Could not send email: {:?}",result);
    }
    print!("{:?}",result);
    mailer.close();
}

qq邮箱授权码申请

  1. 首先使用网页登录qq邮箱,登陆后点击左上角的设置按钮,打开邮箱设置界面,找到POP3/IMAP/SMTP/...服务,点击管理服务,跳转到账号与安全界面。
  1. 点击安全设置,找到POP3/IMAP/SMTP...服务开启服务并点击生成授权码,然后按照系统提示扫描或者发送短信验证身份后即可。
  1. 获取授权码后,将授权码赋值给main函数的password变量即可

运行结果

一起准备就绪后,在命令行中运行cargo run,提示Email Sent OK字样即表示邮件发送成功。

相关链接

相关推荐
梦帮科技1 小时前
GRAVIS v5.5:向硬核桌面端进化与云端多节点容灾部署实践
windows·架构·rust·自动化·区块链·智能合约·数字货币
程序员爱钓鱼4 小时前
Rust 开发环境安装(Windows|macOS|Linux)
后端·rust
花褪残红青杏小14 小时前
Rust图像处理第12节-图片翻转与旋转:坐标重映射几何变换
rust·webassembly·图形学
CodeStats1 天前
【编程语言】深度梳理C/C++、Java、Python、Go、Rust的区别
java·linux·c语言·c++·python·rust·go
程序员爱钓鱼1 天前
为什么学习 Rust?Rust 能做什么?
后端·rust
米沙AI1 天前
Rust001--08字符串高级操作
rust
独孤留白1 天前
从C到Rust:容器,容器,容器,Index和Iterator这两口糖甜不甜?
rust
小杍随笔1 天前
【Rust全栈项目接入UUID主键实战:从选型到PostgreSQL适配(含v7优化)】
开发语言·postgresql·rust
doiito(Do It Together)2 天前
media_agent 进化之路:把 Gliding Horse 的 Agent 超能力注入 ComfyUI,让图片生成自己“学会”优化
人工智能·架构·rust·knowledge graph
techdashen2 天前
Arborium:把 tree-sitter 语法高亮打包成 Rust 文档生态的基础设施
开发语言·后端·rust