Enum Tls

Source
pub enum Tls {
    None,
    Opportunistic(TlsParameters),
    Required(TlsParameters),
    Wrapper(TlsParameters),
}
Expand description

Specifies how to establish a TLS connection

TLDR: Use Tls::Wrapper or Tls::Required when connecting to a remote server, Tls::None when connecting to a local server.

Variants§

§

None

Insecure (plaintext) connection only.

This option always uses a plaintext connection and should only be used for trusted local relays. It is highly discouraged for remote servers, as it exposes credentials and emails to potential interception.

Note: Servers requiring credentials or emails to be sent over TLS may reject connections when this option is used.

§

Opportunistic(TlsParameters)

Begin with a plaintext connection and attempt to use STARTTLS if available.

lettre will try to upgrade to a TLS-secured connection but will fall back to plaintext if the server does not support TLS. This option is provided for compatibility but is strongly discouraged, as it exposes connections to potential MITM (man-in-the-middle) attacks.

Warning: A malicious intermediary could intercept the STARTTLS flag, causing lettre to believe the server only supports plaintext connections.

§

Required(TlsParameters)

Begin with a plaintext connection and require STARTTLS for security.

lettre will upgrade plaintext TCP connections to TLS before transmitting any sensitive data. If the server does not support TLS, the connection attempt will fail, ensuring no credentials or emails are sent in plaintext.

Unlike Tls::Opportunistic, this option is secure against MITM attacks. For optimal security and performance, consider using Tls::Wrapper instead, as it requires fewer roundtrips to establish a secure connection.

§

Wrapper(TlsParameters)

Establish a connection wrapped in TLS from the start.

lettre connects to the server and immediately performs a TLS handshake. If the handshake fails, the connection attempt is aborted without transmitting any sensitive data.

This is the fastest and most secure option for establishing a connection.

Trait Implementations§

Source§

impl Clone for Tls

Source§

fn clone(&self) -> Tls

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 Tls

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Tls

§

impl RefUnwindSafe for Tls

§

impl Send for Tls

§

impl Sync for Tls

§

impl Unpin for Tls

§

impl UnwindSafe for Tls

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

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

Source§

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, 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

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

Source§

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

Source§

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

Source§

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<T> ErasedDestructor for T
where T: 'static,

Source§

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