summaryrefslogtreecommitdiff
path: root/program/include
diff options
context:
space:
mode:
Diffstat (limited to 'program/include')
-rw-r--r--program/include/rcube_imap.php30
1 files changed, 20 insertions, 10 deletions
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 6226c28c2..323979b77 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -1124,15 +1124,8 @@ class rcube_imap
// 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;
+ $this->struct_charset = $this->_structure_charset($structure);
$struct = &$this->_structure_part($structure);
$struct->headers = get_object_vars($headers);
@@ -1390,8 +1383,25 @@ class rcube_imap
$part->filename = rcube_charset_convert(urldecode($filename_encoded), $filename_charset);
}
}
-
-
+
+
+ /**
+ * Get charset name from message structure (first part)
+ *
+ * @access private
+ * @param array Message structure
+ * @return string Charset name
+ */
+ function _structure_charset($structure)
+ {
+ while (is_array($structure)) {
+ if (is_array($structure[2]) && $structure[2][0] == 'charset')
+ return $structure[2][1];
+ $structure = $structure[0];
+ }
+ }
+
+
/**
* Fetch message body of a specific message from the server
*