From cb2bc809ef29f349d38c89e202d821e67bb4c947 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Tue, 21 Sep 2010 14:47:55 -0400 Subject: [PATCH] Fix db_mode check in insert_id() --- program/steps/mail/sendmail.inc | 68 ++++++++++++++++++++++------------ 1 files changed, 44 insertions(+), 24 deletions(-) diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc index d6143d8..3902b9a 100644 --- a/program/steps/mail/sendmail.inc +++ b/program/steps/mail/sendmail.inc @@ -205,7 +205,7 @@ if (strlen($_POST['_draft_saveid']) > 3) $olddraftmessageid = get_input_value('_draft_saveid', RCUBE_INPUT_POST); -$message_id = sprintf('<%s@%s>', md5(uniqid('rcmail'.mt_rand(),true)), $RCMAIL->config->mail_domain($_SESSION['imap_host'])); +$message_id = rcmail_gen_message_id(); // set default charset $input_charset = $OUTPUT->get_charset(); @@ -249,7 +249,7 @@ // if configured, the Received headers goes to top, for good measure if ($CONFIG['http_received_header']) { - $nldlm = $RCMAIL->config->header_delimiter() . "\t"; + $nldlm = "\r\n\t"; // FROM/VIA $http_header = 'from '; if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { @@ -287,7 +287,7 @@ $headers['Received'] = $http_header; } -$headers['Date'] = date('r'); +$headers['Date'] = rcmail_user_date(); $headers['From'] = rcube_charset_convert($identity_arr['string'], RCMAIL_CHARSET, $message_charset); $headers['To'] = $mailto; @@ -358,7 +358,7 @@ $headers['User-Agent'] = $CONFIG['useragent']; // exec hook for header checking and manipulation -$data = $RCMAIL->plugins->exec_hook('outgoing_message_headers', array('headers' => $headers)); +$data = $RCMAIL->plugins->exec_hook('message_outgoing_headers', array('headers' => $headers)); // sending aborted by plugin if ($data['abort'] && !$savedraft) { @@ -384,11 +384,20 @@ $message_body = preg_replace('/<blockquote>/', '<blockquote type="cite" style="'.$bstyle.'">', $message_body); } + // generic footer for all messages - if (!empty($CONFIG['generic_message_footer'])) { + if ($isHtml && !empty($CONFIG['generic_message_footer_html'])) { + $footer = file_get_contents(realpath($CONFIG['generic_message_footer_html'])); + $footer = rcube_charset_convert($footer, RCMAIL_CHARSET, $message_charset); + } + else if (!empty($CONFIG['generic_message_footer'])) { $footer = file_get_contents(realpath($CONFIG['generic_message_footer'])); $footer = rcube_charset_convert($footer, RCMAIL_CHARSET, $message_charset); + if ($isHtml) + $footer = '<pre>'.$footer.'</pre>'; } + if ($footer) + $message_body .= "\r\n" . $footer; } // set line length for body wrapping @@ -398,7 +407,7 @@ @set_time_limit(0); // create PEAR::Mail_mime instance -$MAIL_MIME = new Mail_mime($RCMAIL->config->header_delimiter()); +$MAIL_MIME = new Mail_mime("\r\n"); // Check if we have enough memory to handle the message in it // It's faster than using files, so we'll do this if we only can @@ -419,18 +428,27 @@ // the HTML part and the plain-text part if ($isHtml) { - $plugin = $RCMAIL->plugins->exec_hook('outgoing_message_body', array('body' => $message_body, 'type' => 'html', 'message' => $MAIL_MIME)); - $MAIL_MIME->setHTMLBody($plugin['body'] . ($footer ? "\r\n<pre>".$footer.'</pre>' : '')); + $plugin = $RCMAIL->plugins->exec_hook('message_outgoing_body', + array('body' => $message_body, 'type' => 'html', 'message' => $MAIL_MIME)); + + $MAIL_MIME->setHTMLBody($plugin['body']); // add a plain text version of the e-mail as an alternative part. $h2t = new html2text($plugin['body'], false, true, 0); - $plainTextPart = rc_wordwrap($h2t->get_text(), $LINE_LENGTH, "\r\n") . ($footer ? "\r\n".$footer : ''); + $plainTextPart = rc_wordwrap($h2t->get_text(), $LINE_LENGTH, "\r\n"); $plainTextPart = wordwrap($plainTextPart, 998, "\r\n", true); - if (!strlen($plainTextPart)) { + if (!$plainTextPart) { // empty message body breaks attachment handling in drafts $plainTextPart = "\r\n"; } - $plugin = $RCMAIL->plugins->exec_hook('outgoing_message_body', array('body' => $plainTextPart, 'type' => 'alternative', 'message' => $MAIL_MIME)); + else { + // make sure all line endings are CRLF (#1486712) + $plainTextPart = preg_replace('/\r?\n/', "\r\n", $plainTextPart); + } + + $plugin = $RCMAIL->plugins->exec_hook('message_outgoing_body', + array('body' => $plainTextPart, 'type' => 'alternative', 'message' => $MAIL_MIME)); + $MAIL_MIME->setTXTBody($plugin['body']); // look for "emoticon" images from TinyMCE and change their src paths to @@ -438,22 +456,24 @@ $message_body = rcmail_fix_emoticon_paths($MAIL_MIME); } else { - if ($footer) - $message_body .= "\r\n" . $footer; - - // compose format=flowed content if enabled and not a reply message - if (empty($_SESSION['compose']['reply_msgid']) && ($flowed = $RCMAIL->config->get('send_format_flowed', true))) - $message_body = rcube_message::format_flowed($message_body, $LINE_LENGTH); + $plugin = $RCMAIL->plugins->exec_hook('message_outgoing_body', + array('body' => $message_body, 'type' => 'plain', 'message' => $MAIL_MIME)); + + $message_body = $plugin['body']; + + // compose format=flowed content if enabled + if ($flowed = $RCMAIL->config->get('send_format_flowed', true)) + $message_body = rcube_message::format_flowed($message_body, min($LINE_LENGTH+2, 79)); else $message_body = rc_wordwrap($message_body, $LINE_LENGTH, "\r\n"); - + $message_body = wordwrap($message_body, 998, "\r\n", true); if (!strlen($message_body)) { // empty message body breaks attachment handling in drafts $message_body = "\r\n"; } - $plugin = $RCMAIL->plugins->exec_hook('outgoing_message_body', array('body' => $message_body, 'type' => 'plain', 'message' => $MAIL_MIME)); - $MAIL_MIME->setTXTBody($plugin['body'], false, true); + + $MAIL_MIME->setTXTBody($message_body, false, true); } // add stored attachments, if any @@ -461,9 +481,9 @@ { foreach ($_SESSION['compose']['attachments'] as $id => $attachment) { // This hook retrieves the attachment contents from the file storage backend - $attachment = $RCMAIL->plugins->exec_hook('get_attachment', $attachment); + $attachment = $RCMAIL->plugins->exec_hook('attachment_get', $attachment); - $dispurl = '/\ssrc\s*=\s*[\'"]*\S+display-attachment\S+file=rcmfile' . preg_quote($attachment['id']) . '[\s\'"]\s*/'; + $dispurl = '/\ssrc\s*=\s*[\'"]*\S+display-attachment\S+file=rcmfile' . preg_quote($attachment['id']) . '[\s\'"]*/'; $message_body = $MAIL_MIME->getHTMLBody(); if ($isHtml && (preg_match($dispurl, $message_body) > 0)) { $message_body = preg_replace($dispurl, ' src="'.$attachment['name'].'" ', $message_body); @@ -512,7 +532,7 @@ { mb_internal_encoding($message_charset); $headers['Subject'] = mb_encode_mimeheader($headers['Subject'], - $message_charset, 'Q', $RCMAIL->config->header_delimiter(), 8); + $message_charset, 'Q', "\r\n", 8); mb_internal_encoding(RCMAIL_CHARSET); } @@ -675,4 +695,4 @@ $OUTPUT->send('iframe'); } -?> + -- Gitblit v1.9.1