X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=program%2Finclude%2Frcube_mail_mime.php;h=c86be499b5cefcfb0c333f79b53b7f05a112bc7b;hb=3adad46e27086084a8b28a32fc4fbc953dbfef6c;hp=866786b93aac78d57496a632f960d73adb748f04;hpb=48e8459231a1efa3e97284d07a328776a5b7485b;p=roundcube.git diff --git a/program/include/rcube_mail_mime.php b/program/include/rcube_mail_mime.php index 866786b..c86be49 100644 --- a/program/include/rcube_mail_mime.php +++ b/program/include/rcube_mail_mime.php @@ -27,6 +27,9 @@ */ class rcube_mail_mime extends Mail_mime { + + protected $mime_content; + /** * Set build parameters */ @@ -138,7 +141,7 @@ class rcube_mail_mime extends Mail_mime $value = trim($value); //This header contains non ASCII chars and should be encoded. - if (preg_match('#[\x80-\xFF]{1}#', $value)) { + if (preg_match('/[\x80-\xFF]{1}/', $value)) { $suffix = ''; // Don't encode e-mail address if (preg_match('/(.+)\s(<.+@[a-z0-9\-\.]+>)$/Ui', $value, $matches)) { @@ -157,9 +160,9 @@ class rcube_mail_mime extends Mail_mime default: // quoted-printable encoding has been selected $mode = 'Q'; - $encoded = preg_replace('/([\x2C\x3F\x80-\xFF])/e', "'='.sprintf('%02X', ord('\\1'))", $value); - // replace spaces with _ - $encoded = str_replace(' ', '_', $encoded); + // replace ?, =, _ and spaces + $encoded = str_replace(array('=','_','?',' '), array('=3D','=5F','=3F','_'), $value); + $encoded = preg_replace('/([\x80-\xFF])/e', "'='.sprintf('%02X', ord('\\1'))", $encoded); } $value = '=?' . $params['head_charset'] . '?' . $mode . '?' . $encoded . '?=' . $suffix; @@ -201,6 +204,21 @@ class rcube_mail_mime extends Mail_mime $result[] = substr($string, $p); return $result; } + + /** + * Provides caching of body of constructed MIME Message to avoid + * duplicate construction of message and damage of MIME headers + * + * @return string The mime content + * @access public + * @override + */ + public function &get($build_params = null) + { + if(empty($this->mime_content)) + $this->mime_content = parent::get($build_params); + return $this->mime_content; + } }