From 6fbb3bf440ad0db1714a11ebbaebe551a5510677 Mon Sep 17 00:00:00 2001 From: Alexis Mousset Date: Wed, 3 Feb 2021 10:25:47 +0100 Subject: [PATCH] feat(transport): Read messages from FileTransport (#516) * feat(transport): Read messages from FileTransport * Style improvements --- src/transport/file/mod.rs | 17 +++++++++++++++++ tests/transport_file.rs | 8 +++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/transport/file/mod.rs b/src/transport/file/mod.rs index 085ade1..a163424 100644 --- a/src/transport/file/mod.rs +++ b/src/transport/file/mod.rs @@ -186,6 +186,23 @@ impl FileTransport { } } + /// Read a message that was written using the file transport. + /// + /// Reads the envelope and the raw message content. + #[cfg(feature = "file-transport-envelope")] + pub fn read(&self, email_id: &str) -> Result<(Envelope, Vec), Error> { + use std::fs; + + let eml_file = self.path.join(format!("{}.eml", email_id)); + let eml = fs::read(eml_file)?; + + let json_file = self.path.join(format!("{}.json", email_id)); + let json = fs::read(&json_file)?; + let envelope = serde_json::from_slice(&json)?; + + Ok((envelope, eml)) + } + fn path(&self, email_id: &Uuid, extension: &str) -> PathBuf { self.path.join(format!("{}.{}", email_id, extension)) } diff --git a/tests/transport_file.rs b/tests/transport_file.rs index 970d686..8286fde 100644 --- a/tests/transport_file.rs +++ b/tests/transport_file.rs @@ -81,12 +81,18 @@ mod test { "Be happy!" ) ); - remove_file(eml_file).unwrap(); assert_eq!( json, "{\"forward_path\":[\"hei@domain.tld\"],\"reverse_path\":\"nobody@domain.tld\"}" ); + + let (e, m) = sender.read(&id).unwrap(); + + assert_eq!(&e, email.envelope()); + assert_eq!(m, email.formatted()); + + remove_file(eml_file).unwrap(); remove_file(json_file).unwrap(); }