From ecb9fb058da8d0f5a8e59402c1c1ced21122cbc5 Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Mon, 22 Jun 2009 12:20:34 -0400 Subject: [PATCH] - use RCMAIL_CHARSET instead of hardcoded 'utf-8' --- program/steps/mail/sendmail.inc | 70 +++++++++++++++++++++++----------- 1 files changed, 47 insertions(+), 23 deletions(-) diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc index 7423226..d550a42 100644 --- a/program/steps/mail/sendmail.inc +++ b/program/steps/mail/sendmail.inc @@ -55,6 +55,17 @@ /****** message sending functions ********/ +// encrypt parts of the header +function rcmail_encrypt_header($what) +{ + global $CONFIG, $RCMAIL; + if (!$CONFIG['http_received_header_encrypt']) + { + return $what; + } + return $RCMAIL->encrypt($what); +} + // get identity record function rcmail_get_identity($id) { @@ -138,7 +149,7 @@ } // parse email address input -function rcmail_mailto_format($mailto) +function rcmail_email_input_format($mailto) { $regexp = array('/[,;]\s*[\r\n]+/', '/[\r\n]+/', '/[,;]\s*$/m', '/;/', '/(\S{1})(<\S+@\S+>)/U'); $replace = array(', ', ', ', '', ',', '\\1 \\2'); @@ -189,9 +200,9 @@ $input_charset = $OUTPUT->get_charset(); $message_charset = isset($_POST['_charset']) ? $_POST['_charset'] : $input_charset; -$mailto = rcmail_mailto_format(get_input_value('_to', RCUBE_INPUT_POST, TRUE, $message_charset)); -$mailcc = rcmail_mailto_format(get_input_value('_cc', RCUBE_INPUT_POST, TRUE, $message_charset)); -$mailbcc = rcmail_mailto_format(get_input_value('_bcc', RCUBE_INPUT_POST, TRUE, $message_charset)); +$mailto = rcmail_email_input_format(get_input_value('_to', RCUBE_INPUT_POST, TRUE, $message_charset)); +$mailcc = rcmail_email_input_format(get_input_value('_cc', RCUBE_INPUT_POST, TRUE, $message_charset)); +$mailbcc = rcmail_email_input_format(get_input_value('_bcc', RCUBE_INPUT_POST, TRUE, $message_charset)); if (empty($mailto) && !empty($mailcc)) { $mailto = $mailcc; @@ -201,19 +212,42 @@ $mailto = 'undisclosed-recipients:;'; // get sender name and address -$from = get_input_value('_from', RCUBE_INPUT_POST); +$from = get_input_value('_from', RCUBE_INPUT_POST, true, $message_charset); $identity_arr = rcmail_get_identity($from); -if ($identity_arr) +if (!$identity_arr && ($from = rcmail_email_input_format($from))) { + if (preg_match('/(\S+@\S+)/', $from, $m)) + $identity_arr['mailto'] = $m[1]; +} else $from = $identity_arr['mailto']; if (empty($identity_arr['string'])) $identity_arr['string'] = $from; // compose headers array -$headers = array('Date' => date('r'), - 'From' => rcube_charset_convert($identity_arr['string'], RCMAIL_CHARSET, $message_charset), - 'To' => $mailto); +$headers = array(); + +// if configured, the Received headers goes to top, for good measure +if ($CONFIG['http_received_header']) +{ + $nldlm = $RCMAIL->config->header_delimiter() . "\t"; + $http_header = 'from '; + if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { + $http_header .= rcmail_encrypt_header(gethostbyaddr($_SERVER['HTTP_X_FORWARDED_FOR'])) . + ' [' . rcmail_encrypt_header($_SERVER['HTTP_X_FORWARDED_FOR']) . ']'; + $http_header .= $nldlm . ' via '; + } + $http_header .= rcmail_encrypt_header(gethostbyaddr($_SERVER['REMOTE_ADDR'])) . + ' [' . rcmail_encrypt_header($_SERVER['REMOTE_ADDR']) .']'; + $http_header .= $nldlm . 'with ' . $_SERVER['SERVER_PROTOCOL'] . + ' ('.$_SERVER['REQUEST_METHOD'] . '); ' . date('r'); + $http_header = wordwrap($http_header, 69, $nldlm); + $headers['Received'] = $http_header; +} + +$headers['Date'] = date('r'); +$headers['From'] = rcube_charset_convert($identity_arr['string'], RCMAIL_CHARSET, $message_charset); +$headers['To'] = $mailto; // additional recipients if (!empty($mailcc)) @@ -232,7 +266,7 @@ $headers['Organization'] = $identity_arr['organization']; if (!empty($_POST['_replyto'])) - $headers['Reply-To'] = rcmail_mailto_format(get_input_value('_replyto', RCUBE_INPUT_POST, TRUE, $message_charset)); + $headers['Reply-To'] = rcmail_email_input_format(get_input_value('_replyto', RCUBE_INPUT_POST, TRUE, $message_charset)); else if (!empty($identity_arr['reply-to'])) $headers['Reply-To'] = $identity_arr['reply-to']; @@ -257,16 +291,6 @@ } // additional headers -if ($CONFIG['http_received_header']) -{ - $nldlm = $RCMAIL->config->header_delimiter() . "\t"; - $headers['Received'] = wordwrap('from ' . (isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? - gethostbyaddr($_SERVER['HTTP_X_FORWARDED_FOR']).' ['.$_SERVER['HTTP_X_FORWARDED_FOR'].']'.$nldlm.' via ' : '') . - gethostbyaddr($_SERVER['REMOTE_ADDR']).' ['.$_SERVER['REMOTE_ADDR'].']'.$nldlm.'with ' . - $_SERVER['SERVER_PROTOCOL'].' ('.$_SERVER['REQUEST_METHOD'].'); ' . date('r'), - 69, $nldlm); -} - $headers['Message-ID'] = $message_id; $headers['X-Sender'] = $from; @@ -287,7 +311,7 @@ // generic footer for all messages if (!empty($CONFIG['generic_message_footer'])) { $footer = file_get_contents(realpath($CONFIG['generic_message_footer'])); - $footer = rcube_charset_convert($footer, 'UTF-8', $message_charset); + $footer = rcube_charset_convert($footer, RCMAIL_CHARSET, $message_charset); } } @@ -432,9 +456,9 @@ // set replied/forwarded flag if ($_SESSION['compose']['reply_uid']) - $IMAP->set_flag($_SESSION['compose']['reply_uid'], 'ANSWERED'); + $IMAP->set_flag($_SESSION['compose']['reply_uid'], 'ANSWERED', $_SESSION['compose']['mailbox']); else if ($_SESSION['compose']['forward_uid']) - $IMAP->set_flag($_SESSION['compose']['forward_uid'], 'FORWARDED'); + $IMAP->set_flag($_SESSION['compose']['forward_uid'], 'FORWARDED', $_SESSION['compose']['mailbox']); } // End of SMTP Delivery Block -- Gitblit v1.9.1