lettre
是rust
的电子邮件包,可以实现邮件收发等管理功能。今天我们就使用它来实现一个简单的邮件发送功能。
安装依赖
首先在Cargo.toml
文件下新增依赖lettre
,lettre-email
[package]
....
[dependencies]
lettre = "0.9"
lettre_email = "0.9"
新增依赖后,在第一次运行时项目时会自动安装对应依赖,如果下载速度过慢,可参考以下方法更改默认镜像地址。
在当前用户工作目录
的.cargo
文件夹下新建config.toml
,此处我们使用科大的镜像地址,配置文件内容如下:
关于用户工作目录:
Windows
系统一般位于:c:/用户/你的用户名/.cargo
,Linux
位于/home/你的用户名/.cargo
[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
配置完成后,再次运行rust项目时,则会自动下载并配置资源,如下图所示。如未生效,请重启电脑后重试。
实现代码
在main.rs
文件导入lettre
的相关相关资源,代码如下:
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
函数的代码如下:
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…