Browse Source

Merge pull request #12605 from jeremyharris/email-message-id

Fixed bug causing message-id to be regenerated
Mark Story 7 years ago
parent
commit
519d83b267
2 changed files with 12 additions and 3 deletions
  1. 3 3
      src/Mailer/Email.php
  2. 9 0
      tests/TestCase/Mailer/EmailTest.php

+ 3 - 3
src/Mailer/Email.php

@@ -1205,10 +1205,10 @@ class Email implements JsonSerializable, Serializable
         }
         if ($this->_messageId !== false) {
             if ($this->_messageId === true) {
-                $headers['Message-ID'] = '<' . str_replace('-', '', Text::uuid()) . '@' . $this->_domain . '>';
-            } else {
-                $headers['Message-ID'] = $this->_messageId;
+                $this->_messageId = '<' . str_replace('-', '', Text::uuid()) . '@' . $this->_domain . '>';
             }
+
+            $headers['Message-ID'] = $this->_messageId;
         }
 
         if ($this->_priority) {

+ 9 - 0
tests/TestCase/Mailer/EmailTest.php

@@ -615,6 +615,15 @@ class EmailTest extends TestCase
         $this->assertSame('<my-email@localhost>', $result);
     }
 
+    public function testAutoMessageIdIsIdempotent()
+    {
+        $headers = $this->Email->getHeaders();
+        $this->assertArrayHasKey('Message-ID', $headers);
+
+        $regeneratedHeaders = $this->Email->getHeaders();
+        $this->assertSame($headers['Message-ID'], $regeneratedHeaders['Message-ID']);
+    }
+
     /**
      * @return void
      */