Struct lettre::transport::smtp::SmtpTransport

source ·
pub struct SmtpTransport { /* private fields */ }
Available on crate feature smtp-transport only.
Expand description

Sends emails using the SMTP protocol

Implementations§

source§

impl SmtpTransport

source

pub fn relay(relay: &str) -> Result<SmtpTransportBuilder, Error>

Available on crate features native-tls or rustls-tls or boring-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.

source

pub fn starttls_relay(relay: &str) -> Result<SmtpTransportBuilder, Error>

Available on crate features native-tls or rustls-tls or boring-tls only.

Simple and secure transport, using STARTTLS to obtain encrypted connections

Alternative to SmtpTransport::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.

source

pub fn unencrypted_localhost() -> SmtpTransport

Creates a new local SMTP client to port 25

Shortcut for local unencrypted relay (typical local email daemon that will handle relaying)

source

pub fn builder_dangerous<T: Into<String>>(server: T) -> SmtpTransportBuilder

Creates a new SMTP client

Defaults are:

  • No authentication
  • No TLS
  • A 60-seconds timeout for smtp commands
  • Port 25

Consider using SmtpTransport::relay or SmtpTransport::starttls_relay instead, if possible.

source

pub fn from_url(connection_url: &str) -> Result<SmtpTransportBuilder, Error>

Available on crate features native-tls or rustls-tls or boring-tls only.

Creates a SmtpTransportBuilder 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, Message,
    SmtpTransport, Transport,
};

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 example
let mailer = SmtpTransport::from_url("smtps://username:password@smtp.example.com:465")
    .unwrap()
    .build();

// Send the email
match mailer.send(&email) {
    Ok(_) => println!("Email sent successfully!"),
    Err(e) => panic!("Could not send email: {e:?}"),
}
source

pub 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 Clone for SmtpTransport

source§

fn clone(&self) -> SmtpTransport

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SmtpTransport

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Transport for SmtpTransport

source§

fn send_raw( &self, envelope: &Envelope, email: &[u8] ) -> Result<Self::Ok, Self::Error>

Sends an email

§

type Ok = Response

Response produced by the Transport
§

type Error = Error

Error produced by the Transport
source§

fn send(&self, message: &Message) -> Result<Self::Ok, Self::Error>

Available on crate feature builder only.
Sends the email

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> Chain<T> for T

source§

fn len(&self) -> usize

The number of items that this chain link consists of.
source§

fn append_to(self, v: &mut Vec<T>)

Append the elements in this link to the chain.
source§

impl<T> Container<T> for T
where T: Clone,

§

type Iter = Once<T>

An iterator over the items within this container, by value.
source§

fn get_iter(&self) -> <T as Container<T>>::Iter

Iterate over the elements of the container (using internal iteration because GATs are unstable).
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> OrderedContainer<T> for T
where T: Clone,