diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index 5691d314a..410d02a8a 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -2334,6 +2334,18 @@ mod tests { ); } + #[async_std::test] + async fn test_parse_ndn_tiscali() { + test_parse_ndn( + "alice@tiscali.it", + "shenauithz@testrun.org", + "Mr.un2NYERi1RM.lbQ5F9q-QyJ@tiscali.it", + include_bytes!("../test-data/message/tiscali_ndn.eml"), + "", + ) + .await; + } + #[async_std::test] async fn test_parse_ndn_testrun() { test_parse_ndn( diff --git a/src/imap/mod.rs b/src/imap/mod.rs index 3bb0bf249..5d515a39b 100644 --- a/src/imap/mod.rs +++ b/src/imap/mod.rs @@ -1458,7 +1458,8 @@ pub(crate) async fn prefetch_should_download( let is_reply_to_chat_message = prefetch_is_reply_to_chat_message(context, &headers).await; let maybe_ndn = if let Some(from) = headers.get_header_value(HeaderDef::From_) { - from.to_ascii_lowercase().contains("mailer-daemon") + let from = from.to_ascii_lowercase(); + from.contains("mailer-daemon") || from.contains("mail-daemon") } else { false }; diff --git a/src/mimeparser.rs b/src/mimeparser.rs index 0f46aa0ba..95afd1431 100644 --- a/src/mimeparser.rs +++ b/src/mimeparser.rs @@ -570,13 +570,13 @@ impl MimeMessage { any_part_added = true; } - Some("delivery-status") => { + // Some providers, e.g. Tiscali, forget to set the report-type. So, if it's None, assume that it might be delivery-status + Some("delivery-status") | None => { if let Some(report) = self.process_delivery_status(context, mail)? { self.failure_report = Some(report); } - // Add all parts (in fact, AddSinglePartIfKnown() later check if - // the parts are really supported) + // Add all parts (we need another part, preferrably text/plain, to show as an error message) for cur_data in mail.subparts.iter() { if self.parse_mime_recursive(context, cur_data).await? { any_part_added = true; @@ -588,7 +588,6 @@ impl MimeMessage { any_part_added = self.parse_mime_recursive(context, first).await?; } } - None => {} } } } diff --git a/test-data/message/tiscali_ndn.eml b/test-data/message/tiscali_ndn.eml new file mode 100644 index 000000000..3e4e6b6e5 --- /dev/null +++ b/test-data/message/tiscali_ndn.eml @@ -0,0 +1,91 @@ +Return-Path: <> +Delivered-To: alice@tiscali.it +Received: from director-5.mail.tiscali.sys ([10.39.80.174]) + by dovecot-08.mail.tiscali.sys with LMTP id SBRfEpGb517VAgAAd2fHbg + for ; Mon, 15 Jun 2020 16:02:25 +0000 +Received: from cmgw-4.mail.tiscali.it ([10.39.80.174]) + by director-5.mail.tiscali.sys with LMTP id MFUPL5Cb516tawAArQJVuQ + ; Mon, 15 Jun 2020 16:02:25 +0000 +Received: from michael.mail.tiscali.it ([213.205.33.246]) + by cmgw-4.mail.tiscali.it with + id rTtS2200V5JdeUd01U2RlV; Mon, 15 Jun 2020 16:02:25 +0000 +x-cnfs-analysis: v=2.3 cv=ZdPMyfdA c=1 sm=1 tr=0 cx=a_idp_d + a=AfTPebshMYb+aQOCLa9q3Q==:117 a=HpEJnUlJZJkA:10 a=jmdcTMp_Gj4A:10 + a=r77TgQKjGQsHNAKrUKIA:9 a=b8iBRs35AAAA:8 a=NMdB-582e605uxHDr_AA:9 + a=QEXdDO2ut3YA:10 a=MhhPCb74-dYA:10 a=HXlsH_Kov2KnitTn7A4A:9 + a=BkuCPOF3BOzethIN9HQA:9 a=qG5HpJ6ZyD35YNEB:21 a=kvHihYffoorsyJbA:21 + a=xD8EQi6zkreDqSNPYj5l:22 +Date: Mon, 15 Jun 2020 16:02:25 +0000 +From: Mail Delivery System +To: alice@tiscali.it +Subject: Delivery status notification +MIME-Version: 1.0 +Content-Type: multipart/report; boundary="------------I305M09060309060P_896715922369450" + +This is a multi-part message in MIME format. + +--------------I305M09060309060P_896715922369450 +Content-Type: text/plain; charset=UTF-8; +Content-Transfer-Encoding: 8bit + + This is an automatically generated Delivery Status Notification. + +Delivery to the following recipients was aborted after 2 second(s): + + * shenauithz@testrun.org + + + +--------------I305M09060309060P_896715922369450 +Content-Type: message/delivery-status; charset=UTF-8; +Content-Transfer-Encoding: 8bit + +Reporting-MTA: dns; michael.mail.tiscali.it [213.205.33.13] +Received-From-MTA: dns; localhost [146.241.100.150] +Arrival-Date: Mon, 15 Jun 2020 16:02:23 +0000 + + +Final-recipient: rfc822; shenauithz@testrun.org +Action: failed +Status: 5.1.1 +Diagnostic-Code: smtp; 550 5.1.1 : Recipient address rejected: User unknown in virtual mailbox table +Last-attempt-Date: Mon, 15 Jun 2020 16:02:25 +0000 + + + +--------------I305M09060309060P_896715922369450 +Content-Type: text/rfc822-headers; Content-Transfer-Encoding: 8bit +Content-Disposition: attachment + +x-auth-user: alice@tiscali.it +Chat-Disposition-Notification-To: alice@tiscali.it +Chat-User-Avatar: avatar.jpg +Subject: =?utf-8?q?Message_from_=F0=9F=8F=9E=EF=B8=8F_Mefiscali?= +MIME-Version: 1.0 +Date: Mon, 15 Jun 2020 16:02:22 +0000 +X-Mailer: Delta Chat Core 1.35.0/Android 1.9.5 +Chat-Version: 1.0 +Autocrypt: addr=alice@tiscali.it; prefer-encrypt=mutual; + keydata=xjMEXtFRUBYJKwYBBAHaRw8BAQdA5sqHJqkWlveCgsNd0rtwtZrT1mmo1gwaGC5+WheYk5 + nNHTxhbmRyZWFzLmxhdHRtYW5uQHRpc2NhbGkuaXQ+wosEEBYIADMCGQEFAl7RUXoCGwMECwkIBwYV + CAkKCwIDFgIBFiEEJUsbRIjZEaRNAs1p1Z5M1vshkrAACgkQ1Z5M1vshkrAAaAEA4wssXeU2IXnowv + iu3zmcNzDgE4HdmW4RFyqJC6bgxXQA/3aTfE/PhQgZvi6RrKMvP4zygXpD9y+3ydIZP88Bp8kIzjgE + XtFRUBIKKwYBBAGXVQEFAQEHQKaAwlP0j9m0aYsCtO+qD9+foH0kiTN5BWDe5YcZrckVAwEIB8J4BB + gWCAAgBQJe0VF6AhsMFiEEJUsbRIjZEaRNAs1p1Z5M1vshkrAACgkQ1Z5M1vshkrA1JgEAkscCQlps + h3ZxlLqBlbf2+85f4S4aGQfFPtIYEkKKhYEBAJbQulNNp9UarvhfyBiIdvkBVDcCnJZwzbORqp8RM0 gC +Message-ID: +To: +From: =?utf-8?b?8J+Pnu+4jyBNZWZpc2NhbGk=?= +Content-Type: multipart/mixed; boundary="5uAmYQux1HZxxriijTjjKSp4DMoJwq" +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tiscali.it; s=smtp; + t=1592236943; bh=C3taz+zuSre1ko5Q5CzGPmbyrgegKYBClx/3Dv7t/Xw=; + h=Subject:Date:To:From; + b=LrcfLfrQoemOkHTQsqR8MExqNlx5KPYNFWhwlBWylvVc5GlmlhzqM6SAVKd0NVsKE + gVRlBId5FvnlwoJ2WZnXaw/+3lWKilMTuzzQ1oFGvLnZ1XUaUEfuliIv+9NI79dJWX + +S3jsSgzJMJc9+fO6s9bJsX1EHQ2a8GXNbwDtLXs= + + + +--------------I305M09060309060P_896715922369450-- + +