Quick Search:

Mode

Context

Displaying 3 lines of context. None | Less | More | Full

Other Diffs

Ignore

Blank Lines Whitespace:

Diff

757
 
1533
 
1533
 
mime.php
_><_ 1 -<?php
  2 -/*
  3 -  $Id: mime.php 757 2006-08-23 12:22:54Z hpdl $
  4 -
  5 -  osCommerce, Open Source E-Commerce Solutions
  6 -  http://www.oscommerce.com
  7 -
  8 -  Copyright (c) 2003 osCommerce
  9 -
  10 -  mime.php - a class to assist in building mime-HTML eMails
  11 -
  12 -  The original class was made by Richard Heyes <richard@phpguru.org>
  13 -  and can be found here: http://www.phpguru.org
  14 -
  15 -  Renamed and Modified by Jan Wildeboer for osCommerce
  16 -*/
  17 -
  18 -  class mime {
  19 -    var $_encoding;
  20 -    var $_subparts;
  21 -    var $_encoded;
  22 -    var $_headers;
  23 -    var $_body;
  24 -
  25 -/**
  26 - * Constructor.
  27 - *
  28 - * Sets up the object.
  29 - *
  30 - * @param $body   - The body of the mime part if any.
  31 - * @param $params - An associative array of parameters:
  32 - *                  content_type - The content type for this part eg multipart/mixed
  33 - *                  encoding     - The encoding to use, 7bit, base64, or quoted-printable
  34 - *                  cid          - Content ID to apply
  35 - *                  disposition  - Content disposition, inline or attachment
  36 - *                  dfilename    - Optional filename parameter for content disposition
  37 - *                  description  - Content description
  38 - * @access public
  39 - */
  40 -
  41 -    function mime($body, $params = '') {
  42 -      if ($params == '') $params = array();
  43 -
  44 -// Make sure we use the correct linfeed sequence
  45 -      if (EMAIL_LINEFEED == 'CRLF') {
  46 -        $this->lf = "\r\n";
  47 -      } else {
  48 -        $this->lf = "\n";
  49 -      }
  50 -
  51 -      reset($params);
  52 -      while (list($key, $value) = each($params)) {
  53 -        switch ($key) {
  54 -          case 'content_type':
  55 -            $headers['Content-Type'] = $value . (isset($charset) ? '; charset="' . $charset . '"' : '');
  56 -            break;
  57 -          case 'encoding':
  58 -            $this->_encoding = $value;
  59 -            $headers['Content-Transfer-Encoding'] = $value;
  60 -            break;
  61 -          case 'cid':
  62 -            $headers['Content-ID'] = '<' . $value . '>';
  63 -            break;
  64 -          case 'disposition':
  65 -            $headers['Content-Disposition'] = $value . (isset($dfilename) ? '; filename="' . $dfilename . '"' : '');
  66 -            break;
  67 -          case 'dfilename':
  68 -            if (isset($headers['Content-Disposition'])) {
  69 -              $headers['Content-Disposition'] .= '; filename="' . $value . '"';
  70 -            } else {
  71 -              $dfilename = $value;
  72 -            }
  73 -            break;
  74 -          case 'description':
  75 -            $headers['Content-Description'] = $value;
  76 -            break;
  77 -          case 'charset':
  78 -            if (isset($headers['Content-Type'])) {
  79 -              $headers['Content-Type'] .= '; charset="' . $value . '"';
  80 -            } else {
  81 -              $charset = $value;
  82 -            }
  83 -            break;
  84 -        }
  85 -      }
  86 -
  87 -// Default content-type
  88 -      if (!isset($_headers['Content-Type'])) {
  89 -        $_headers['Content-Type'] = 'text/plain';
  90 -      }
  91 -
  92 -// Assign stuff to member variables
  93 -      $this->_encoded = array();
  94 -/* HPDL PHP3 */
  95 -//      $this->_headers  =& $headers;
  96 -      $this->_headers = $headers;
  97 -      $this->_body = $body;
  98 -    }
  99 -
  100 -/**
  101 - * encode()
  102 - *
  103 - * Encodes and returns the email. Also stores
  104 - * it in the encoded member variable
  105 - *
  106 - * @return An associative array containing two elements,
  107 - *         body and headers. The headers element is itself
  108 - *         an indexed array.
  109 - * @access public
  110 - */
  111 -
  112 -    function encode() {
  113 -/* HPDL PHP3 */
  114 -//      $encoded =& $this->_encoded;
  115 -      $encoded = $this->_encoded;
  116 -
  117 -      if (!empty($this->_subparts)) {
  118 -        $boundary = '=_' . md5(uniqid(osc_rand()) . microtime());
  119 -        $this->_headers['Content-Type'] .= ';' . $this->lf . chr(9) . 'boundary="' . $boundary . '"';
  120 -
  121 -// Add body parts to $subparts
  122 -        for ($i=0; $i<count($this->_subparts); $i++) {
  123 -          $headers = array();
  124 -/* HPDL PHP3 */
  125 -//          $tmp = $this->_subparts[$i]->encode();
  126 -          $_subparts = $this->_subparts[$i];
  127 -          $tmp = $_subparts->encode();
  128 -
  129 -          reset($tmp['headers']);
  130 -          while (list($key, $value) = each($tmp['headers'])) {
  131 -            $headers[] = $key . ': ' . $value;
  132 -          }
  133 -
  134 -          $subparts[] = implode($this->lf, $headers) . $this->lf . $this->lf . $tmp['body'];
  135 -        }
  136 -
  137 -        $encoded['body'] = '--' . $boundary . $this->lf . implode('--' . $boundary . $this->lf, $subparts) . '--' . $boundary.'--' . $this->lf;
  138 -      } else {
  139 -        $encoded['body'] = $this->_getEncodedData($this->_body, $this->_encoding) . $this->lf;
  140 -      }
  141 -
  142 -// Add headers to $encoded
  143 -/* HPDL PHP3 */
  144 -//      $encoded['headers'] =& $this->_headers;
  145 -      $encoded['headers'] = $this->_headers;
  146 -
  147 -      return $encoded;
  148 -    }
  149 -
  150 -/**
  151 - * &addSubPart()
  152 - *
  153 - * Adds a subpart to current mime part and returns
  154 - * a reference to it
  155 - *
  156 - * @param $body   The body of the subpart, if any.
  157 - * @param $params The parameters for the subpart, same
  158 - *                as the $params argument for constructor.
  159 - * @return A reference to the part you just added. It is
  160 - *         crucial if using multipart/* in your subparts that
  161 - *         you use =& in your script when calling this function,
  162 - *         otherwise you will not be able to add further subparts.
  163 - * @access public
  164 - */
  165 -
  166 -/* HPDL PHP3 */
  167 -//    function &addSubPart($body, $params) {
  168 -    function addSubPart($body, $params) {
  169 -      $this->_subparts[] = new mime($body, $params);
  170 -
  171 -      return $this->_subparts[count($this->_subparts) - 1];
  172 -    }
  173 -
  174 -/**
  175 - * _getEncodedData()
  176 - *
  177 - * Returns encoded data based upon encoding passed to it
  178 - *
  179 - * @param $data     The data to encode.
  180 - * @param $encoding The encoding type to use, 7bit, base64,
  181 - *                  or quoted-printable.
  182 - * @access private
  183 - */
  184 -
  185 -    function _getEncodedData($data, $encoding) {
  186 -      switch ($encoding) {
  187 -       case '7bit':
  188 -         return $data;
  189 -         break;
  190 -       case 'quoted-printable':
  191 -         return $this->_quotedPrintableEncode($data);
  192 -         break;
  193 -       case 'base64':
  194 -         return rtrim(chunk_split(base64_encode($data), 76, $this->lf));
  195 -         break;
  196 -      }
  197 -    }
  198 -
  199 -/**
  200 - * quoteadPrintableEncode()
  201 - *
  202 - * Encodes data to quoted-printable standard.
  203 - *
  204 - * @param $input    The data to encode
  205 - * @param $line_max Optional max line length. Should
  206 - *                  not be more than 76 chars
  207 - *
  208 - * @access private
  209 - */
  210 -
  211 -    function _quotedPrintableEncode($input , $line_max = 76) {
  212 -      $lines = preg_split("/\r\n|\r|\n/", $input);
  213 -      $eol = $this->lf;
  214 -      $escape = '=';
  215 -      $output = '';
  216 -
  217 -      while (list(, $line) = each($lines)) {
  218 -        $linlen = strlen($line);
  219 -        $newline = '';
  220 -
  221 -        for ($i = 0; $i < $linlen; $i++) {
  222 -          $char = substr($line, $i, 1);
  223 -          $dec = ord($char);
  224 -
  225 -// convert space at eol only
  226 -          if ( ($dec == 32) && ($i == ($linlen - 1)) ) {
  227 -            $char = '=20';
  228 -          } elseif ($dec == 9) {
  229 -// Do nothing if a tab.
  230 -          } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) {
  231 -            $char = $escape . strtoupper(sprintf('%02s', dechex($dec)));
  232 -          }
  233 -
  234 -// $this->lf is not counted
  235 -          if ((strlen($newline) + strlen($char)) >= $line_max) {
  236 -// soft line break; " =\r\n" is okay
  237 -            $output .= $newline . $escape . $eol;
  238 -            $newline = '';
  239 -          }
  240 -          $newline .= $char;
  241 -        }
  242 -        $output .= $newline . $eol;
  243 -      }
  244 -// Don't want last crlf
  245 -      $output = substr($output, 0, -1 * strlen($eol));
  246 -
  247 -      return $output;
  248 -    }
  249 -  }
  250 -?>