server: handle multipart/related with a multipart/alternative embedded
This commit is contained in:
parent
96d3e4a7d6
commit
55d7aec516
@ -514,6 +514,7 @@ fn extract_body(m: &ParsedMail, id: &str) -> Result<Body, Error> {
|
|||||||
TEXT_HTML => return Ok(Body::html(body)),
|
TEXT_HTML => return Ok(Body::html(body)),
|
||||||
MULTIPART_MIXED => extract_mixed(m, &mut part_addr),
|
MULTIPART_MIXED => extract_mixed(m, &mut part_addr),
|
||||||
MULTIPART_ALTERNATIVE => extract_alternative(m, &mut part_addr),
|
MULTIPART_ALTERNATIVE => extract_alternative(m, &mut part_addr),
|
||||||
|
MULTIPART_RELATED => extract_related(m, &mut part_addr),
|
||||||
_ => extract_unhandled(m),
|
_ => extract_unhandled(m),
|
||||||
};
|
};
|
||||||
if let Err(err) = ret {
|
if let Err(err) = ret {
|
||||||
@ -668,9 +669,9 @@ fn flatten_body_parts(parts: &[Body]) -> Body {
|
|||||||
Body::html(html)
|
Body::html(html)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn extract_related(m: &ParsedMail, _part_addr: &mut Vec<String>) -> Result<Body, Error> {
|
fn extract_related(m: &ParsedMail, part_addr: &mut Vec<String>) -> Result<Body, Error> {
|
||||||
// TODO(wathiede): collect related things and change return type to new Body arm.
|
// TODO(wathiede): collect related things and change return type to new Body arm.
|
||||||
let handled_types = vec![TEXT_HTML, TEXT_PLAIN];
|
let handled_types = vec![MULTIPART_ALTERNATIVE, TEXT_HTML, TEXT_PLAIN];
|
||||||
let mut unhandled_types: Vec<_> = m
|
let mut unhandled_types: Vec<_> = m
|
||||||
.subparts
|
.subparts
|
||||||
.iter()
|
.iter()
|
||||||
@ -680,6 +681,11 @@ fn extract_related(m: &ParsedMail, _part_addr: &mut Vec<String>) -> Result<Body,
|
|||||||
unhandled_types.sort();
|
unhandled_types.sort();
|
||||||
warn!("{MULTIPART_RELATED} contains the following unhandled mimetypes {unhandled_types:?}");
|
warn!("{MULTIPART_RELATED} contains the following unhandled mimetypes {unhandled_types:?}");
|
||||||
|
|
||||||
|
for sp in &m.subparts {
|
||||||
|
if sp.ctype.mimetype == MULTIPART_ALTERNATIVE {
|
||||||
|
return extract_alternative(m, part_addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
for sp in &m.subparts {
|
for sp in &m.subparts {
|
||||||
if sp.ctype.mimetype == TEXT_HTML {
|
if sp.ctype.mimetype == TEXT_HTML {
|
||||||
let body = sp.get_body()?;
|
let body = sp.get_body()?;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user