diff --git a/src/lib.rs b/src/lib.rs
index 1106faf..59ee375 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -922,7 +922,7 @@ impl<'a> Iterator for PartsIterator<'a> {
/// Some("This is a test email".to_string()));
/// assert_eq!(parsed.subparts.len(), 2);
/// assert_eq!(parsed.subparts[0].get_body().unwrap(),
-/// "This is the plaintext version, in utf-8. Proof by Euro: \u{20AC}\r\n");
+/// "This is the plaintext version, in utf-8. Proof by Euro: \u{20AC}");
/// assert_eq!(parsed.subparts[1].headers[1].get_value(), "base64");
/// assert_eq!(parsed.subparts[1].ctype.mimetype, "text/html");
/// assert!(parsed.subparts[1].get_body().unwrap().starts_with(""));
@@ -968,8 +968,17 @@ fn parse_mail_recursive(
find_from_u8_line_prefix(raw_data, ix_part_start, boundary.as_bytes())
.unwrap_or(raw_data.len());
+ let mut true_ix_part_end = ix_part_end;
+ if true_ix_part_end > 0 && raw_data.get(true_ix_part_end - 1) == Some(b'\n').as_ref() {
+ true_ix_part_end -= 1;
+
+ if true_ix_part_end > 0 && raw_data.get(true_ix_part_end - 1) == Some(b'\r').as_ref() {
+ true_ix_part_end -= 1;
+ }
+ }
+
result.subparts.push(parse_mail_recursive(
- &raw_data[ix_part_start..ix_part_end],
+ &raw_data[ix_part_start..true_ix_part_end],
in_multipart_digest,
)?);
ix_boundary_end = ix_part_end + boundary.len();
@@ -1648,8 +1657,8 @@ mod tests {
.as_bytes(),
)
.unwrap();
- assert_eq!(mail.subparts[0].get_body().unwrap(), "part0\r\n");
- assert_eq!(mail.subparts[1].get_body().unwrap(), "part1\r\n");
+ assert_eq!(mail.subparts[0].get_body().unwrap(), "part0");
+ assert_eq!(mail.subparts[1].get_body().unwrap(), "part1");
}
#[test]
@@ -2016,7 +2025,7 @@ mod tests {
part = parts.next().unwrap(); // mail.subparts[0]
assert_eq!(part.headers.len(), 0);
assert_eq!(part.ctype.mimetype, "text/plain");
- assert_eq!(part.get_body_raw().unwrap(), b"blah blah blah\n");
+ assert_eq!(part.get_body_raw().unwrap(), b"blah blah blah");
part = parts.next().unwrap(); // mail.subparts[1]
assert_eq!(part.ctype.mimetype, "multipart/digest");
@@ -2024,12 +2033,12 @@ mod tests {
part = parts.next().unwrap(); // mail.subparts[1].subparts[0]
assert_eq!(part.headers.len(), 0);
assert_eq!(part.ctype.mimetype, "message/rfc822");
- assert_eq!(part.get_body_raw().unwrap(), b"nested default part\n");
+ assert_eq!(part.get_body_raw().unwrap(), b"nested default part");
part = parts.next().unwrap(); // mail.subparts[1].subparts[1]
assert_eq!(part.headers.len(), 1);
assert_eq!(part.ctype.mimetype, "text/html");
- assert_eq!(part.get_body_raw().unwrap(), b"nested html part\n");
+ assert_eq!(part.get_body_raw().unwrap(), b"nested html part");
part = parts.next().unwrap(); // mail.subparts[1].subparts[2]
assert_eq!(part.headers.len(), 1);
@@ -2038,7 +2047,7 @@ mod tests {
part = parts.next().unwrap(); // mail.subparts[1].subparts[2].subparts[0]
assert_eq!(part.headers.len(), 0);
assert_eq!(part.ctype.mimetype, "text/plain");
- assert_eq!(part.get_body_raw().unwrap(), b"inside part\n");
+ assert_eq!(part.get_body_raw().unwrap(), b"inside part");
assert!(parts.next().is_none());
}
@@ -2083,13 +2092,13 @@ mod tests {
part = parts.next().unwrap(); // mail.subparts[0].subparts[0]
assert_eq!(part.headers.len(), 1);
assert_eq!(part.ctype.mimetype, "text/html");
- assert_eq!(part.get_body_raw().unwrap(), b"Good evening!\n");
+ assert_eq!(part.get_body_raw().unwrap(), b"Good evening!");
assert_eq!(part.subparts.len(), 0);
part = parts.next().unwrap(); // mail.subparts[0].subparts[1]
assert_eq!(part.headers.len(), 1);
assert_eq!(part.ctype.mimetype, "text/plain");
- assert_eq!(part.get_body_raw().unwrap(), b"Good evening!\n");
+ assert_eq!(part.get_body_raw().unwrap(), b"Good evening!");
assert_eq!(part.subparts.len(), 0);
assert!(parts.next().is_none());