diff options
Diffstat (limited to 'program/lib/Mail/mimePart.php')
| -rw-r--r-- | program/lib/Mail/mimePart.php | 104 | 
1 files changed, 40 insertions, 64 deletions
| diff --git a/program/lib/Mail/mimePart.php b/program/lib/Mail/mimePart.php index 55ea7a670..60b3601e0 100644 --- a/program/lib/Mail/mimePart.php +++ b/program/lib/Mail/mimePart.php @@ -141,17 +141,19 @@ class Mail_mimePart      *     content_type      - The content type for this part eg multipart/mixed      *     encoding          - The encoding to use, 7bit, 8bit,      *                         base64, or quoted-printable +    *     charset           - Content character set      *     cid               - Content ID to apply      *     disposition       - Content disposition, inline or attachment      *     dfilename         - Filename parameter for content disposition      *     description       - Content description -    *     charset           - Character set to use -    *     name_encoding     - Encoding for attachment name (Content-Type) +    *     name_encoding     - Encoding of the attachment name (Content-Type)      *                         By default filenames are encoded using RFC2231      *                         Here you can set RFC2047 encoding (quoted-printable      *                         or base64) instead -    *     filename_encoding - Encoding for attachment filename (Content-Disposition) +    *     filename_encoding - Encoding of the attachment filename (Content-Disposition)      *                         See 'name_encoding' +    *     headers_charset   - Charset of the headers e.g. filename, description. +    *                         If not set, 'charset' will be used      *     eol               - End of line sequence. Default: "\r\n"      *     body_file         - Location of file with part's body (instead of $body)      * @@ -165,14 +167,8 @@ class Mail_mimePart              $this->_eol = MAIL_MIMEPART_CRLF;          } -        $c_type = array(); -        $c_disp = array();          foreach ($params as $key => $value) {              switch ($key) { -            case 'content_type': -                $c_type['type'] = $value; -                break; -              case 'encoding':                  $this->_encoding = $value;                  $headers['Content-Transfer-Encoding'] = $value; @@ -182,29 +178,6 @@ class Mail_mimePart                  $headers['Content-ID'] = '<' . $value . '>';                  break; -            case 'disposition': -                $c_disp['disp'] = $value; -                break; - -            case 'dfilename': -                $c_disp['filename'] = $value; -                $c_type['name'] = $value; -                break; - -            case 'description': -                $headers['Content-Description'] = $value; -                break; - -            case 'charset': -                $c_type['charset'] = $value; -                $c_disp['charset'] = $value; -                break; - -            case 'language': -                $c_type['language'] = $value; -                $c_disp['language'] = $value; -                break; -              case 'location':                  $headers['Content-Location'] = $value;                  break; @@ -216,53 +189,56 @@ class Mail_mimePart          }          // Default content-type -        if (empty($c_type['type'])) { -            $c_type['type'] = 'text/plain'; +        if (empty($params['content_type'])) { +            $params['content_type'] = 'text/plain';          }          // Content-Type -        if (!empty($c_type['type'])) { -            $headers['Content-Type'] = $c_type['type']; -            if (!empty($c_type['charset'])) { -                $charset = "charset={$c_type['charset']}"; -                // place charset parameter in the same line, if possible -                if ((strlen($headers['Content-Type']) + strlen($charset) + 16) <= 76) { -                    $headers['Content-Type'] .= '; '; -                } else { -                    $headers['Content-Type'] .= ';' . $this->_eol . ' '; -                } -                $headers['Content-Type'] .= $charset; +        $headers['Content-Type'] = $params['content_type']; +        if (!empty($params['charset'])) { +            $charset = "charset={$params['charset']}"; +            // place charset parameter in the same line, if possible +            if ((strlen($headers['Content-Type']) + strlen($charset) + 16) <= 76) { +                $headers['Content-Type'] .= '; '; +            } else { +                $headers['Content-Type'] .= ';' . $this->_eol . ' ';              } -            if (!empty($c_type['name'])) { -                $headers['Content-Type'] .= ';' . $this->_eol; -                $headers['Content-Type'] .= $this->_buildHeaderParam( -                    'name', $c_type['name'], -                    isset($c_type['charset']) ? $c_type['charset'] : 'US-ASCII', -                    isset($c_type['language']) ? $c_type['language'] : null, -                    isset($params['name_encoding']) ?  $params['name_encoding'] : null -                ); +            $headers['Content-Type'] .= $charset; + +            // Default headers charset +            if (!isset($params['headers_charset'])) { +                $params['headers_charset'] = $params['charset'];              }          } +        if (!empty($params['filename'])) { +            $headers['Content-Type'] .= ';' . $this->_eol; +            $headers['Content-Type'] .= $this->_buildHeaderParam( +                'name', $params['filename'], +                !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII', +                !empty($params['language']) ? $params['language'] : null, +                !empty($params['name_encoding']) ? $params['name_encoding'] : null +            ); +        }          // Content-Disposition -        if (!empty($c_disp['disp'])) { -            $headers['Content-Disposition'] = $c_disp['disp']; -            if (!empty($c_disp['filename'])) { +        if (!empty($params['disposition'])) { +            $headers['Content-Disposition'] = $params['disposition']; +            if (!empty($params['filename'])) {                  $headers['Content-Disposition'] .= ';' . $this->_eol;                  $headers['Content-Disposition'] .= $this->_buildHeaderParam( -                    'filename', $c_disp['filename'], -                    isset($c_disp['charset']) ? $c_disp['charset'] : 'US-ASCII', -                    isset($c_disp['language']) ? $c_disp['language'] : null, -                    isset($params['filename_encoding']) ?  $params['filename_encoding'] : null +                    'filename', $params['filename'], +                    !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII', +                    !empty($params['language']) ? $params['language'] : null, +                    !empty($params['filename_encoding']) ? $params['filename_encoding'] : null                  );              }          } -        if (!empty($headers['Content-Description'])) { +        if (!empty($params['description'])) {              $headers['Content-Description'] = $this->encodeHeader( -                'Content-Description', $headers['Content-Description'], -                isset($c_type['charset']) ? $c_type['charset'] : 'US-ASCII', -                isset($params['name_encoding']) ?  $params['name_encoding'] : 'quoted-printable', +                'Content-Description', $params['description'], +                !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII', +                !empty($params['name_encoding']) ? $params['name_encoding'] : 'quoted-printable',                  $this->_eol              );          } | 
