Commit 0c849336 authored by YANO Takashi's avatar YANO Takashi

ZP-1172 Some mails bodies or headers in Japanese may be decoded in wrong...

ZP-1172 Some mails bodies or headers in Japanese may be decoded in wrong encoding. Released under the Affero GNU General Public License (AGPL) version 3.
parent affb95a8
...@@ -1030,6 +1030,13 @@ class BackendIMAP extends BackendDiff implements ISearchProvider { ...@@ -1030,6 +1030,13 @@ class BackendIMAP extends BackendDiff implements ISearchProvider {
$mobj = new Mail_mimeDecode($mail); $mobj = new Mail_mimeDecode($mail);
$message = $mobj->decode(array('decode_headers' => true, 'decode_bodies' => true, 'include_bodies' => true, 'rfc_822bodies' => true, 'charset' => 'utf-8')); $message = $mobj->decode(array('decode_headers' => true, 'decode_bodies' => true, 'include_bodies' => true, 'rfc_822bodies' => true, 'charset' => 'utf-8'));
if ( strpos($message->headers["subject"], chr(0x1b).'$B') !== false ) {
$message->headers["subject"] = mb_convert_encoding($message->headers["subject"], "utf-8", "ISO-2022-JP-MS");
}
if ( strpos($message->headers["from"], chr(0x1b).'$B') !== false ) {
$message->headers["from"] = mb_convert_encoding($message->headers["from"], "utf-8", "ISO-2022-JP-MS");
}
$is_multipart = is_multipart($message); $is_multipart = is_multipart($message);
$is_smime = is_smime($message); $is_smime = is_smime($message);
$is_encrypted = $is_smime ? is_encrypted($message) : false; $is_encrypted = $is_smime ? is_encrypted($message) : false;
...@@ -1099,6 +1106,10 @@ class BackendIMAP extends BackendDiff implements ISearchProvider { ...@@ -1099,6 +1106,10 @@ class BackendIMAP extends BackendDiff implements ISearchProvider {
break; break;
} }
if ( strpos($data, chr(0x1b).'$B') !== false ) {
$data = mb_convert_encoding($data, "utf-8", "ISO-2022-JP-MS");
}
// truncate body, if requested. // truncate body, if requested.
// MIME should not be truncated, but encrypted messages are truncated always to the headers size // MIME should not be truncated, but encrypted messages are truncated always to the headers size
if ($bpReturnType == SYNC_BODYPREFERENCE_MIME) { if ($bpReturnType == SYNC_BODYPREFERENCE_MIME) {
......
...@@ -335,6 +335,13 @@ class BackendMaildir extends BackendDiff { ...@@ -335,6 +335,13 @@ class BackendMaildir extends BackendDiff {
$message = Mail_mimeDecode::decode(array('decode_headers' => true, 'decode_bodies' => true, 'include_bodies' => true, 'input' => $rfc822, 'crlf' => "\n", 'charset' => 'utf-8')); $message = Mail_mimeDecode::decode(array('decode_headers' => true, 'decode_bodies' => true, 'include_bodies' => true, 'input' => $rfc822, 'crlf' => "\n", 'charset' => 'utf-8'));
if ( strpos($message->headers["subject"], chr(0x1b).'$B') !== false ) {
$message->headers["subject"] = mb_convert_encoding($message->headers["subject"], "utf-8", "ISO-2022-JP-MS");
}
if ( strpos($message->headers["from"], chr(0x1b).'$B') !== false ) {
$message->headers["from"] = mb_convert_encoding($message->headers["from"], "utf-8", "ISO-2022-JP-MS");
}
$output = new SyncMail(); $output = new SyncMail();
$output->body = str_replace("\n", "\r\n", $this->getBody($message)); $output->body = str_replace("\n", "\r\n", $this->getBody($message));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment