11 releases

new 0.2.2 Nov 23, 2024
0.2.1 Oct 6, 2024
0.2.0 Sep 28, 2024
0.1.2 Sep 16, 2024
0.0.7 Aug 21, 2024

#13 in #spring

Download history 65/week @ 2024-08-03 41/week @ 2024-08-10 268/week @ 2024-08-17 14/week @ 2024-08-24 271/week @ 2024-08-31 308/week @ 2024-09-07 252/week @ 2024-09-14 21/week @ 2024-09-21 196/week @ 2024-09-28 160/week @ 2024-10-05 13/week @ 2024-10-12

1,236 downloads per month

MIT license

64KB
1K SLoC

crates.io Documentation

Dependencies

spring-mail = { version = "<version>" }

Configuration items

[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

Components

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>;

Extract the Component registered by the plugin

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

Dependencies

~15–47MB
~718K SLoC