summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Flatz2016-02-08 19:09:52 +0100
committerDavid Flatz2016-02-08 19:09:52 +0100
commit5edca4f4d3fd9894855bf5d271a2ee00cefebdab (patch)
tree97d2a3e745624b2be5642123fca14c6d3228685d
parent66a0c9f49176ec3309b94ea232fbbd92735454ae (diff)
downloaditools-5edca4f4d3fd9894855bf5d271a2ee00cefebdab.tar.gz
itools-5edca4f4d3fd9894855bf5d271a2ee00cefebdab.tar.bz2
itools-5edca4f4d3fd9894855bf5d271a2ee00cefebdab.zip
encode header with base64 when quoted-printable fails because of php bug #53891
-rw-r--r--it_mail.class7
-rwxr-xr-xtests/it_mail.t6
2 files changed, 12 insertions, 1 deletions
diff --git a/it_mail.class b/it_mail.class
index aa242c5..6c4398f 100644
--- a/it_mail.class
+++ b/it_mail.class
@@ -305,7 +305,12 @@ function send($p = array())
function header_escape($string)
{
return preg_match('/[\x00-\x1f\x7f-\xff]/', $string)
- ? ltrim(iconv_mime_encode('', $string, array('scheme' => 'Q', 'input-charset' => $this->charset, 'output-charset' => $this->charset)), ' :')
+ ? ltrim(
+ ($encoded = @iconv_mime_encode('', $string, array('scheme' => 'Q', 'input-charset' => $this->charset, 'output-charset' => $this->charset))) !== false
+ ? $encoded
+ : iconv_mime_encode('', $string, array('scheme' => 'B', 'input-charset' => $this->charset, 'output-charset' => $this->charset)),
+ ' :'
+ )
: $string;
}
diff --git a/tests/it_mail.t b/tests/it_mail.t
index 41ca3d1..486dee8 100755
--- a/tests/it_mail.t
+++ b/tests/it_mail.t
@@ -19,6 +19,12 @@ is(
);
is(
+ $mail->header_escape('search.ch e-mail code d\'accès'),
+ '=?utf-8?B?c2VhcmNoLmNoIGUtbWFpbCBjb2RlIGQnYWNjw6hz?=',
+ "Use base64 encoding when php iconv fails with quoted-printable (workaround for php bug #53891)"
+);
+
+is(
$mail->addrlist_escape('Èxample User <èxample@example.com>', true),
'=?utf-8?Q?=C3=88xample=20User?= <èxample@example.com>',
"Escape name but not email in email headers"