diff --git a/lettre_email/src/lib.rs b/lettre_email/src/lib.rs index 9a6503a..17255ad 100644 --- a/lettre_email/src/lib.rs +++ b/lettre_email/src/lib.rs @@ -106,6 +106,14 @@ impl IntoEmail for SimpleEmail { builder.set_subject(self.subject.unwrap()); } + if self.in_reply_to.is_some() { + builder.add_in_reply_to(self.in_reply_to.unwrap().into_mailbox()); + } + + if self.reference.is_some() { + builder.add_reference(self.reference.unwrap().into_mailbox()); + } + // No date for now match (self.text, self.html) { @@ -131,6 +139,8 @@ pub struct SimpleEmail { cc: Vec, bcc: Vec, reply_to: Option, + in_reply_to: Option, + reference: Option, subject: Option, date: Option, html: Option, @@ -184,6 +194,18 @@ impl SimpleEmail { self.cc.push(address.into_mailbox()); } + /// Adds a `In-Reply-To` to the header + pub fn in_reply_to(mut self, address: A) -> SimpleEmail { + self.in_reply_to = Some(address.into_mailbox()); + self + } + + /// Adds a `Reference` to the header + pub fn reference(mut self, address: A) -> SimpleEmail { + self.reference = Some(address.into_mailbox()); + self + } + /// Adds a `Bcc` header and stores the recipient address pub fn bcc(mut self, address: A) -> SimpleEmail { self.add_bcc(address); @@ -296,6 +318,10 @@ pub struct EmailBuilder { envelope: Option, /// Date issued date_issued: bool, + /// Reference Header + reference_header: Vec
, + /// In-Reply-To Header + in_reply_to_header: Vec
} /// Simple email representation @@ -392,6 +418,8 @@ impl EmailBuilder { sender_header: None, envelope: None, date_issued: false, + reference_header: vec![], + in_reply_to_header: vec![] } } @@ -471,6 +499,28 @@ impl EmailBuilder { self } + /// Adds a `In-Reply-To` header + pub fn add_in_reply_to(&mut self, address: A) { + self.in_reply_to_header.push(Address::Mailbox(address.into_mailbox())); + } + + /// Adds a `Reference` header + pub fn add_reference(&mut self, address: A) { + self.reference_header.push(Address::Mailbox(address.into_mailbox())); + } + + /// Adds a `In-Reply-To` header + pub fn in_reply_to(mut self, address: A) -> EmailBuilder { + self.add_in_reply_to(address); + self + } + + /// Adds a `Reference` header + pub fn reference(mut self, address: A) -> EmailBuilder { + self.add_reference(address); + self + } + /// Adds a `Reply-To` header pub fn add_reply_to(&mut self, address: A) { let mailbox = address.into_mailbox(); @@ -779,6 +829,18 @@ impl EmailBuilder { ); } + if !self.reference_header.is_empty() { + self.message.add_header( + Header::new_with_value("Reference".into(), self.reference_header).unwrap(), + ); + } + + if !self.in_reply_to_header.is_empty() { + self.message.add_header( + Header::new_with_value("In-Reply-To".into(), self.in_reply_to_header).unwrap(), + ); + } + if !self.date_issued { self.message .add_header(("Date", Tm::rfc822z(&now()).to_string().as_ref()));