From 83ce0512401f719c3f275a601b57f12df16999ca Mon Sep 17 00:00:00 2001 From: DINH QUOC THANH Date: Fri, 21 Oct 2022 22:07:55 +0700 Subject: [PATCH] KAYAKOC-31831 | fix hebrew encoding issue (#1) --- .gitignore | 1 + CHANGELOG.md | 2 ++ composer.json | 4 ++-- src/Header/AbstractAddressList.php | 21 +++++++++------------ src/Header/GenericHeader.php | 2 +- src/Header/Subject.php | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 245087af..8d7f3f73 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ /vendor/ /zf-mkdoc-theme.tgz /zf-mkdoc-theme/ +.idea diff --git a/CHANGELOG.md b/CHANGELOG.md index e7ac968e..1f7c9c0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file, in reverse chronological order by release. +## 2.11.0 - fix hebrew encoding issue - 2022-10-21 + ## 2.10.1 - TBD ### Added diff --git a/composer.json b/composer.json index b172cefd..b1c58b7d 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "zendframework/zend-mail", + "name": "kayako-zend/zend-mail-kayako", "description": "Provides generalized functionality to compose and send both text and MIME-compliant multipart e-mail messages", "license": "BSD-3-Clause", "keywords": [ @@ -21,7 +21,7 @@ "zendframework/zend-loader": "^2.5", "zendframework/zend-mime": "^2.5", "zendframework/zend-stdlib": "^2.7 || ^3.0", - "zendframework/zend-validator": "^2.10.2", + "kayako-zend/zend-validator-kayako": "^2.14.0", "true/punycode": "^2.1" }, "require-dev": { diff --git a/src/Header/AbstractAddressList.php b/src/Header/AbstractAddressList.php index ab48f671..0676ff8e 100644 --- a/src/Header/AbstractAddressList.php +++ b/src/Header/AbstractAddressList.php @@ -145,11 +145,15 @@ public function getFieldValue($format = HeaderInterface::FORMAT_RAW) $name = HeaderWrap::mimeEncodeValue($name, $encoding); } - if (preg_match('/^(.+)@([^@]+)$/', $email, $matches)) { - $localPart = $matches[1]; - $hostname = $this->idnToAscii($matches[2]); - $email = sprintf('%s@%s', $localPart, $hostname); - } + if (preg_match('/^(.*)\<(.+)@([^@]+)\>(.*)$/', $value, $matches)) { + $localPart = $matches[2]; + $hostname = $this->idnToAscii($matches[3]); + $email = sprintf('%s@%s', $localPart, $hostname); + } elseif (preg_match('/^(.+)@([^@]+)$/', $value, $matches)) { + $localPart = $matches[1]; + $hostname = $this->idnToAscii($matches[2]); + $email = sprintf('%s@%s', $localPart, $hostname); + } } if (empty($name)) { @@ -159,13 +163,6 @@ public function getFieldValue($format = HeaderInterface::FORMAT_RAW) } } - // Ensure the values are valid before sending them. - if ($format !== HeaderInterface::FORMAT_RAW) { - foreach ($emails as $email) { - HeaderValue::assertValid($email); - } - } - return implode(',' . Headers::FOLDING, $emails); } diff --git a/src/Header/GenericHeader.php b/src/Header/GenericHeader.php index faa986b9..0c88f269 100644 --- a/src/Header/GenericHeader.php +++ b/src/Header/GenericHeader.php @@ -127,7 +127,7 @@ public function setFieldValue($fieldValue) { $fieldValue = (string) $fieldValue; - if (! HeaderWrap::canBeEncoded($fieldValue)) { + if ($this->getFieldName() !== 'Thread-Topic' && ! HeaderWrap::canBeEncoded($fieldValue)) { throw new Exception\InvalidArgumentException( 'Header value must be composed of printable US-ASCII characters and valid folding sequences.' ); diff --git a/src/Header/Subject.php b/src/Header/Subject.php index df962c29..f983098a 100644 --- a/src/Header/Subject.php +++ b/src/Header/Subject.php @@ -77,7 +77,7 @@ public function getEncoding() public function setSubject($subject) { $subject = (string) $subject; - + $subject = HeaderWrap::canBeEncoded($subject) ? $subject : iconv('windows-1255', 'utf-8', $subject); if (! HeaderWrap::canBeEncoded($subject)) { throw new Exception\InvalidArgumentException( 'Subject value must be composed of printable US-ASCII or UTF-8 characters.'