Skip to content

Commit 9d6a2d5

Browse files
committed
Header value decoding improved Webklex#410
1 parent d3b9eaf commit 9d6a2d5

File tree

5 files changed

+46
-7
lines changed

5 files changed

+46
-7
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) princip
77
## [UNRELEASED]
88
### Fixed
99
- Legacy protocol support fixed (object to array conversion) #411
10+
- Header value decoding improved #410
1011

1112
### Added
1213
- NaN

src/Header.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -421,22 +421,24 @@ public function decode(mixed $value): mixed {
421421
$decoder = $this->config['decoder']['message'];
422422

423423
if ($value !== null) {
424-
if ($decoder === 'utf-8' && extension_loaded('imap')) {
424+
if ($decoder === 'utf-8') {
425425
$decoded_values = $this->mime_header_decode($value);
426426
$tempValue = "";
427427
foreach ($decoded_values as $decoded_value) {
428428
$tempValue .= $this->convertEncoding($decoded_value->text, $decoded_value->charset);
429429
}
430430
if ($tempValue) {
431431
$value = $tempValue;
432-
} else {
432+
} else if (extension_loaded('imap')) {
433433
$value = \imap_utf8($value);
434+
}else if (function_exists('iconv_mime_decode')){
435+
$value = iconv_mime_decode($value, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, "UTF-8");
436+
}else{
437+
$value = mb_decode_mimeheader($value);
434438
}
435-
} elseif ($decoder === 'iconv' && $this->is_uft8($value)) {
439+
}elseif ($decoder === 'iconv') {
436440
$value = iconv_mime_decode($value, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, "UTF-8");
437-
}
438-
439-
if ($this->is_uft8($value)) {
441+
}else if ($this->is_uft8($value)) {
440442
$value = mb_decode_mimeheader($value);
441443
}
442444

tests/fixtures/ImapMimeHeaderDecodeReturnsFalseTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class ImapMimeHeaderDecodeReturnsFalseTest extends FixtureTestCase {
2727
public function testFixture() : void {
2828
$message = $this->getFixture("imap_mime_header_decode_returns_false.eml");
2929

30-
self::assertEquals("?p?#]ݰ?[??W̌N??LL?̍L??NL˜", $message->subject->first());
30+
self::assertEquals("=?UTF-8?B?nnDusSNdG92w6Fuw61fMjAxOF8wMy0xMzMyNTMzMTkzLnBkZg==?=", $message->subject->first());
3131
self::assertEquals("Hi", $message->getTextBody());
3232
self::assertFalse($message->hasHTMLBody());
3333
self::assertEquals("2017-09-13 11:05:45", $message->date->first()->setTimezone('UTC')->format("Y-m-d H:i:s"));

tests/issues/Issue410Test.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
/*
3+
* File: Issue410Test.php
4+
* Category: -
5+
* Author: M.Goldenbaum
6+
* Created: 23.06.23 20:41
7+
* Updated: -
8+
*
9+
* Description:
10+
* -
11+
*/
12+
13+
namespace Tests\issues;
14+
15+
use PHPUnit\Framework\TestCase;
16+
use Webklex\PHPIMAP\Message;
17+
18+
class Issue410Test extends TestCase {
19+
20+
public function testIssueEmail() {
21+
$filename = implode(DIRECTORY_SEPARATOR, [__DIR__, "..", "messages", "issue-410.eml"]);
22+
$message = Message::fromFile($filename);
23+
24+
self::assertSame("☆第132号 「ガーデン&エクステリア」専門店のためのQ&Aサロン 【月刊エクステリア・ワーク】", (string)$message->subject);
25+
}
26+
27+
}

tests/messages/issue-410.eml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
3+
Subject: =?ISO-2022-JP?B?GyRCIXlCaBsoQjEzMhskQjlmISEhViUsITwlRyVzGyhCJhskQiUoJS8lOSVGJWolIiFXQGxMZ0U5JE4kPyRhJE4jURsoQiYbJEIjQSU1JW0lcyEhIVo3bjQpJSglLyU5JUYlaiUiISYlbyE8JS8hWxsoQg==?=
4+
Date: Wed, 13 Sep 2017 13:05:45 +0200
5+
Content-Type: text/plain;
6+
charset="us-ascii"
7+
Content-Transfer-Encoding: quoted-printable
8+
9+
Hi

0 commit comments

Comments
 (0)