0
点赞
收藏
分享

微信扫一扫

【Rust每周一库】lettre - 功能强大的邮件库

本期每周一库来介绍一个和发送邮件相关的库,库的名字使用了法语的信笺(​​lettre​​)作为名字。

发送邮件是现在Web App常见的功能。常用于通过收发验证码来验证账号或者执行账号高权限操作的时候,例如抗击羊毛党的注册,修改密码的二次验证等;还可以作为订阅广告推送给用户定时发送订阅内容。

那么这时候发送邮件的功能就必不可少了,虽然现在有很多的serverless方案中集成了邮件验证,手机验证等。但是对于小型项目,集成的serverless身份验证全家桶开发方案会显得杀鸡用牛刀。另外一方面,天下没有免费的云,发送邮件的费用也是一笔不小的开支。拿大名鼎鼎的MailChimp举例,想要给用户发送推广邮件,需要购买昂贵的点数来付费。

说到这里,我们步入正题,用Rust实现邮件发送功能!

lettre的Github:lettre is a mailer library for Rust.
lettre的网站:lettre.at

Github上对库的特性进行了简单的说明:

  • 多种传输方式
  • 支持Unicode
  • 使用了SMTP安全传输
  • 易于使用

lettre的文档十分简单,介绍了lettre的功能,模块,结构,枚举等

接下来我们基于lettre实现一个简单的邮件发送程序

  • 开发环境是Windows 10
  • cargo脚手架
  • 使用的邮件账户是Gmail账户。

使用Gmail邮箱账户发送邮件的时候需要注意两点

  • 确保Gmail账户已经开启了多重验证
  • 生成应用专用密码用于程序中登陆Gmail账号的密码

之所以要使用应用专用密码,是因为直接使用Gmail账号密码写入到程序中,Gmail会提示应用不安全,导致无法发送邮件。

接下来我们创建工程开始吧

使用cargo创建一个名为​​hello-lettre​​的工程

cargo new hello-lettre

使用VsCode打开工程

code hello-lettre

在​​Cargo.toml​​​文件的​​[dependencies]​​标签下添加lettre的引用,由于lettre的Github中的Readme更新不及时,需要参考lettre.at中的引用写法:

[dependencies]
lettre = "0.9"
lettre_email = "0.9"
mime = "0.3.13"

打开​​src/main.rs​​文件,写入lettre库Github中的示例代码

extern crate lettre;
extern crate lettre_email;
extern crate mime;

use lettre_email::Email;
use lettre::smtp::authentication::Credentials;
use lettre::{SmtpClient, Transport};

fn main() {

let email_receiver = "YOUR_TARGET_EMAIL";
let mine_email = "YOUR_GMAIL_ADDRESS";
let smtp_server = "smtp.gmail.com";
let password = "YOUR_GMAIL_APPLICATION_PASSWORD"; //需要生成应用专用密码

let email = Email::builder()
.to(email_receiver)
.from(mine_email)
.subject("subject")
.html("<h1>Hi there</h1>")
.text("Message send by lettre Rust")
.build()
.unwrap();

let creds = Credentials::new(
mine_email.to_string(),
password.to_string(),
);

// Open connection to Gmail
let mut mailer = SmtpClient::new_simple(smtp_server)
.unwrap()
.credentials(creds)
.transport();

// Send the email
let result = mailer.send(email.into());

if result.is_ok() {
println!("Email sent");
} else {
println!("Could not send email: {:?}", result);
}

print!("{:?}", result);
mailer.close();
}

编译Debug版本的程序

cargo build

执行编译好的程序

target\debug\hello-lettre.exe

会在termial中看到执行结果如下:

【Rust每周一库】lettre - 功能强大的邮件库_邮件发送

最后给大家留一个思考内容,如果想在发送的邮件中添加附件,该如何修改程序来实现呢?

这就是本周的每周一库内容,使用lettre库发送邮件,是不是看起来更简单


举报

相关推荐

0 条评论