summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG1
-rw-r--r--program/include/main.inc38
-rw-r--r--program/steps/mail/sendmail.inc12
-rw-r--r--program/steps/utils/html2text.inc7
4 files changed, 53 insertions, 5 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 8f9b0b5a1..312c4a29d 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -14,6 +14,7 @@ CHANGELOG Roundcube Webmail
- Add possibility to move a subfolder into root folder (#1486791)
- Fix copying all messages in a folder copies only messages from current page
- Improve performance of moving or copying of all messages in a folder
+- Fix plaintext versions of HTML messages don't contain placeholders for emotions (#1485206)
RELEASE 0.5-BETA
----------------
diff --git a/program/include/main.inc b/program/include/main.inc
index 6d4e19c36..ad0bccd48 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -1647,6 +1647,43 @@ function rcube_html_editor($mode='')
/**
+ * Replaces TinyMCE's emoticon images with plain-text representation
+ *
+ * @param string HTML content
+ * @return string HTML content
+ */
+function rcmail_replace_emoticons($html)
+{
+ $emoticons = array(
+ '8-)' => 'smiley-cool',
+ ':-#' => 'smiley-foot-in-mouth',
+ ':-*' => 'smiley-kiss',
+ ':-X' => 'smiley-sealed',
+ ':-P' => 'smiley-tongue-out',
+ ':-@' => 'smiley-yell',
+ ":'(" => 'smiley-cry',
+ ':-(' => 'smiley-frown',
+ ':-D' => 'smiley-laughing',
+ ':-)' => 'smiley-smile',
+ ':-/' => 'smiley-undecided',
+ ':-X' => 'smiley-embarassed',
+ '0:-)' => 'smiley-innocent',
+ ':-|' => 'smiley-money-mouth',
+ ':-0' => 'smiley-surprised',
+ ';-)' => 'smiley-wink',
+ );
+
+ foreach ($emoticons as $idx => $file) {
+ // <img title="Cry" src="http://.../program/js/tiny_mce/plugins/emotions/img/smiley-cry.gif" border="0" alt="Cry" />
+ $search[] = '/<img title="[a-z ]+" src="https?:\/\/[a-z0-9_.\/-]+\/tiny_mce\/plugins\/emotions\/img\/'.$file.'.gif"[^>]+\/>/i';
+ $replace[] = $idx;
+ }
+
+ return preg_replace($search, $replace, $html);
+}
+
+
+/**
* Check if working in SSL mode
*
* @param integer HTTPS port number
@@ -1881,3 +1918,4 @@ function log_bug($arg_arr)
flush();
}
}
+
diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc
index 95b490969..a796c7ba7 100644
--- a/program/steps/mail/sendmail.inc
+++ b/program/steps/mail/sendmail.inc
@@ -70,7 +70,7 @@ function rcmail_encrypt_header($what)
function rcmail_get_identity($id)
{
global $USER, $OUTPUT;
-
+
if ($sql_arr = $USER->get_identity($id)) {
$out = $sql_arr;
$out['mailto'] = $sql_arr['email'];
@@ -100,7 +100,7 @@ function rcmail_fix_emoticon_paths(&$mime_message)
// remove any null-byte characters before parsing
$body = preg_replace('/\x00/', '', $body);
-
+
$searchstr = 'program/js/tiny_mce/plugins/emotions/img/';
$offset = 0;
@@ -193,6 +193,7 @@ function rcmail_email_input_format($mailto, $count=false, $check=true)
return implode(', ', $result);
}
+
/****** compose message ********/
if (strlen($_POST['_draft_saveid']) > 3)
@@ -441,13 +442,16 @@ if ($isHtml) {
$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 html2text($plugin['body'], false, true, 0);
$plainTextPart = rc_wordwrap($h2t->get_text(), $LINE_LENGTH, "\r\n");
$plainTextPart = wordwrap($plainTextPart, 998, "\r\n", true);
if (!$plainTextPart) {
- // empty message body breaks attachment handling in drafts
- $plainTextPart = "\r\n";
+ // empty message body breaks attachment handling in drafts
+ $plainTextPart = "\r\n";
}
else {
// make sure all line endings are CRLF (#1486712)
diff --git a/program/steps/utils/html2text.inc b/program/steps/utils/html2text.inc
index ef74ec49e..15c6a52a4 100644
--- a/program/steps/utils/html2text.inc
+++ b/program/steps/utils/html2text.inc
@@ -19,7 +19,12 @@
*/
-$converter = new html2text($HTTP_RAW_POST_DATA);
+$html = $HTTP_RAW_POST_DATA;
+
+// Replace emoticon images with its text representation
+$html = rcmail_replace_emoticons($html);
+
+$converter = new html2text($html);
header('Content-Type: text/plain; charset=UTF-8');
print rtrim($converter->get_text());