Expand description
§mail-send
mail-send is a Rust library to build, sign and send e-mail messages via SMTP. It includes the following features:
- Generatese-mail messages conforming to the Internet Message Format standard (RFC 5322).
- FullMIME support (RFC 2045 - 2049) with automatic selection of the most optimal encoding for each message body part.
- DomainKeys Identified Mail (DKIM) Signatures (RFC 6376) with ED25519-SHA256, RSA-SHA256 and RSA-SHA1 support.
- Simple Mail Transfer Protocol (SMTP;RFC 5321) delivery.
- SMTP Service Extension for Secure SMTP overTLS (RFC 3207).
- SMTP Service Extension for Authentication (RFC 4954) with automatic mechanism negotiation (from most secure to least secure):
- CRAM-MD5 (RFC 2195)
- DIGEST-MD5 (RFC 2831; obsolete but still supported)
- XOAUTH2 (Google proprietary)
- LOGIN
- PLAIN
- Full async (requires Tokio).
§Usage Example
Send a message via an SMTP server that requires authentication:
// Build a simple multipart messageletmessage = MessageBuilder::new() .from(("John Doe","john@example.com")) .to(vec![ ("Jane Doe","jane@example.com"), ("James Smith","james@test.com"), ]) .subject("Hi!") .html_body("<h1>Hello, world!</h1>") .text_body("Hello world!");// Connect to the SMTP submissions port, upgrade to TLS and // authenticate using the provided credentials.SmtpClientBuilder::new("smtp.gmail.com",587) .implicit_tls(false) .credentials(("john","p4ssw0rd")) .connect() .await.unwrap() .send(message) .await.unwrap();
Sign a message with DKIM and send it via an SMTP relay server:
// Build a simple text message with a single attachmentletmessage = MessageBuilder::new() .from(("John Doe","john@example.com")) .to("jane@example.com") .subject("Howdy!") .text_body("These pretzels are making me thirsty.") .attachment("image/png","pretzels.png", [1,2,3,4].as_ref());// Sign an e-mail message using RSA-SHA256letpk_rsa = RsaKey::<Sha256>::from_rsa_pem(TEST_KEY).unwrap();letsigner = DkimSigner::from_key(pk_rsa) .domain("example.com") .selector("default") .headers(["From","To","Subject"]) .expiration(60*60*7);// Number of seconds before this signature expires (optional) // Connect to an SMTP relay server over TLS. // Signs each message with the configured DKIM signer.SmtpClientBuilder::new("smtp.gmail.com",465) .connect() .await.unwrap() .send_signed(message,&signer) .await.unwrap();
More examples of how to build messages are available in themail-builder
crate.Please note that this library does not support parsing e-mail messages as this functionality is provided separately by themail-parser
crate.
§Testing
To run the testsuite:
$ cargo test --all-features
or, to run the testsuite with MIRI:
$ cargo +nightly miri test --all-features
§License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE orhttp://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT orhttp://opensource.org/licenses/MIT)
at your option.
§Copyright
Copyright (C) 2020-2022, Stalwart Labs Ltd.
SeeCOPYING for the license.
Re-exports§
pub usemail_builder;
pub usemail_auth;
Modules§
Structs§
- Smtp
Client - SMTP client builder
- Smtp
Client Builder - SMTP client builder