]> git.donarmstrong.com Git - roundcube.git/blobdiff - program/include/rcube_mail_mime.php
Imported Upstream version 0.2~stable
[roundcube.git] / program / include / rcube_mail_mime.php
index 866786b93aac78d57496a632f960d73adb748f04..c86be499b5cefcfb0c333f79b53b7f05a112bc7b 100644 (file)
@@ -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;
+  }
 
 }