| Crates.io | spring-mail |
| lib.rs | spring-mail |
| version | 0.4.1 |
| created_at | 2024-08-09 09:47:52.387533+00 |
| updated_at | 2025-07-20 15:19:02.34132+00 |
| description | Integrate lettre into spring-rs to send emails |
| homepage | |
| repository | https://github.com/spring-rs/spring-rs |
| max_upload_size | |
| id | 1330651 |
| size | 64,446 |
spring-mail = { version = "<version>" }
[mail]
host = "smtp.gmail.com" # SMTP mail server address,
port = 465 # SMTP server port number
secure = true # Enable TLS
auth = { user = "user@gmail.com", password = "passwd" } # Authentication information
test_connection = false # Whether to test mail server connection on startup
After configuring the above configuration items, the plugin will automatically register a MailerSTMP asynchronous client. This object is an alias of lettre::AsyncSmtpTransport<Tokio1Executor>.
pub type Mailer = lettre::AsyncSmtpTransport<Tokio1Executor>;
The MailPlugin plugin automatically registers an SMTP client for us. We can use Component to extract this connection pool from AppState. Component is an 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))
}
For the complete code, please refer to mail-example