lettre是rust的电子邮件包,可以实现邮件收发等管理功能。今天我们就使用它来实现一个简单的邮件发送功能。
安装依赖
首先在Cargo.toml文件下新增依赖lettre,lettre-email
ini代码解读复制代码[package] .... [dependencies] lettre = "0.9" lettre_email = "0.9"
新增依赖后,在第一次运行时项目时会自动安装对应依赖,如果下载速度过慢,可参考以下方法更改默认镜像地址。
在当前用户工作目录的.cargo文件夹下新建config.toml,此处我们使用科大的镜像地址,配置文件内容如下:
关于用户工作目录:
Windows系统一般位于:c:/用户/你的用户名/.cargo,Linux位于/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邮箱授权码申请
- 首先使用网页登录
qq邮箱,登陆后点击左上角的设置按钮,打开邮箱设置界面,找到POP3/IMAP/SMTP/...服务,点击管理服务,跳转到账号与安全界面。
- 点击安全设置,找到
POP3/IMAP/SMTP...服务,开启服务并点击生成授权码,然后按照系统提示扫描或者发送短信验证身份后即可。
- 获取授权码后,将授权码赋值给
main函数的password变量即可
运行结果
一起准备就绪后,在命令行中运行cargo run,提示Email Sent OK字样即表示邮件发送成功。
相关链接
lettre:crates.io/crates/lett…
解释代码