From 4dc596e646df02d1097e0ab94075f6efc89dc63c Mon Sep 17 00:00:00 2001 From: link2xt Date: Fri, 5 Jan 2024 01:42:24 +0000 Subject: [PATCH] fix(mimefactory): do not wrap MDNs into multipart/mixed part --- src/mimefactory.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/mimefactory.rs b/src/mimefactory.rs index fff194276..5ed9e5726 100644 --- a/src/mimefactory.rs +++ b/src/mimefactory.rs @@ -768,6 +768,30 @@ impl<'a> MimeFactory<'a> { .build(), ) .header(("Subject".to_string(), "...".to_string())) + } else if matches!(self.loaded, Loaded::Mdn { .. }) { + // Never add outer multipart/mixed wrapper to MDN + // as multipart/report Content-Type is used to recognize MDNs + // by Delta Chat receiver and Chatmail servers + // allowing them to be unencrypted and not contain Autocrypt header + // without resetting Autocrypt encryption or triggering Chatmail filter + // that normally only allows encrypted mails. + + // Hidden headers are dropped. + + // Store protected headers in the outer message. + let message = headers + .protected + .iter() + .fold(message, |message, header| message.header(header.clone())); + + let protected: HashSet
= HashSet::from_iter(headers.protected.into_iter()); + for h in headers.unprotected.split_off(0) { + if !protected.contains(&h) { + headers.unprotected.push(h); + } + } + + message } else { // Store hidden headers in the inner unencrypted message. let message = headers