summaryrefslogtreecommitdiff
path: root/program/steps/mail
diff options
context:
space:
mode:
Diffstat (limited to 'program/steps/mail')
-rw-r--r--program/steps/mail/sendmail.inc56
1 files changed, 26 insertions, 30 deletions
diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc
index b065c2a25..5f12f3fe9 100644
--- a/program/steps/mail/sendmail.inc
+++ b/program/steps/mail/sendmail.inc
@@ -98,47 +98,43 @@ function rcmail_attach_emoticons(&$mime_message)
{
global $CONFIG;
- $htmlContents = $mime_message->getHtmlBody();
+ $body = $mime_message->getHtmlBody();
// remove any null-byte characters before parsing
- $body = preg_replace('/\x00/', '', $htmlContents);
+ $body = preg_replace('/\x00/', '', $body);
- $last_img_pos = 0;
$searchstr = 'program/js/tiny_mce/plugins/emotions/img/';
- $path_len = strlen(INSTALL_PATH . '/');
+ $offset = 0;
// keep track of added images, so they're only added once
$included_images = array();
- // find emoticon image tags
- while ($pos = strpos($body, $searchstr, $last_img_pos))
- {
- $pos2 = strpos($body, '"', $pos);
- $body_pre = substr($body, 0, $pos);
- $body_post = substr($body, $pos2);
-
- $image_name = substr($body,
- $pos + strlen($searchstr),
- $pos2 - ($pos + strlen($searchstr)));
-
- // sanitize image name so resulting attachment doesn't leave images dir
- $image_name = preg_replace('/[^a-zA-Z0-9_\.\-]/i','',$image_name);
- $img_file = INSTALL_PATH . '/' . $searchstr . $image_name;
-
- if (! in_array($image_name, $included_images))
- {
- // add the image to the MIME message
- if(! $mime_message->addHTMLImage($img_file, 'image/gif', '', true, $image_name))
- $OUTPUT->show_message("emoticonerror", 'error');
- array_push($included_images, $image_name);
+ if (preg_match_all('# src=[\'"]([^\'"]+)#', $body, $matches, PREG_OFFSET_CAPTURE)) {
+ foreach ($matches[1] as $m) {
+ // find emoticon image tags
+ if (preg_match('#'.$searchstr.'(.*)$#', $m[0], $imatches)) {
+ $image_name = $imatches[1];
+
+ // sanitize image name so resulting attachment doesn't leave images dir
+ $image_name = preg_replace('/[^a-zA-Z0-9_\.\-]/i', '', $image_name);
+ $img_file = INSTALL_PATH . '/' . $searchstr . $image_name;
+
+ if (! in_array($image_name, $included_images)) {
+ // add the image to the MIME message
+ if(! $mime_message->addHTMLImage($img_file, 'image/gif', '', true, $image_name))
+ $OUTPUT->show_message("emoticonerror", 'error');
+ array_push($included_images, $image_name);
+ }
+
+ $body = substr_replace($body, $img_file, $m[1] + $offset, strlen($m[0]));
+ $offset += strlen($img_file) - strlen($m[0]);
}
-
- $body = $body_pre . $img_file . $body_post;
-
- $last_img_pos = $pos2 + $path_len;
}
+ }
$mime_message->setHTMLBody($body);
+
+ return $body;
}
@@ -276,7 +272,7 @@ if ($isHtml)
$MAIL_MIME->setTXTBody($plainTextPart);
// look for "emoticon" images from TinyMCE and copy into message as attachments
- rcmail_attach_emoticons($MAIL_MIME);
+ $message_body = rcmail_attach_emoticons($MAIL_MIME);
}
else
{