From eae3aae7a06bbd26d8e5dcf9210bb73b1dbbd6e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Kr=C3=B3l?= Date: Thu, 28 Apr 2016 15:43:01 +0200 Subject: [PATCH 1/4] Load headers eagerly to avoid re-encoding problems with multivalve headers --- src/Headers.php | 14 +++++++++++++- test/Storage/MessageTest.php | 16 ++++++++++++++-- test/_files/mail_multi_to.txt | 11 +++++++++++ 3 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 test/_files/mail_multi_to.txt diff --git a/src/Headers.php b/src/Headers.php index 0d7b0d46..de771ef5 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,14 @@ public function forceLoading() return true; } + public function loadHeader($headerLine){ + list($name, $value) = \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
+ From 5c38a607c1632e7e004ef2fb3d45fa3298a5035f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Kr=C3=B3l?= Date: Thu, 28 Apr 2016 15:50:38 +0200 Subject: [PATCH 2/4] Cleanup Add comments, remove unused variable --- src/Headers.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Headers.php b/src/Headers.php index de771ef5..234d3e5c 100644 --- a/src/Headers.php +++ b/src/Headers.php @@ -469,8 +469,14 @@ 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, $value) = \Zend\Mail\Header\GenericHeader::splitHeaderLine($headerLine); + list($name, ) = \Zend\Mail\Header\GenericHeader::splitHeaderLine($headerLine); $class = ($this->getPluginClassLoader()->load($name)) ?: 'Zend\Mail\Header\GenericHeader'; From 94b81733e2fa264dd9e6e12b0dce8bc9abae386d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Kr=C3=B3l?= Date: Thu, 28 Apr 2016 15:56:35 +0200 Subject: [PATCH 3/4] Style fix --- src/Headers.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Headers.php b/src/Headers.php index 234d3e5c..279d2bad 100644 --- a/src/Headers.php +++ b/src/Headers.php @@ -475,8 +475,9 @@ public function forceLoading() * @param string $headerLine * @return \Zend\Mail\Header\HeaderInterface */ - public function loadHeader($headerLine){ - list($name, ) = \Zend\Mail\Header\GenericHeader::splitHeaderLine($headerLine); + public function loadHeader($headerLine) + { + list($name,) = \Zend\Mail\Header\GenericHeader::splitHeaderLine($headerLine); $class = ($this->getPluginClassLoader()->load($name)) ?: 'Zend\Mail\Header\GenericHeader'; From 0c322d883dbd267b6f2499f00ea3a26bd2db6f06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Kr=C3=B3l?= Date: Thu, 28 Apr 2016 16:01:13 +0200 Subject: [PATCH 4/4] Style fix 2 --- src/Headers.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Headers.php b/src/Headers.php index 279d2bad..dd960377 100644 --- a/src/Headers.php +++ b/src/Headers.php @@ -477,7 +477,7 @@ public function forceLoading() */ public function loadHeader($headerLine) { - list($name,) = \Zend\Mail\Header\GenericHeader::splitHeaderLine($headerLine); + list($name, ) = \Zend\Mail\Header\GenericHeader::splitHeaderLine($headerLine); $class = ($this->getPluginClassLoader()->load($name)) ?: 'Zend\Mail\Header\GenericHeader';