diff --git a/src/transport/smtp/client/mod.rs b/src/transport/smtp/client/mod.rs index 795f389..ce4b5da 100644 --- a/src/transport/smtp/client/mod.rs +++ b/src/transport/smtp/client/mod.rs @@ -78,7 +78,15 @@ impl ClientCodec { match self.escape_count { 0 => self.escape_count = if *byte == b'\r' { 1 } else { 0 }, 1 => self.escape_count = if *byte == b'\n' { 2 } else { 0 }, - 2 => self.escape_count = if *byte == b'.' { 3 } else { 0 }, + 2 => { + self.escape_count = if *byte == b'.' { + 3 + } else if *byte == b'\r' { + 1 + } else { + 0 + } + } _ => unreachable!(), } if self.escape_count == 3 { @@ -111,6 +119,7 @@ mod test { let mut buf: Vec = vec![]; codec.encode(b"test\r\n", &mut buf); + codec.encode(b"test\r\n\r\n", &mut buf); codec.encode(b".\r\n", &mut buf); codec.encode(b"\r\ntest", &mut buf); codec.encode(b"te\r\n.\r\nst", &mut buf); @@ -121,7 +130,7 @@ mod test { codec.encode(b"test", &mut buf); assert_eq!( String::from_utf8(buf).unwrap(), - "test\r\n..\r\n\r\ntestte\r\n..\r\nsttesttest.test\n.test\ntest" + "test\r\ntest\r\n\r\n..\r\n\r\ntestte\r\n..\r\nsttesttest.test\n.test\ntest" ); }