spring-mail插件
spring-mail是针对lettre的自动装配
lettre是Rust最流行的邮件客户端,并且支持异步API。spring-mail主要使用它的tokio异步API。
依赖
spring-mail = { version = "<version>" }
配置项
[mail]
host = "smtp.gmail.com" # SMTP邮件服务器地址,
port = 465 # SMTP服务器端口号
secure = true # 开启TLS加密
auth = { user = "user@gmail.com", password = "passwd" } # 认证信息
test_connection = false # 启动时是否测试邮件服务器连接
组件
配置完上述配置项后,插件会自动注册一个Mailer
STMP异步客户端。该对象是lettre::AsyncSmtpTransport<Tokio1Executor>
的别名。
pub type Mailer = lettre::AsyncSmtpTransport<Tokio1Executor>;
提取插件注册的Component
MailPlugin
插件为我们自动注册了一个SMTP客户端,我们可以使用Component
从AppState中提取这个连接池,Component
是一个axum的extractor。
async fn send_mail(Component(mailer): Component<Mailer>) -> Result<impl IntoResponse> {
let email = Message::builder()
.from("NoBody <nobody@domain.tld>".parse().unwrap())
.reply_to("Yuin <yuin@domain.tld>".parse().unwrap())
.to("hff1996723@163.com".parse().unwrap())
.subject("Happy new year")
.header(ContentType::TEXT_PLAIN)
.body(String::from("Be happy!"))
.unwrap();
let resp = mailer.send(email).await.context("send mail failed")?;
Ok(Json(resp))
}
完整代码参考mail-example