ソースを参照

Allow setting multiple headers of the same name.

Closes #12523.
ADmad 7 年 前
コミット
ad2f62911b

+ 4 - 1
src/Mailer/AbstractTransport.php

@@ -62,7 +62,10 @@ abstract class AbstractTransport
             if ($value === false || $value === null || $value === '') {
                 continue;
             }
-            $out .= $key . ': ' . $value . $eol;
+
+            foreach ((array)$value as $val) {
+                $out .= $key . ': ' . $val . $eol;
+            }
         }
         if (!empty($out)) {
             $out = substr($out, 0, -1 * strlen($eol));

+ 1 - 1
src/Mailer/Email.php

@@ -1126,7 +1126,7 @@ class Email implements JsonSerializable, Serializable
      */
     public function addHeaders(array $headers)
     {
-        $this->_headers = array_merge($this->_headers, $headers);
+        $this->_headers = Hash::merge($this->_headers, $headers);
 
         return $this;
     }

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

@@ -809,6 +809,11 @@ class EmailTest extends TestCase
 
         $result = $this->Email->setHeaders([]);
         $this->assertInstanceOf('Cake\Mailer\Email', $result);
+
+        $this->Email->setHeaders(['o:tag' => ['foo']]);
+        $this->Email->addHeaders(['o:tag' => ['bar']]);
+        $result = $this->Email->getHeaders();
+        $this->assertEquals(['foo', 'bar'], $result['o:tag']);
     }
 
     /**

+ 3 - 1
tests/TestCase/Mailer/Transport/DebugTransportTest.php

@@ -53,13 +53,15 @@ class DebugTransportTest extends TestCase
         $email->setMessageId('<4d9946cf-0a44-4907-88fe-1d0ccbdd56cb@localhost>');
         $email->setSubject('Testing Message');
         $date = date(DATE_RFC2822);
-        $email->setHeaders(['Date' => $date]);
+        $email->setHeaders(['Date' => $date, 'o:tag' => ['foo', 'bar']]);
         $email->expects($this->once())->method('message')->will($this->returnValue(['First Line', 'Second Line', '.Third Line', '']));
 
         $headers = "From: CakePHP Test <noreply@cakephp.org>\r\n";
         $headers .= "To: CakePHP <cake@cakephp.org>\r\n";
         $headers .= "Cc: Mark Story <mark@cakephp.org>, Juan Basso <juan@cakephp.org>\r\n";
         $headers .= 'Date: ' . $date . "\r\n";
+        $headers .= 'o:tag: foo' . "\r\n";
+        $headers .= 'o:tag: bar' . "\r\n";
         $headers .= "Message-ID: <4d9946cf-0a44-4907-88fe-1d0ccbdd56cb@localhost>\r\n";
         $headers .= "Subject: Testing Message\r\n";
         $headers .= "MIME-Version: 1.0\r\n";