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() {