mirror of
https://github.com/chatmail/core.git
synced 2026-05-16 21:36:30 +03:00
refactor: flatten process_report()
This commit is contained in:
@@ -1442,33 +1442,36 @@ impl MimeMessage {
|
|||||||
let (report_fields, _) = mailparse::parse_headers(&report_body)?;
|
let (report_fields, _) = mailparse::parse_headers(&report_body)?;
|
||||||
|
|
||||||
// must be present
|
// must be present
|
||||||
if let Some(_disposition) = report_fields.get_header_value(HeaderDef::Disposition) {
|
if report_fields
|
||||||
let original_message_id = report_fields
|
.get_header_value(HeaderDef::Disposition)
|
||||||
.get_header_value(HeaderDef::OriginalMessageId)
|
.is_none()
|
||||||
// MS Exchange doesn't add an Original-Message-Id header. Instead, they put
|
{
|
||||||
// the original message id into the In-Reply-To header:
|
warn!(
|
||||||
.or_else(|| report.headers.get_header_value(HeaderDef::InReplyTo))
|
context,
|
||||||
.and_then(|v| parse_message_id(&v).ok());
|
"Ignoring unknown disposition-notification, Message-Id: {:?}.",
|
||||||
let additional_message_ids = report_fields
|
report_fields.get_header_value(HeaderDef::MessageId)
|
||||||
.get_header_value(HeaderDef::AdditionalMessageIds)
|
);
|
||||||
.map_or_else(Vec::new, |v| {
|
return Ok(None);
|
||||||
v.split(' ')
|
};
|
||||||
.filter_map(|s| parse_message_id(s).ok())
|
|
||||||
.collect()
|
|
||||||
});
|
|
||||||
|
|
||||||
return Ok(Some(Report {
|
let original_message_id = report_fields
|
||||||
original_message_id,
|
.get_header_value(HeaderDef::OriginalMessageId)
|
||||||
additional_message_ids,
|
// MS Exchange doesn't add an Original-Message-Id header. Instead, they put
|
||||||
}));
|
// the original message id into the In-Reply-To header:
|
||||||
}
|
.or_else(|| report.headers.get_header_value(HeaderDef::InReplyTo))
|
||||||
warn!(
|
.and_then(|v| parse_message_id(&v).ok());
|
||||||
context,
|
let additional_message_ids = report_fields
|
||||||
"ignoring unknown disposition-notification, Message-Id: {:?}",
|
.get_header_value(HeaderDef::AdditionalMessageIds)
|
||||||
report_fields.get_header_value(HeaderDef::MessageId)
|
.map_or_else(Vec::new, |v| {
|
||||||
);
|
v.split(' ')
|
||||||
|
.filter_map(|s| parse_message_id(s).ok())
|
||||||
|
.collect()
|
||||||
|
});
|
||||||
|
|
||||||
Ok(None)
|
Ok(Some(Report {
|
||||||
|
original_message_id,
|
||||||
|
additional_message_ids,
|
||||||
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn process_delivery_status(
|
fn process_delivery_status(
|
||||||
|
|||||||
Reference in New Issue
Block a user