Struct lettre::transport::smtp::AsyncSmtpTransport
source · pub struct AsyncSmtpTransport<E: Executor> { /* private fields */ }
smtp-transport
only.Expand description
Asynchronously sends emails using the SMTP protocol
Implementations§
source§impl<E> AsyncSmtpTransport<E>where
E: Executor,
impl<E> AsyncSmtpTransport<E>where
E: Executor,
sourcepub fn relay(relay: &str) -> Result<AsyncSmtpTransportBuilder, Error>
Available on crate features tokio1-native-tls
or tokio1-rustls-tls
or async-std1-rustls-tls
only.
pub fn relay(relay: &str) -> Result<AsyncSmtpTransportBuilder, Error>
tokio1-native-tls
or tokio1-rustls-tls
or async-std1-rustls-tls
only.Simple and secure transport, using TLS connections to communicate with the SMTP server
The right option for most SMTP servers.
Creates an encrypted transport over submissions port, using the provided domain to validate TLS certificates.
sourcepub fn starttls_relay(relay: &str) -> Result<AsyncSmtpTransportBuilder, Error>
Available on crate features tokio1-native-tls
or tokio1-rustls-tls
or async-std1-rustls-tls
only.
pub fn starttls_relay(relay: &str) -> Result<AsyncSmtpTransportBuilder, Error>
tokio1-native-tls
or tokio1-rustls-tls
or async-std1-rustls-tls
only.Simple and secure transport, using STARTTLS to obtain encrypted connections
Alternative to AsyncSmtpTransport::relay
, for SMTP servers
that don’t take SMTPS connections.
Creates an encrypted transport over submissions port, by first connecting using an unencrypted connection and then upgrading it with STARTTLS. The provided domain is used to validate TLS certificates.
An error is returned if the connection can’t be upgraded. No credentials or emails will be sent to the server, protecting from downgrade attacks.
sourcepub fn unencrypted_localhost() -> AsyncSmtpTransport<E>
pub fn unencrypted_localhost() -> AsyncSmtpTransport<E>
Creates a new local SMTP client to port 25
Shortcut for local unencrypted relay (typical local email daemon that will handle relaying)
sourcepub fn builder_dangerous<T: Into<String>>(
server: T
) -> AsyncSmtpTransportBuilder
pub fn builder_dangerous<T: Into<String>>( server: T ) -> AsyncSmtpTransportBuilder
Creates a new SMTP client
Defaults are:
- No authentication
- No TLS
- A 60-seconds timeout for smtp commands
- Port 25
Consider using AsyncSmtpTransport::relay
or
AsyncSmtpTransport::starttls_relay
instead,
if possible.
sourcepub fn from_url(
connection_url: &str
) -> Result<AsyncSmtpTransportBuilder, Error>
Available on crate features native-tls
or rustls-tls
or boring-tls
only.
pub fn from_url( connection_url: &str ) -> Result<AsyncSmtpTransportBuilder, Error>
native-tls
or rustls-tls
or boring-tls
only.Creates a AsyncSmtpTransportBuilder
from a connection URL
The protocol, credentials, host and port can be provided in a single URL.
Use the scheme smtp
for an unencrypted relay (optionally in combination with the
tls
parameter to allow/require STARTTLS) or smtps
for SMTP over TLS.
The path section of the url can be used to set an alternative name for
the HELO / EHLO command.
For example smtps://username:password@smtp.example.com/client.example.com:465
will set the HELO / EHLO name client.example.com
.
scheme | tls parameter | example | remarks |
---|---|---|---|
smtps | - | smtps://smtp.example.com | SMTP over TLS, recommended method |
smtp | required | smtp://smtp.example.com?tls=required | SMTP with STARTTLS required, when SMTP over TLS is not available |
smtp | opportunistic | smtp://smtp.example.com?tls=opportunistic | SMTP with optionally STARTTLS when supported by the server. Caution: this method is vulnerable to a man-in-the-middle attack. Not recommended for production use. |
smtp | - | smtp://smtp.example.com | Unencrypted SMTP, not recommended for production use. |
use lettre::{
message::header::ContentType, transport::smtp::authentication::Credentials,
AsyncSmtpTransport, AsyncTransport, Message, Tokio1Executor,
};
let email = Message::builder()
.from("NoBody <nobody@domain.tld>".parse().unwrap())
.reply_to("Yuin <yuin@domain.tld>".parse().unwrap())
.to("Hei <hei@domain.tld>".parse().unwrap())
.subject("Happy new year")
.header(ContentType::TEXT_PLAIN)
.body(String::from("Be happy!"))
.unwrap();
// Open a remote connection to gmail
let mailer: AsyncSmtpTransport<Tokio1Executor> =
AsyncSmtpTransport::<Tokio1Executor>::from_url(
"smtps://username:password@smtp.example.com:465",
)
.unwrap()
.build();
// Send the email
match mailer.send(email).await {
Ok(_) => println!("Email sent successfully!"),
Err(e) => panic!("Could not send email: {e:?}"),
}
sourcepub async fn test_connection(&self) -> Result<bool, Error>
pub async fn test_connection(&self) -> Result<bool, Error>
Tests the SMTP connection
test_connection()
tests the connection by using the SMTP NOOP command.
The connection is closed afterward if a connection pool is not used.
Trait Implementations§
source§impl AsyncTransport for AsyncSmtpTransport<AsyncStd1Executor>
impl AsyncTransport for AsyncSmtpTransport<AsyncStd1Executor>
source§fn send_raw<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
envelope: &'life1 Envelope,
email: &'life2 [u8]
) -> Pin<Box<dyn Future<Output = Result<Self::Ok, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Available on crate features tokio1
or async-std1
only.
fn send_raw<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
envelope: &'life1 Envelope,
email: &'life2 [u8]
) -> Pin<Box<dyn Future<Output = Result<Self::Ok, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
tokio1
or async-std1
only.Sends an email
§type Ok = Response
type Ok = Response
tokio1
or async-std1
only.§type Error = Error
type Error = Error
tokio1
or async-std1
only.source§fn send<'life0, 'async_trait>(
&'life0 self,
message: Message
) -> Pin<Box<dyn Future<Output = Result<Self::Ok, Self::Error>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
fn send<'life0, 'async_trait>(
&'life0 self,
message: Message
) -> Pin<Box<dyn Future<Output = Result<Self::Ok, Self::Error>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
tokio1
or async-std1
) and crate feature builder
only.source§impl AsyncTransport for AsyncSmtpTransport<Tokio1Executor>
impl AsyncTransport for AsyncSmtpTransport<Tokio1Executor>
source§fn send_raw<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
envelope: &'life1 Envelope,
email: &'life2 [u8]
) -> Pin<Box<dyn Future<Output = Result<Self::Ok, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Available on crate features tokio1
or async-std1
only.
fn send_raw<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
envelope: &'life1 Envelope,
email: &'life2 [u8]
) -> Pin<Box<dyn Future<Output = Result<Self::Ok, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
tokio1
or async-std1
only.Sends an email
§type Ok = Response
type Ok = Response
tokio1
or async-std1
only.§type Error = Error
type Error = Error
tokio1
or async-std1
only.source§fn send<'life0, 'async_trait>(
&'life0 self,
message: Message
) -> Pin<Box<dyn Future<Output = Result<Self::Ok, Self::Error>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
fn send<'life0, 'async_trait>(
&'life0 self,
message: Message
) -> Pin<Box<dyn Future<Output = Result<Self::Ok, Self::Error>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
tokio1
or async-std1
) and crate feature builder
only.