Skip to main content

Message

Struct Message 

Source
#[non_exhaustive]
pub struct Message { pub to: String, pub from: String, pub reply_to: Option<String>, pub subject: String, pub html: String, pub text: String, pub idempotency_key: Option<String>, pub tags: Vec<String>, pub headers: Vec<(String, String)>, }
Expand description

An outbound mail. text is always sent alongside html.

#[non_exhaustive]: build one with Message::new and the builder methods rather than a struct literal. A channel that has to set a header — RFC 8058 one-click unsubscribe, say — should not be a breaking change for every other caller, and before this it was.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§to: String§from: String§reply_to: Option<String>§subject: String§html: String§text: String§idempotency_key: Option<String>

Passed through as an Idempotency-Key where the provider supports it.

§tags: Vec<String>§headers: Vec<(String, String)>

Extra RFC 5322 headers, in order.

For headers the shape of Message does not name and should not: List-Unsubscribe and List-Unsubscribe-Post are the reason this exists, because Gmail and Yahoo have required one-click unsubscribe of bulk senders since 2024. An adapter that cannot send custom headers must say so rather than drop them silently.

Implementations§

Source§

impl Message

Source

pub fn new( to: impl Into<String>, from: impl Into<String>, subject: impl Into<String>, text: impl Into<String>, html: impl Into<String>, ) -> Self

The five parts every mail has. Everything else is a builder method.

Source

pub fn reply_to(self, address: impl Into<String>) -> Self

Where a reply goes, when it is not from.

Source

pub fn idempotency_key(self, key: impl Into<String>) -> Self

The key a provider that supports it uses to collapse a retry.

Source

pub fn tags<I, T>(self, tags: I) -> Self
where I: IntoIterator<Item = T>, T: Into<String>,

Labels for the provider’s own reporting.

Source

pub fn header(self, name: impl Into<String>, value: impl Into<String>) -> Self

One extra RFC 5322 header. Repeatable; order is preserved.

Trait Implementations§

Source§

impl Clone for Message

Source§

fn clone(&self) -> Message

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Message

Source§

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

Formats the value using the given formatter. Read more

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

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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

Source§

type Output = T

Should always be Self
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 = !

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

fn try_from(value: U) -> Result<T, !>

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