diff options
Diffstat (limited to 'program/steps/mail')
-rw-r--r-- | program/steps/mail/func.inc | 10 | ||||
-rw-r--r-- | program/steps/mail/getunread.inc | 1 | ||||
-rw-r--r-- | program/steps/mail/sendmail.inc | 28 |
3 files changed, 24 insertions, 15 deletions
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 8ebd1c59c..4c6e56a50 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -148,7 +148,7 @@ function rcmail_build_folder_tree(&$arrFolders, $folder, $delm='/', $path='') if (!isset($arrFolders[$currentFolder])) { $arrFolders[$currentFolder] = array('id' => $path, - 'name' => $currentFolder, + 'name' => UTF7DecodeString($currentFolder), 'folders' => array()); } @@ -160,7 +160,7 @@ function rcmail_build_folder_tree(&$arrFolders, $folder, $delm='/', $path='') // return html for a structured list <ul> for the mailbox tree function rcmail_render_folder_tree_html(&$arrFolders, &$special, &$mbox, $maxlength, $nestLevel=0) { - global $JS_OBJECT_NAME, $IMAP, $CONFIG; + global $JS_OBJECT_NAME, $IMAP, $CONFIG, $OUTPUT; $idx = 0; $out = ''; @@ -174,7 +174,7 @@ function rcmail_render_folder_tree_html(&$arrFolders, &$special, &$mbox, $maxlen $foldername = rcube_label($folder_lc); else { - $foldername = UTF7DecodeString($folder['name']); + $foldername = $OUTPUT->encode_string($folder['name']); // shorten the folder name to a given length if ($maxlength && $maxlength>1) @@ -231,7 +231,7 @@ function rcmail_render_folder_tree_html(&$arrFolders, &$special, &$mbox, $maxlen // return html for a flat list <select> for the mailbox tree function rcmail_render_folder_tree_select(&$arrFolders, &$special, &$mbox, $maxlength, $nestLevel=0) { - global $IMAP; + global $IMAP, $OUTPUT; $idx = 0; $out = ''; @@ -242,7 +242,7 @@ function rcmail_render_folder_tree_select(&$arrFolders, &$special, &$mbox, $maxl $foldername = rcube_label($folder_lc); else { - $foldername = UTF7DecodeString($folder['name']); + $foldername = $OUTPUT->encode_string($folder['name']); // shorten the folder name to a given length if ($maxlength && $maxlength>1) diff --git a/program/steps/mail/getunread.inc b/program/steps/mail/getunread.inc index d35dcf9f1..260221719 100644 --- a/program/steps/mail/getunread.inc +++ b/program/steps/mail/getunread.inc @@ -29,6 +29,7 @@ if (!empty($a_folders)) { $commands = sprintf("this.set_unread_count('%s', %d);\n", $mbox, $IMAP->messagecount($mbox, 'UNSEEN')); rcube_remote_response($commands, TRUE); + ob_flush(); } } diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc index c29fcf1d3..ee278189a 100644 --- a/program/steps/mail/sendmail.inc +++ b/program/steps/mail/sendmail.inc @@ -77,6 +77,11 @@ if (empty($_POST['_to']) && empty($_POST['_subject']) && $_POST['_message']) if (empty($CHARSET)) $CHARSET = 'ISO-8859-1'; +$input_charset = $CHARSET; +$message_charset = isset($_POST['_charset']) ? $_POST['_charset'] : $input_charset; + +// unset global var +$CHARSET = ''; $mailto_regexp = array('/[,;]\s*[\r\n]+/', '/[\r\n]+/', '/[,;]\s*$/m'); $mailto_replace = array(', ', ', ', ''); @@ -100,20 +105,20 @@ $message_id = sprintf('<%s@%s>', md5(uniqid('rcmail')), $_SESSION['imap_host']); // compose headers array $headers = array('Date' => date('D, j M Y G:i:s O'), 'From' => $identity_arr['string'], - 'To' => $mailto); + 'To' => rcube_charset_convert($mailto, $input_charset, $message_charset)); // additional recipients if ($_POST['_cc']) - $headers['Cc'] = preg_replace($mailto_regexp, $mailto_replace, stripslashes($_POST['_cc'])); + $headers['Cc'] = rcube_charset_convert(preg_replace($mailto_regexp, $mailto_replace, stripslashes($_POST['_cc'])), $input_charset, $message_charset); if ($_POST['_bcc']) - $headers['Bcc'] = preg_replace($mailto_regexp, $mailto_replace, stripslashes($_POST['_bcc'])); + $headers['Bcc'] = rcube_charset_convert(preg_replace($mailto_regexp, $mailto_replace, stripslashes($_POST['_bcc'])), $input_charset, $message_charset); if (strlen($identity_arr['bcc'])) $headers['Bcc'] = ($headers['Bcc'] ? $headers['Bcc'].', ' : '') . $identity_arr['bcc']; // add subject -$headers['Subject'] = trim(stripslashes($_POST['_subject'])); +$headers['Subject'] = rcube_charset_convert(trim(stripslashes($_POST['_subject'])), $input_charset, $message_charset); if (strlen($identity_arr['organization'])) $headers['Organization'] = $identity_arr['organization']; @@ -141,6 +146,8 @@ $headers['X-Sender'] = $from; if ($CONFIG['useragent']) $headers['User-Agent'] = $CONFIG['useragent']; +// fetch message body +$message_body = rcube_charset_convert(stripslashes($_POST['_message']), $input_charset, $message_charset); // append generic footer to all messages if (!empty($CONFIG['generic_message_footer'])) @@ -150,7 +157,7 @@ if (!empty($CONFIG['generic_message_footer'])) { $content = fread($fp, filesize($file)); fclose($fp); - $_POST['_message'] .= "\r\n" . $content; + $message_body .= "\r\n" . rcube_charset_convert($content, 'UTF-8', $message_charset); } } @@ -160,8 +167,8 @@ $header_delm = $rcmail_config['mail_header_delimiter'] ? $rcmail_config['mail_he // create PEAR::Mail_mime instance $MAIL_MIME = new Mail_mime($header_delm); -$MAIL_MIME->setTXTBody(stripslashes($_POST['_message']), FALSE, TRUE); -//$MAIL_MIME->setTXTBody(wordwrap(stripslashes($_POST['_message'])), FALSE, TRUE); +$MAIL_MIME->setTXTBody($message_body, FALSE, TRUE); +//$MAIL_MIME->setTXTBody(wordwrap($message_body), FALSE, TRUE); // add stored attachments, if any @@ -176,8 +183,6 @@ if (is_array($_FILES['_attachments']['tmp_name'])) $MAIL_MIME->addAttachment($filepath, $files['type'][$i], $files['name'][$i], TRUE); -$message_charset = isset($_POST['_charset']) ? $_POST['_charset'] : $CHARSET; - // encoding settings for mail composing $message_param = array('text_encoding' => '7bit', 'html_encoding' => 'quoted-printable', @@ -230,7 +235,7 @@ else // reset stored headers and overwrite $MAIL_MIME->_headers = array(); $header_str = $MAIL_MIME->txtHeaders($headers_php); - + if(ini_get('safe_mode')) $sent = mail($headers_enc['To'], $headers_enc['Subject'], $msg_body, $header_str); else @@ -238,6 +243,9 @@ else } +// resore page charset +$CHARSET = $input_charset; + // return to compose page if sending failed if (!$sent) { |