Fix incoming bounce processing
authorEileen McNaughton <emcnaughton@wikimedia.org>
Wed, 29 Nov 2023 03:24:42 +0000 (16:24 +1300)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Wed, 29 Nov 2023 03:49:06 +0000 (16:49 +1300)
We switched to a less misleading method of calculating the hash here
https://github.com/civicrm/civicrm-core/pull/27533/files#diff-942a60901c838eb11bfd85cd3e84672748d9f1d49f8cbe62684bc898b02c7a90R58
but did not spot that the regex was expecting only letters a-f whereas
the new method is a-z

CRM/Utils/Mail/IncomingMail.php
tests/phpunit/CRM/Utils/Mail/EmailProcessorTest.php
tests/phpunit/CRM/Utils/Mail/data/bounces/bounce_no_verp.txt
tests/phpunit/CRM/Utils/Mail/data/bounces/test_invalid_character.eml
tests/phpunit/CRM/Utils/Mail/data/bounces/test_nested_message.eml
tests/phpunit/CRM/Utils/Mail/data/bounces/test_sample_message.eml
tests/phpunit/CRM/Utils/Mail/data/bounces/test_utf8mb4_character.txt

index 47177d12feb141e4b292ed8ffec52644353489d5..8024c4c03b1f7ecd5cf26e8d1476f080009f0d1f 100644 (file)
@@ -161,13 +161,13 @@ class CRM_Utils_Mail_IncomingMail {
     $twoDigitString = $twoDigitStringMin . $verpSeparator;
 
     // a common-for-all-actions regex to handle CiviCRM 2.2 address patterns
-    $regex = '/^' . $emailLocalPart . '(b|c|e|o|r|u)' . $twoDigitString . '([0-9a-f]{16})@' . $emailDomain . '$/';
+    $regex = '/^' . $emailLocalPart . '(b|c|e|o|r|u)' . $twoDigitString . '([0-9a-z]{16})@' . $emailDomain . '$/';
 
     // a tighter regex for finding bounce info in soft bounces’ mail bodies
-    $rpRegex = '/Return-Path:\s*' . $emailLocalPart . '(b)' . $twoDigitString . '([0-9a-f]{16})@' . $emailDomain . '/';
+    $rpRegex = '/Return-Path:\s*' . $emailLocalPart . '(b)' . $twoDigitString . '([0-9a-z]{16})@' . $emailDomain . '/';
 
     // a regex for finding bound info X-Header
-    $rpXHeaderRegex = '/X-CiviMail-Bounce: ' . $emailLocalPart . '(b)' . $twoDigitString . '([0-9a-f]{16})@' . $emailDomain . '/i';
+    $rpXHeaderRegex = '/X-CiviMail-Bounce: ' . $emailLocalPart . '(b)' . $twoDigitString . '([0-9a-z]{16})@' . $emailDomain . '/i';
     // CiviMail in regex and Civimail in header !!!
     $matches = NULL;
     foreach ($this->mail->to as $address) {
index a8826dba42e5034b0fd4d4e7fd2bfc664976dd3a..1de91ced2137934d5e6c0e15594a114c7bbf8167 100644 (file)
@@ -200,7 +200,7 @@ class CRM_Utils_Mail_EmailProcessorTest extends CiviUnitTestCase {
     ])['id'];
     $this->createMailing(['scheduled_date' => 'now', 'groups' => ['include' => [$groupID]]]);
     $this->callAPISuccess('job', 'process_mailing', []);
-    $this->eventQueue = $this->callAPISuccess('MailingEventQueue', 'get', ['api.MailingEventQueue.create' => ['hash' => 'aaaaaaaaaaaaaaaa']]);
+    $this->eventQueue = $this->callAPISuccess('MailingEventQueue', 'get', ['api.MailingEventQueue.create' => ['hash' => 'aaaaaaaaaaaaaaaz']]);
   }
 
   /**
index 26e07f228443a5db8ceb9f41b602bb3ec9063ad3..f4a3310b18605230a5b47f703776f79687ad946e 100644 (file)
@@ -18,7 +18,7 @@ Return-Path: <>
 Received: by 10.67.22.67 with SMTP id hq3mr12327267pad.132; Thu, 23 Jan 2014
  12:45:42 -0800 (PST)
 From: Mail Delivery Subsystem <mailer-daemon@googlemail.com>
-To: b.2.1.aaaaaaaaaaaaaaaa@example.com
+To: b.2.1.aaaaaaaaaaaaaaaz@example.com
 X-Failed-Recipients: undeliverable@example.com
 Subject: Delivery Status Notification (Failure)
 Message-ID: <047d7b5dbbd42675d704f0a953a8@google.com>
index 7a5a928565d9828c0001f01fa68cd8e0d38f6ca4..afcdfc5d08034a2637e55d53e7214d7e63066823 100644 (file)
@@ -3,7 +3,7 @@ Received: by 10.2.13.84 with SMTP id 1234567890;
         Wed, 19 Dec 2018 10:01:11 +0100 (CET)
 Return-Path: <SRS0=z9mA=EY=donate.long-example.org=b.51907682.51575594.57daed525aaca713@example.org>
 From: Postmaster@example.com
-To: b.2.1.aaaaaaaaaaaaaaaa@example.com
+To: b.2.1.aaaaaaaaaaaaaaaz@example.com
 Subject: Delivery Status Notification (Failure)
 Message-ID: <abc.def.fhi@example.com>
 Date: Wed, 19 Dec 2018 10:01:07 +0100
index d52c68c5ef3d8277f60e7c88db3c2f70b94aa0fb..1bdca03a7629778b3222a2837b31da391a95547d 100644 (file)
@@ -1,23 +1,23 @@
 Return-Path: <>
-X-Original-To: b.2.1.aaaaaaaaaaaaaaaa@donate.example.org
-Delivered-To: b.2.1.aaaaaaaaaaaaaaaa@example.com
+X-Original-To: b.2.1.aaaaaaaaaaaaaaaz@donate.example.org
+Delivered-To: b.2.1.aaaaaaaaaaaaaaaz@example.com
 Received: from mx1001.example.org (mx1001.example.org [127.0.0.1])
 by civicrm.example.org (Postfix) with ESMTPS id 381BD2E95DC
-for <b.aaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaa@donate.example.org>; Sun,  3 Dec 2017 11:29:12 +0000 (UTC)
+for <b.aaaaaaaaaaaaaaaz.aaaaaaaaaaaaaaaz@donate.example.org>; Sun,  3 Dec 2017 11:29:12 +0000 (UTC)
 Received: from mail-qt0-x241.example.org ([1111:2222:3333:c0d::241]:34862)
 by mx1001.example.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2)
 id 1eLSSM-0003Vj-7E
-for b.aaaaaaaaaaaaaaaa.b322af9943c6facb@donate.example.org; Sun, 03 Dec 2017 11:29:12 +0000
+for b.aaaaaaaaaaaaaaaz.b322af9943c6facb@donate.example.org; Sun, 03 Dec 2017 11:29:12 +0000
 Received: by mail-qt0-x241.example.org with SMTP id u10so18073433qtg.2
-       for <b.aaaaaaaaaaaaaaaa.b322af9943c6facb@donate.example.org>; Sun, 03 Dec 2017 03:29:10 -0800 (PST)
+       for <b.aaaaaaaaaaaaaaaz.b322af9943c6facb@donate.example.org>; Sun, 03 Dec 2017 03:29:10 -0800 (PST)
 X-Received: by 127.0.0.1 with SMTP id f2mr16998556qth.140.1512300550024;
        Sun, 03 Dec 2017 03:29:10 -0800 (PST)
 Content-Type: multipart/report; boundary="f403043ae60413e73f055f6de970"; report-type=delivery-status
 Received: by 127.0.0.1 with SMTP id xxxxxxxx.140; Sun, 03 Dec 2017
 03:29:10 -0800 (PST)
 From: Mail Delivery Subsystem <mailer-daemon@example.com>
-To: b.2.1.aaaaaaaaaaaaaaaa@example.com
+To: b.2.1.aaaaaaaaaaaaaaaz@example.com
 Auto-Submitted: auto-replied
 Subject: Delivery Status Notification (Failure)
 References: <xxxxxxxxxxxxxxxxxxxxxxxx@civicrm-mailer>
@@ -47,7 +47,7 @@ Learn more here: https://checkspam.secureserver.net/?sid=3Dxxxxxxxxxxxx=
 (Warning: This link will take you to a third-party site)
 
 The response from the remote server was:
-552 5.2.0 aaaaaaaaaaaaaaaa - bbbbbbbbbbbbbbbb This message has been =
+552 5.2.0 aaaaaaaaaaaaaaaz - bbbbbbbbbbbbbbbb This message has been =
 rejected due to content judged to be spam by the internet community IB212 -=
 If you feel this is in error, please submit a request using the following =
 page. <https://checkspam.secureserver.net/?sid=3Dxxxxxxxxxxxx&mid=3Dxxxxx=
@@ -105,7 +105,7 @@ This link will take you to a third-party site
 <td align=3D"left" style=3D"padding:48px 10px">
 The response from the remote server was:<br/>
 <p style=3D"font-family:monospace">
-552 5.2.0 aaaaaaaaaaaaaaaa - bbbbbbbbbbbbbbbbbbb This message has been =
+552 5.2.0 aaaaaaaaaaaaaaaz - bbbbbbbbbbbbbbbbbbb This message has been =
 rejected due to content judged to be spam by the internet community IB212 -=
 If you feel this is in error, please submit a request using the following =
 page. &lt;https://checkspam.secureserver.net/?sid=3Dxxxxxxxx&amp;m=
@@ -245,7 +245,7 @@ AABJRU5ErkJggg==
 Content-Type: message/global-delivery-status
 
 Reporting-MTA: dns; example.com
-Received-From-MTA: dns; b.aaaaaaaaaaaaaaaa.b322af9943c6facb@donate.example.org
+Received-From-MTA: dns; b.aaaaaaaaaaaaaaaz.b322af9943c6facb@donate.example.org
 Arrival-Date: Sun, 03 Dec 2017 03:29:08 -0800 (PST)
 X-Original-Message-ID: <xxxxxxxxxxxxxxxxxxxxxxxx@civicrm-mailer>
 
@@ -253,9 +253,9 @@ Final-Recipient: rfc822; bob@example.com
 Action: failed
 Status: 5.2.0
 Remote-MTA: dns; smtp.secureserver.net (22.33.44.55, the relay for the domain.)
-Diagnostic-Code: smtp; 552 5.2.0 aaaaaaaaaaaaaaaaa - bbbbbbbbbbbbbbbbbbb This message has been rejected due to content judged to b
+Diagnostic-Code: smtp; 552 5.2.0 aaaaaaaaaaaaaaaza - bbbbbbbbbbbbbbbbbbb This message has been rejected due to content judged to b
 e spam by the internet community IB212 - If you feel this is in error, please submit a request using the following page. <https://che
-ckspam.secureserver.net/?sid=aaaaaaaaaaaaaaaaaaa&mid=bbbbbbbbbbbbbbbbbbb>
+ckspam.secureserver.net/?sid=aaaaaaaaaaaaaaazaaa&mid=bbbbbbbbbbbbbbbbbbb>
 Last-Attempt-Date: Sun, 03 Dec 2017 03:29:10 -0800 (PST)
 
 --f403043ae60413e73f055f6de970
@@ -263,7 +263,7 @@ Content-Type: message/rfc822
 
 X-Received: by 127.0.0.1 with SMTP id f2mr16998507qth.140.1512300548827;
        Sun, 03 Dec 2017 03:29:08 -0800 (PST)
-Return-Path: <b.aaaaaaaaaaaaaaaa.b322af9943c6facb@donate.example.org>
+Return-Path: <b.aaaaaaaaaaaaaaaz.b322af9943c6facb@donate.example.org>
 Received: from civicrm.example.org (civicrm.example.org. [111.222.33.44])
        by mx.example.org with ESMTPS id w61si1072744qte.335.2017.12.22.33.44.55
        for <bob@example.com>
index cff8fc0f73ab0a98f5fb25cdef4d7cc71f2ad0e4..344a6d933ba4a054e5ca3ccc1ad7e524517f4460 100644 (file)
@@ -1,5 +1,5 @@
 Return-Path: <xxxxxx@acm.org>
-To: b.2.1.aaaaaaaaaaaaaaaa@example.com
+To: b.2.1.aaaaaaaaaaaaaaaz@example.com
 Subject: Testing Manuel Lemos' MIME E-mail composing and sending PHP class: HTML message
 From: xxxxxx <xxxxxx@acm.org>
 Reply-To: xxxxxx <xxxxxx@acm.org>
index bb1d73149e9aa310b225e14409dcae8e729d2d7a..c7cd5b33221bebac30ed465d4bab49f7edad7a74 100644 (file)
@@ -3,7 +3,7 @@ Received: by 10.2.13.84 with SMTP id 1234567890;
         Wed, 19 Dec 2018 10:01:11 +0100 (CET)
 Return-Path: <>
 From: my@example.com
-To: b.2.1.aaaaaaaaaaaaaaaa@example.com
+To: b.2.1.aaaaaaaaaaaaaaaz@example.com
 Subject: Vacation
 Message-ID: <abc.def.fhi@example.com>
 Date: Wed, 19 Dec 2018 10:01:07 +0100