| | |
| | | |
| | | $message_body = preg_replace( |
| | | array( |
| | | // remove empty signature div |
| | | '/<div id="_rc_sig">( )?<\/div>[\s\r\n]*$/', |
| | | // remove signature's div ID |
| | | '/\s*id="_rc_sig"/', |
| | | // add inline css for blockquotes and container |
| | | '/<blockquote>/', |
| | | '/<div class="pre">/' |
| | | '/<div class="pre">/', |
| | | // convert TinyMCE's new-line sequences (#1490463) |
| | | '/<p> <\/p>/', |
| | | ), |
| | | array( |
| | | '', |
| | | '', |
| | | '<blockquote type="cite" style="'.$b_style.'">', |
| | | '<div class="pre" style="'.$pre_style.'">' |
| | | '<div class="pre" style="'.$pre_style.'">', |
| | | '<p><br /></p>', |
| | | ), |
| | | $message_body); |
| | | } |
| | |
| | | |
| | | $MAIL_MIME->setHTMLBody($plugin['body']); |
| | | |
| | | // replace emoticons |
| | | $plugin['body'] = $RCMAIL->replace_emoticons($plugin['body']); |
| | | |
| | | // add a plain text version of the e-mail as an alternative part. |
| | | $h2t = new rcube_html2text($plugin['body'], false, true, 0, $message_charset); |
| | | $plainTextPart = rcube_mime::wordwrap($h2t->get_text(), $LINE_LENGTH, "\r\n", false, $message_charset); |
| | | $plainTextPart = $RCMAIL->html2text($plugin['body'], array('width' => 0, 'charset' => $message_charset)); |
| | | $plainTextPart = rcube_mime::wordwrap($plainTextPart, $LINE_LENGTH, "\r\n", false, $message_charset); |
| | | $plainTextPart = wordwrap($plainTextPart, 998, "\r\n", true); |
| | | |
| | | // make sure all line endings are CRLF (#1486712) |
| | |
| | | $plugin = $RCMAIL->plugins->exec_hook('message_outgoing_body', |
| | | array('body' => $plainTextPart, 'type' => 'alternative', 'message' => $MAIL_MIME)); |
| | | |
| | | // add a plain text version of the e-mail as an alternative part. |
| | | $MAIL_MIME->setTXTBody($plugin['body']); |
| | | |
| | | // look for "emoticon" images from TinyMCE and change their src paths to |
| | | // be file paths on the server instead of URL paths. |
| | | rcmail_fix_emoticon_paths($MAIL_MIME); |
| | | |
| | | // Extract image Data URIs into message attachments (#1488502) |
| | | rcmail_extract_inline_images($MAIL_MIME, $from); |
| | |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * go from this: |
| | | * <img src="http[s]://.../tinymce/plugins/emoticons/img/smiley-cool.gif" border="0" alt="Cool" title="Cool" /> |
| | | * |
| | | * to this: |
| | | * |
| | | * <img src="/path/on/server/.../tinymce/plugins/emoticons/img/smiley-cool.gif" border="0" alt="Cool" title="Cool" /> |
| | | */ |
| | | function rcmail_fix_emoticon_paths($mime_message) |
| | | { |
| | | global $RCMAIL; |
| | | |
| | | $body = $mime_message->getHTMLBody(); |
| | | |
| | | // remove any null-byte characters before parsing |
| | | $body = preg_replace('/\x00/', '', $body); |
| | | |
| | | $searchstr = 'program/js/tinymce/plugins/emoticons/img/'; |
| | | $assets_dir = $RCMAIL->config->get('assets_dir'); |
| | | $path = ($assets_dir ?: INSTALL_PATH) . '/' . $searchstr; |
| | | $offset = 0; |
| | | |
| | | // keep track of added images, so they're only added once |
| | | $included_images = array(); |
| | | |
| | | 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 = $path . $image_name; |
| | | |
| | | if (!in_array($image_name, $included_images)) { |
| | | // add the image to the MIME message |
| | | $res = $mime_message->addHTMLImage($img_file, 'image/gif', '', true, $image_name); |
| | | if (is_a($res, 'PEAR_Error')) { |
| | | $RCMAIL->output->show_message("emoticonerror", 'error'); |
| | | continue; |
| | | } |
| | | |
| | | 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]); |
| | | } |
| | | } |
| | | } |
| | | |
| | | $mime_message->setHTMLBody($body); |
| | | } |
| | | |
| | | /** |