diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 9ea164fa..da699d6e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -46,7 +46,7 @@ jobs: php-version: ${{ matrix.php }} coverage: xdebug ini-values: sendmail_path=/usr/sbin/sendmail -t -i, zend.multibyte=1, zend.script_encoding=UTF-8, default_charset=UTF-8 - extensions: xdebug, imap, mbstring, ctype, filter, hash + extensions: xdebug, imap, mbstring, intl, ctype, filter, hash - name: Install PHP packages run: composer install --no-interaction diff --git a/test/PHPMailerTest.php b/test/PHPMailerTest.php index 1164f6a4..3d4f8a66 100644 --- a/test/PHPMailerTest.php +++ b/test/PHPMailerTest.php @@ -901,25 +901,26 @@ final class PHPMailerTest extends TestCase $this->Mail->isMail(); //Expected results - $bencoderes = '=?UTF-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6k=?=' . + $bencoderes = '=?utf-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6k=?=' . PHPMailer::getLE() . - ' =?UTF-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6k=?=' . + ' =?utf-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6k=?=' . PHPMailer::getLE() . - ' =?UTF-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6k=?=' . + ' =?utf-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6k=?=' . PHPMailer::getLE() . - ' =?UTF-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqQ==?='; - $qencoderes = '=?UTF-8?Q?eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee?=' . + ' =?utf-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqQ==?='; + $qencoderes = '=?utf-8?Q?eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee?=' . PHPMailer::getLE() . - ' =?UTF-8?Q?eeeeeeeeeeeeeeeeeeeeeeeeee=C3=A9?='; - $bencodenofoldres = '=?UTF-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6k=?='; - $qencodenofoldres = '=?UTF-8?Q?eeeeeeeee=C3=A9?='; + ' =?utf-8?Q?eeeeeeeeeeeeeeeeeeeeeeeeee=C3=A9?='; + $bencodenofoldres = '=?utf-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6k=?='; + $qencodenofoldres = '=?utf-8?Q?eeeeeeeee=C3=A9?='; $longheaderres = '=?us-ascii?Q?eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee?=' . PHPMailer::getLE() . ' =?us-ascii?Q?eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee?='; - $longutf8res = '=?UTF-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6k=?=' . - PHPMailer::getLE() . ' =?UTF-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6k=?=' . - PHPMailer::getLE() . ' =?UTF-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6k=?=' . - PHPMailer::getLE() . ' =?UTF-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqQ==?='; + $longutf8res = '=?utf-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6k=?=' . + PHPMailer::getLE() . ' =?utf-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6k=?=' . + PHPMailer::getLE() . ' =?utf-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6k=?=' . + PHPMailer::getLE() . ' =?utf-8?B?w6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqcOpw6nDqQ==?='; $noencoderes = 'eeeeeeeeee'; + $this->Mail->CharSet = PHPMailer::CHARSET_UTF8; self::assertEquals( $bencoderes, $this->Mail->encodeHeader($bencode), @@ -3116,8 +3117,14 @@ EOT; { if (file_exists($this->INCLUDE_DIR . '/test/fakefunctions.php')) { include $this->INCLUDE_DIR . '/test/fakefunctions.php'; + //This source file is in UTF-8, so characters here are in native charset + $this->Mail->CharSet = PHPMailer::CHARSET_UTF8; $result = $this->Mail->punyencodeAddress('test@françois.ch'); - $this->assertEquals('test@xn--franois-bja35c.ch', $result); + $this->assertEquals('test@xn--franois-xxa.ch', $result); + //To force working another charset, decode an ASCII string to avoid literal string charset issues + $this->Mail->CharSet = PHPMailer::CHARSET_ISO88591; + $result = $this->Mail->punyencodeAddress(html_entity_decode('test@françois.ch', ENT_COMPAT, 'ISO-8859-1')); + $this->assertEquals('test@xn--franois-xxa.ch', $result); } }