- Fix incorrect word wrapping in outgoing plaintext multibyte messages (#1485714)

- Fix double footer in HTML message with embedded images
release-0.6
alecpl 15 years ago
parent dadb05b0af
commit 7145e009e4

@ -1,6 +1,8 @@
CHANGELOG RoundCube Webmail
===========================
- Fix incorrect word wrapping in outgoing plaintext multibyte messages (#1485714)
- Fix double footer in HTML message with embedded images
- Fix TNEF implementation bug (#1485773)
- Fix incorrect row id parsing for LDAP contacts list (#1485784)
- Fix 'mode' parameter in sqlite DSN (#1485772)

@ -405,6 +405,54 @@ function rc_strrpos($haystack, $needle, $offset=0)
return strrpos($haystack, $needle, $offset);
}
/**
* Wrapper function for wordwrap
*/
function rc_wordwrap($string, $width=75, $break="\n", $cut=false)
{
if (!function_exists('mb_substr') || !function_exists('mb_strlen'))
return wordwrap($string, $width, $break, $cut);
$para = explode($break, $string);
$string = '';
while (count($para)) {
$list = explode(' ', array_shift($para));
$len = 0;
while (count($list)) {
$line = array_shift($list);
$l = mb_strlen($line);
$newlen = $len + $l + ($len ? 1 : 0);
if ($newlen <= $width) {
$string .= ($len ? ' ' : '').$line;
$len += ($len ? 1 : 0) + $l;
} else {
if ($l > $width) {
if ($cut) {
$start = 0;
while ($l) {
$str = mb_substr($line, $start, $width);
$strlen = mb_strlen($str);
$string .= ($len ? $break : '').$str;
$start += $strlen;
$l -= $strlen;
$len = $strlen;
}
} else {
$string .= ($len ? $break : '').$line;
if (count($list)) $string .= $break;
$len = 0;
}
} else {
$string .= $break.$line;
$len = $l;
}
}
}
if (count($para)) $string .= $break;
}
return $string;
}
/**
* Read a specific HTTP request header

@ -490,7 +490,7 @@ function rcmail_create_reply_body($body, $bodyIsHtml)
}
// add title line(s)
$prefix = wordwrap(sprintf("On %s, %s wrote:\n",
$prefix = rc_wordwrap(sprintf("On %s, %s wrote:\n",
$MESSAGE->headers->date,
$MESSAGE->get_header('from')), 76);

@ -1179,7 +1179,7 @@ function rcmail_wrap_quoted($text, $max = 76)
$prefix = substr($line, 0, $length);
// Remove '> ' from the line, then wordwrap() the line
$line = wordwrap(substr($line, $length), $max - $length);
$line = rc_wordwrap(substr($line, $length), $max - $length);
// Rebuild the line with '> ' at the beginning of each 'subline'
$newline = '';
@ -1191,7 +1191,7 @@ function rcmail_wrap_quoted($text, $max = 76)
$line = rtrim($newline);
}
else {
$line = wordwrap($line, $max);
$line = rc_wordwrap($line, $max);
}
}
@ -1390,7 +1390,7 @@ function rcmail_send_mdn($uid)
"Disposition: manual-action/MDN-sent-manually; displayed\r\n";
$compose->headers($headers);
$compose->setTXTBody(wordwrap($body, 75, "\r\n"));
$compose->setTXTBody(rc_wordwrap($body, 75, "\r\n"));
$compose->addAttachment($report, 'message/disposition-notification', 'MDNPart2.txt', false, '7bit', 'inline');
$sent = rcmail_deliver_message($compose, $identity['email'], $mailto);

@ -302,10 +302,10 @@ if ($isHtml)
$MAIL_MIME->setHTMLBody($message_body . ($footer ? "\r\n<pre>".$footer.'</pre>' : ''));
// add a plain text version of the e-mail as an alternative part.
$h2t = new html2text($message_body);
$plainTextPart = $h2t->get_text() . ($footer ? "\r\n".$footer : '');
$h2t = new html2text($message_body, false, true, 0);
$plainTextPart = rc_wordwrap($h2t->get_text(), 75, "\r\n"). ($footer ? "\r\n".$footer : '');
$plainTextPart = wordwrap($plainTextPart, 998, "\r\n", true);
if (!strlen($plainTextPart))
if (!strlen($plainTextPart))
{
// empty message body breaks attachment handling in drafts
$plainTextPart = "\r\n";
@ -317,7 +317,7 @@ if ($isHtml)
}
else
{
$message_body = wordwrap($message_body, 75, "\r\n");
$message_body = rc_wordwrap($message_body, 75, "\r\n");
if ($footer)
$message_body .= "\r\n" . $footer;
$message_body = wordwrap($message_body, 998, "\r\n", true);
@ -342,7 +342,7 @@ if (is_array($_SESSION['compose']['attachments']))
if ($isHtml && ($match > 0))
{
$message_body = preg_replace($dispurl, ' src="'.$attachment['name'].'" ', $message_body);
$MAIL_MIME->setHTMLBody($message_body. ($footer ? "\r\n<pre>".$footer.'</pre>' : ''));
$MAIL_MIME->setHTMLBody($message_body);
$MAIL_MIME->addHTMLImage($attachment['path'], $attachment['mimetype'], $attachment['name']);
}
else

Loading…
Cancel
Save