refactor: flatten process_report()

This commit is contained in:
link2xt
2023-09-26 16:02:14 +00:00
parent b1d517398d
commit 88bba83383

View File

@@ -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(