Fix issue where mails with inline images of the same name contained only the first image multiple times (#1489406)

pull/154/head
Aleksander Machniak 11 years ago
parent 64cb702847
commit e28b12259f

@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail CHANGELOG Roundcube Webmail
=========================== ===========================
- Fix issue where mails with inline images of the same name contained only the first image multiple times (#1489406)
- Use left/right arrow keys to collapse/expand thread and spacebar to select a row, change Ctrl key behavior (#1489392) - Use left/right arrow keys to collapse/expand thread and spacebar to select a row, change Ctrl key behavior (#1489392)
- Fix an issue where using arrow keys to go up a list can result in selected message being under headers (#1489403) - Fix an issue where using arrow keys to go up a list can result in selected message being under headers (#1489403)
- Fix an issue where Home/End keys don't focus list row properly, don't scrollTo properly (#1489396) - Fix an issue where Home/End keys don't focus list row properly, don't scrollTo properly (#1489396)

@ -162,7 +162,7 @@ function rcmail_editor_images()
for (i in files) { for (i in files) {
att = files[i]; att = files[i];
if (att.complete && att.mimetype.startsWith('image/')) { if (att.complete && att.mimetype.startsWith('image/')) {
list.push([att.name, rcmail.env.comm_path+'&_action=display-attachment&_file='+i+'&_id='+rcmail.env.compose_id]); list.push([att.name, rcmail.env.comm_path+'&_id='+rcmail.env.compose_id+'&_action=display-attachment&_file='+i]);
} }
} }

@ -615,22 +615,39 @@ else {
} }
// add stored attachments, if any // add stored attachments, if any
if (is_array($COMPOSE['attachments'])) if (is_array($COMPOSE['attachments'])) {
{
foreach ($COMPOSE['attachments'] as $id => $attachment) { foreach ($COMPOSE['attachments'] as $id => $attachment) {
// This hook retrieves the attachment contents from the file storage backend // This hook retrieves the attachment contents from the file storage backend
$attachment = $RCMAIL->plugins->exec_hook('attachment_get', $attachment); $attachment = $RCMAIL->plugins->exec_hook('attachment_get', $attachment);
$dispurl = '/\ssrc\s*=\s*[\'"]*\S+display-attachment\S+file=rcmfile' . preg_quote($attachment['id']) . '[\s\'"]*/'; if ($isHtml) {
$message_body = $MAIL_MIME->getHTMLBody(); $dispurl = '/\ssrc\s*=\s*[\'"]*\S+display-attachment\S+file=rcmfile' . preg_quote($attachment['id']) . '[\s\'"]*/';
if ($isHtml && (preg_match($dispurl, $message_body) > 0)) { $message_body = $MAIL_MIME->getHTMLBody();
$message_body = preg_replace($dispurl, ' src="'.$attachment['name'].'" ', $message_body); $is_inline = preg_match($dispurl, $message_body);
}
else {
$is_inline = false;
}
// inline image
if ($is_inline) {
// Mail_Mime does not support many inline attachments with the same name (#1489406)
// we'll generate cid: urls here to workaround this
$cid = preg_replace('/[^0-9a-zA-Z]/', '', uniqid(time(), true));
if (preg_match('#(@[0-9a-zA-Z\-\.]+)#', $from, $matches)) {
$cid .= $matches[1];
} else {
$cid .= '@localhost';
}
$message_body = preg_replace($dispurl, ' src="cid:' . $cid . '" ', $message_body);
$MAIL_MIME->setHTMLBody($message_body); $MAIL_MIME->setHTMLBody($message_body);
if ($attachment['data']) if ($attachment['data'])
$MAIL_MIME->addHTMLImage($attachment['data'], $attachment['mimetype'], $attachment['name'], false); $MAIL_MIME->addHTMLImage($attachment['data'], $attachment['mimetype'], $attachment['name'], false, $cid);
else else
$MAIL_MIME->addHTMLImage($attachment['path'], $attachment['mimetype'], $attachment['name'], true); $MAIL_MIME->addHTMLImage($attachment['path'], $attachment['mimetype'], $attachment['name'], true, $cid);
} }
else { else {
$ctype = str_replace('image/pjpeg', 'image/jpeg', $attachment['mimetype']); // #1484914 $ctype = str_replace('image/pjpeg', 'image/jpeg', $attachment['mimetype']); // #1484914

Loading…
Cancel
Save