Commit 554ed204 authored by Sebastian Kummer's avatar Sebastian Kummer

Merge pull request #483 in ZP/z-push from...

Merge pull request #483 in ZP/z-push from bugfix/ZP-1172-some-mails-bodies-or-headers-in-japanese to develop

* commit 'ae1e82f0':
  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.
  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.
  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.
  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.
parents a5206cb4 ae1e82f0
...@@ -1030,6 +1030,9 @@ class BackendIMAP extends BackendDiff implements ISearchProvider { ...@@ -1030,6 +1030,9 @@ 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'));
Utils::CheckAndFixEncoding($message->headers["subject"]);
Utils::CheckAndFixEncoding($message->headers["from"]);
$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;
...@@ -1070,6 +1073,8 @@ class BackendIMAP extends BackendDiff implements ISearchProvider { ...@@ -1070,6 +1073,8 @@ class BackendIMAP extends BackendDiff implements ISearchProvider {
if (Request::GetProtocolVersion() >= 12.0) { if (Request::GetProtocolVersion() >= 12.0) {
$output->asbody = new SyncBaseBody(); $output->asbody = new SyncBaseBody();
Utils::CheckAndFixEncoding($textBody);
$data = ""; $data = "";
switch($bpReturnType) { switch($bpReturnType) {
case SYNC_BODYPREFERENCE_PLAIN: case SYNC_BODYPREFERENCE_PLAIN:
......
...@@ -142,6 +142,9 @@ function change_charset_and_add_subparts(&$email, $part) { ...@@ -142,6 +142,9 @@ function change_charset_and_add_subparts(&$email, $part) {
$new_part = null; $new_part = null;
if (isset($part->ctype_parameters['charset'])) { if (isset($part->ctype_parameters['charset'])) {
$part->ctype_parameters['charset'] = 'UTF-8'; $part->ctype_parameters['charset'] = 'UTF-8';
Utils::CheckAndFixEncoding($part->body);
$new_part = add_sub_part($email, $part); $new_part = add_sub_part($email, $part);
} }
else { else {
...@@ -233,6 +236,8 @@ function build_mime_message($message) { ...@@ -233,6 +236,8 @@ function build_mime_message($message) {
} }
} }
Utils::CheckAndFixEncoding($message->body);
$finalEmail = new Mail_mimePart(isset($message->body) ? $message->body : "", $mimeHeaders); $finalEmail = new Mail_mimePart(isset($message->body) ? $message->body : "", $mimeHeaders);
unset($mimeHeaders); unset($mimeHeaders);
......
...@@ -335,6 +335,9 @@ class BackendMaildir extends BackendDiff { ...@@ -335,6 +335,9 @@ 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'));
Utils::CheckAndFixEncoding($message->headers["subject"]);
Utils::CheckAndFixEncoding($message->headers["from"]);
$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));
......
...@@ -1175,6 +1175,21 @@ class Utils { ...@@ -1175,6 +1175,21 @@ class Utils {
public static function IsFolderToBeProcessedByKoe($folder) { public static function IsFolderToBeProcessedByKoe($folder) {
return isset($folder->displayname) && substr($folder->displayname, -3) == hex2bin("e2808b"); return isset($folder->displayname) && substr($folder->displayname, -3) == hex2bin("e2808b");
} }
/**
* Check if the UTF-8 string has ISO-2022-JP esc seq
* if so, it is ISO-2022-JP, not UTF-8 and convert it into UTF-8
* string
*
* @access public
* @param $string
* @return $string
*/
public static function CheckAndFixEncoding(&$string) {
if ( isset($string) && strpos($string, chr(0x1b).'$B') !== false ) {
$string = mb_convert_encoding($string, "utf-8", "ISO-2022-JP-MS");
}
}
} }
......
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