From afc23de20f9aa576508c31e9e073a17253d21492 Mon Sep 17 00:00:00 2001 From: Maximb Date: Wed, 23 May 2018 14:22:46 +0000 Subject: [PATCH] Added attach_from_vec function to email builder --- lettre_email/src/lib.rs | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/lettre_email/src/lib.rs b/lettre_email/src/lib.rs index 8bdbdf9..dc07f6e 100644 --- a/lettre_email/src/lib.rs +++ b/lettre_email/src/lib.rs @@ -217,7 +217,7 @@ impl EmailBuilder { self } - /// Adds an attachment to the email + /// Adds an attachment to the email from a file pub fn attachment( self, path: &Path, @@ -266,6 +266,32 @@ impl EmailBuilder { Ok(self.message_type(MimeMultipartType::Mixed).child(content)) } + /// Adds an attachment to the email from a vector of bytes. + /// This is usefull when your attachment is actually not a file, but a sequence of bytes. + pub fn attach_from_vec( + self, + bytes_vec: Vec, + filename: &str, + content_type: &Mime, + ) -> Result { + let body = bytes_vec; + + let actual_filename = filename; + + let encoded_body = base64::encode(&body); + let content = PartBuilder::new() + .body(encoded_body) + .header(( + "Content-Disposition", + format!("attachment; filename=\"{}\"", actual_filename), + )) + .header(("Content-Type", content_type.to_string())) + .header(("Content-Transfer-Encoding", "base64")) + .build(); + + Ok(self.message_type(MimeMultipartType::Mixed).child(content)) + } + /// Set the message type pub fn message_type(mut self, message_type: MimeMultipartType) -> EmailBuilder { self.message = self.message.message_type(message_type);