diff options
| -rw-r--r-- | CHANGELOG | 1 | ||||
| -rw-r--r-- | program/include/rcube_imap.php | 19 | 
2 files changed, 18 insertions, 2 deletions
@@ -1,6 +1,7 @@  CHANGELOG RoundCube Webmail  =========================== +- Fix attachment names encoding when charset isn't specified in attachment part (#1484969)  - Fix message normal priority problem (#1485820)  - Fix autocomplete spinning wheel does not disappear (#1485804)  - Added log_date_format option (#1485709) diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index e2b6c0d9a..6226c28c2 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -53,6 +53,7 @@ class rcube_imap    var $delimiter = NULL;    var $caching_enabled = FALSE;    var $default_charset = 'ISO-8859-1'; +  var $struct_charset = NULL;    var $default_folders = array('INBOX');    var $default_folders_lc = array('inbox');    var $fetch_add_headers = ''; @@ -1119,7 +1120,20 @@ class rcube_imap        {        $this->_msg_id = $msg_id;        $headers = $this->get_headers($uid); -       + +      // set message charset from message headers +      if ($headers->charset) +        $this->struct_charset = $headers->charset; +      // ... or from first part headers +      else if (is_array($structure[2]) && $structure[2][0] == 'charset') +        $this->struct_charset = $structure[2][1]; +      else if (is_array($structure[0][2]) && $structure[0][2][0] == 'charset') +        $this->struct_charset = $structure[0][2][1]; +      else if (is_array($structure[0][0][2]) && $structure[0][0][2][0] == 'charset') +        $this->struct_charset = $structure[0][0][2][1]; +      else +        $this->struct_charset = null; +        $struct = &$this->_structure_part($structure);        $struct->headers = get_object_vars($headers); @@ -1364,7 +1378,8 @@ class rcube_imap      // decode filename      if (!empty($filename_mime)) {        $part->filename = rcube_imap::decode_mime_string($filename_mime,  -        $part->charset ? $part->charset : rc_detect_encoding($filename_mime, $this->default_charset)); +        $part->charset ? $part->charset : $this->struct_charset ? $this->struct_charset : +	    rc_detect_encoding($filename_mime, $this->default_charset));        }       else if (!empty($filename_encoded)) {        // decode filename according to RFC 2231, Section 4  | 
