alecpl
2010-01-26 2273d4117fd50ee44dcdaa28fd6444383dc403a0
program/include/rcube_mail_mime.php
@@ -5,7 +5,7 @@
 | program/include/rcube_mail_mime.php                                   |
 |                                                                       |
 | This file is part of the RoundCube Webmail client                     |
 | Copyright (C) 2007-2008, RoundCube Dev. - Switzerland                 |
 | Copyright (C) 2007-2009, RoundCube Dev. - Switzerland                 |
 | Licensed under the GNU GPL                                            |
 |                                                                       |
 | PURPOSE:                                                              |
@@ -15,7 +15,7 @@
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
 $Id: sendmail.inc 506 2007-03-14 00:39:51Z thomasb $
 $Id$
*/
@@ -95,22 +95,6 @@
  
  
  /**
   * Creates a new mimePart object, using multipart/mixed as
   * the initial content-type and returns it during the
   * build process.
   *
   * @return object  The multipart/mixed mimePart object
   * @access private
   */
  function &_addMixedPart()
  {
    $params['content_type'] = $this->_headers['Content-Type'] ? $this->_headers['Content-Type'] : 'multipart/mixed';
    $ret = new Mail_mimePart('', $params);
    return $ret;
  }
  /**
   * Encodes a header as per RFC2047
   *
   * @param  array $input The header data to encode
@@ -128,7 +112,7 @@
    {
      // if header contains e-mail addresses
      if (preg_match('/\s<.+@[a-z0-9\-\.]+\.[a-z]+>/U', $hdr_value)) {
        $chunks = $this->_explode_quoted_string(',', $hdr_value);
        $chunks = rcube_explode_quoted_string(',', $hdr_value);
      }
      else {
        $chunks = array($hdr_value);
@@ -141,7 +125,7 @@
        $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)) {
@@ -160,9 +144,9 @@
            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;
@@ -180,31 +164,13 @@
        }
      }
      $input[$hdr_name] = $hdr_value;
      $input[$hdr_name] = wordwrap($hdr_value, 990, "\n", true);  // hard limit header length
    }
    return $input;
  }
  function _explode_quoted_string($delimiter, $string)
  {
    $result = array();
    $strlen = strlen($string);
    for ($q=$p=$i=0; $i < $strlen; $i++) {
      if ($string{$i} == "\"" && $string{$i-1} != "\\") {
        $q = $q ? false : true;
      }
      else if (!$q && $string{$i} == $delimiter) {
        $result[] = substr($string, $p, $i - $p);
        $p = $i + 1;
      }
    }
    $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