前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Rust每周一库】lettre - 功能强大的邮件库

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

作者头像
MikeLoveRust
发布2019-12-25 17:16:28
8990
发布2019-12-25 17:16:28
举报

本期每周一库来介绍一个和发送邮件相关的库,库的名字使用了法语的信笺(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的工程

代码语言:javascript
复制
cargo new hello-lettre

使用VsCode打开工程

代码语言:javascript
复制
code hello-lettre

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

代码语言:javascript
复制
[dependencies]
lettre = "0.9"
lettre_email = "0.9"
mime = "0.3.13"

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

代码语言:javascript
复制
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版本的程序

代码语言:javascript
复制
cargo build

执行编译好的程序

代码语言:javascript
复制
target\debug\hello-lettre.exe

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 接下来我们基于lettre实现一个简单的邮件发送程序
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档