diff --git a/src/Headers.php b/src/Headers.php index 0d7b0d46..dd960377 100644 --- a/src/Headers.php +++ b/src/Headers.php @@ -228,7 +228,11 @@ public function addHeaderLine($headerFieldNameOrLine, $fieldValue = null) } if ($fieldValue === null) { - $this->addHeader(Header\GenericHeader::fromString($headerFieldNameOrLine)); + $headers = $this->loadHeader($headerFieldNameOrLine); + $headers = is_array($headers) ? $headers : [$headers]; + foreach ($headers as $header) { + $this->addHeader($header); + } } elseif (is_array($fieldValue)) { foreach ($fieldValue as $i) { $this->addHeader(Header\GenericMultiHeader::fromString($headerFieldNameOrLine . ':' . $i)); @@ -465,6 +469,21 @@ public function forceLoading() return true; } + /** + * Create Header object from header line + * + * @param string $headerLine + * @return \Zend\Mail\Header\HeaderInterface + */ + public function loadHeader($headerLine) + { + list($name, ) = \Zend\Mail\Header\GenericHeader::splitHeaderLine($headerLine); + + $class = ($this->getPluginClassLoader()->load($name)) ?: 'Zend\Mail\Header\GenericHeader'; + + return $class::fromString($headerLine); + } + /** * @param $index * @return mixed diff --git a/test/Storage/MessageTest.php b/test/Storage/MessageTest.php index e6fbbca4..d78e5ddf 100644 --- a/test/Storage/MessageTest.php +++ b/test/Storage/MessageTest.php @@ -9,12 +9,12 @@ namespace ZendTest\Mail\Storage; -use Zend\Mime; -use Zend\Mime\Exception as MimeException; use Zend\Mail\Exception as MailException; use Zend\Mail\Storage; use Zend\Mail\Storage\Exception; use Zend\Mail\Storage\Message; +use Zend\Mime; +use Zend\Mime\Exception as MimeException; /** * @group Zend_Mail @@ -23,10 +23,12 @@ class MessageTest extends \PHPUnit_Framework_TestCase { protected $_file; + protected $_file2; public function setUp() { $this->_file = __DIR__ . '/../_files/mail.txt'; + $this->_file2 = __DIR__ . '/../_files/mail_multi_to.txt'; } public function testInvalidFile() @@ -430,6 +432,16 @@ public function testStrictParseMessage() $message = new Message(['raw' => $raw, 'strict' => true]); } + public function testMultivalueToHeader() + { + $message = new Message(['file' => $this->_file2]); + /** @var \Zend\Mail\Header\To $header */ + $header = $message->getHeader('to'); + $addressList = $header->getAddressList(); + $this->assertEquals(2, $addressList->count()); + $this->assertEquals('nicpoń', $addressList->get('bar@example.pl')->getName()); + } + public function filesProvider() { $filePath = __DIR__ . '/../_files/mail.txt'; diff --git a/test/_files/mail_multi_to.txt b/test/_files/mail_multi_to.txt new file mode 100644 index 00000000..469aeb57 --- /dev/null +++ b/test/_files/mail_multi_to.txt @@ -0,0 +1,11 @@ +Return-Path: +Date: Sun, 01 Jan 2000 00:00:00 +0000 +From: sender@example.com +To: =?ISO-8859-2?Q?nicpo=F1?= , "foo" +Subject: Subject text +Content-Type: text/html; charset=iso-8859-2 +Content-Transfer-Encoding: 8bit +Content-Disposition: inline + +
html content
+