From 75c184c5c3bdac72c4a09d7f42bb4283681c8e64 Mon Sep 17 00:00:00 2001 From: Alexis Mousset Date: Sun, 20 Aug 2017 02:33:04 +0200 Subject: [PATCH] fix(transport): Fix message streaming --- lettre/src/smtp/client/mod.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lettre/src/smtp/client/mod.rs b/lettre/src/smtp/client/mod.rs index 4718ec9..d72ca28 100644 --- a/lettre/src/smtp/client/mod.rs +++ b/lettre/src/smtp/client/mod.rs @@ -201,19 +201,22 @@ impl Client { /// Sends the message content pub fn message(&mut self, mut message: Box) -> SmtpResult { - let mut in_buf: Vec = vec![]; let mut out_buf: Vec = vec![]; - let mut codec = ClientCodec::new(); let mut message_reader = BufReader::new(message.as_mut()); loop { - in_buf.clear(); out_buf.clear(); - match message_reader.read(&mut in_buf)? { - 0 => break, - _ => codec.encode(in_buf.as_slice(), &mut out_buf)?, + + let consumed = match message_reader.fill_buf() { + Ok(bytes) => { codec.encode(bytes, &mut out_buf)?; bytes.len() }, + Err(ref err) => panic!("Failed with: {}", err) }; + message_reader.consume(consumed); + + if consumed == 0 { + break; + } self.write_server(out_buf.as_slice())?; }