From 50f13cb84bdd79cff557b1409f8bee0a4fb68a96 Mon Sep 17 00:00:00 2001 From: Hocuri Date: Sun, 13 Mar 2022 14:39:49 +0100 Subject: [PATCH] Set X-Microsoft-Original-Message-ID on outgoing emails for amazonaws (#3077) --- CHANGELOG.md | 1 + src/mimefactory.rs | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c630925f..60ebbbb03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and remove update-id from `DC_EVENT_WEBXDC_STATUS_UPDATE` #3081 ### Fixes +- Hopefully fix a bug where outgoing messages appear twice with Amazon SES #3077 - do not delete messages without Message-IDs as duplicates #3095 - Assign replies from a different email address to the correct chat #3119 - start ephemeral timer when seen status is synchronized via IMAP #3122 diff --git a/src/mimefactory.rs b/src/mimefactory.rs index f132e0d74..7499bfc7d 100644 --- a/src/mimefactory.rs +++ b/src/mimefactory.rs @@ -544,10 +544,25 @@ impl<'a> MimeFactory<'a> { Loaded::Message { .. } => self.msg.rfc724_mid.clone(), Loaded::Mdn { .. } => dc_create_outgoing_rfc724_mid(None, &self.from_addr), }; - headers.unprotected.push(Header::new( - "Message-ID".into(), - render_rfc724_mid(&rfc724_mid), - )); + let rfc724_mid_headervalue = render_rfc724_mid(&rfc724_mid); + + // Amazon's SMTP servers change the `Message-ID`, just as Outlook's SMTP servers do. + // Outlook's servers add an `X-Microsoft-Original-Message-ID` header with the original `Message-ID`, + // and when downloading messages we look for this header in order to correctly identify + // messages. + // Amazon's servers do not add such a header, so we just add it ourselves. + if let Some(server) = context.get_config(Config::ConfiguredSendServer).await? { + if server.ends_with(".amazonaws.com") { + headers.unprotected.push(Header::new( + "X-Microsoft-Original-Message-ID".into(), + rfc724_mid_headervalue.clone(), + )) + } + } + + headers + .unprotected + .push(Header::new("Message-ID".into(), rfc724_mid_headervalue)); // Reply headers as in . if !self.in_reply_to.is_empty() {