File indexing completed on 2024-05-12 06:02:47
0001 <?php 0002 /** 0003 * Zend Framework 0004 * 0005 * LICENSE 0006 * 0007 * This source file is subject to the new BSD license that is bundled 0008 * with this package in the file LICENSE.txt. 0009 * It is also available through the world-wide-web at this URL: 0010 * http://framework.zend.com/license/new-bsd 0011 * If you did not receive a copy of the license and are unable to 0012 * obtain it through the world-wide-web, please send an email 0013 * to license@zend.com so we can send you a copy immediately. 0014 * 0015 * @category Zend 0016 * @package Zend_Mime 0017 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0018 * @license http://framework.zend.com/license/new-bsd New BSD License 0019 * @version $Id$ 0020 */ 0021 0022 /** 0023 * Zend_Mime 0024 */ 0025 // require_once 'Zend/Mime.php'; 0026 0027 /** 0028 * Class representing a MIME part. 0029 * 0030 * @category Zend 0031 * @package Zend_Mime 0032 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0033 * @license http://framework.zend.com/license/new-bsd New BSD License 0034 */ 0035 class Zend_Mime_Part 0036 { 0037 0038 /** 0039 * Type 0040 * 0041 * @var string 0042 */ 0043 public $type = Zend_Mime::TYPE_OCTETSTREAM; 0044 0045 /** 0046 * Encoding 0047 * 0048 * @var string 0049 */ 0050 public $encoding = Zend_Mime::ENCODING_8BIT; 0051 0052 /** 0053 * ID 0054 * 0055 * @var string 0056 */ 0057 public $id; 0058 0059 /** 0060 * Disposition 0061 * 0062 * @var string 0063 */ 0064 public $disposition; 0065 0066 /** 0067 * Filename 0068 * 0069 * @var string 0070 */ 0071 public $filename; 0072 0073 /** 0074 * Description 0075 * 0076 * @var string 0077 */ 0078 public $description; 0079 0080 /** 0081 * Character set 0082 * 0083 * @var string 0084 */ 0085 public $charset; 0086 0087 /** 0088 * Boundary 0089 * 0090 * @var string 0091 */ 0092 public $boundary; 0093 0094 /** 0095 * Location 0096 * 0097 * @var string 0098 */ 0099 public $location; 0100 0101 /** 0102 * Language 0103 * 0104 * @var string 0105 */ 0106 public $language; 0107 0108 /** 0109 * Content 0110 * 0111 * @var mixed 0112 */ 0113 protected $_content; 0114 0115 /** 0116 * @var bool 0117 */ 0118 protected $_isStream = false; 0119 0120 /** 0121 * create a new Mime Part. 0122 * The (unencoded) content of the Part as passed 0123 * as a string or stream 0124 * 0125 * @param mixed $content String or Stream containing the content 0126 */ 0127 public function __construct($content) 0128 { 0129 $this->_content = $content; 0130 if (is_resource($content)) { 0131 $this->_isStream = true; 0132 } 0133 } 0134 0135 /** 0136 * @todo setters/getters 0137 * @todo error checking for setting $type 0138 * @todo error checking for setting $encoding 0139 */ 0140 0141 /** 0142 * check if this part can be read as a stream. 0143 * if true, getEncodedStream can be called, otherwise 0144 * only getContent can be used to fetch the encoded 0145 * content of the part 0146 * 0147 * @return bool 0148 */ 0149 public function isStream() 0150 { 0151 return $this->_isStream; 0152 } 0153 0154 /** 0155 * if this was created with a stream, return a filtered stream for 0156 * reading the content. very useful for large file attachments. 0157 * 0158 * @return mixed Stream 0159 * @throws Zend_Mime_Exception if not a stream or unable to append filter 0160 */ 0161 public function getEncodedStream() 0162 { 0163 if (!$this->_isStream) { 0164 // require_once 'Zend/Mime/Exception.php'; 0165 throw new Zend_Mime_Exception( 0166 'Attempt to get a stream from a string part' 0167 ); 0168 } 0169 0170 //stream_filter_remove(); // ??? is that right? 0171 switch ($this->encoding) { 0172 case Zend_Mime::ENCODING_QUOTEDPRINTABLE: 0173 $filter = stream_filter_append( 0174 $this->_content, 0175 'convert.quoted-printable-encode', 0176 STREAM_FILTER_READ, 0177 array( 0178 'line-length' => 76, 0179 'line-break-chars' => Zend_Mime::LINEEND 0180 ) 0181 ); 0182 if (!is_resource($filter)) { 0183 // require_once 'Zend/Mime/Exception.php'; 0184 throw new Zend_Mime_Exception( 0185 'Failed to append quoted-printable filter' 0186 ); 0187 } 0188 break; 0189 0190 case Zend_Mime::ENCODING_BASE64: 0191 $filter = stream_filter_append( 0192 $this->_content, 0193 'convert.base64-encode', 0194 STREAM_FILTER_READ, 0195 array( 0196 'line-length' => 76, 0197 'line-break-chars' => Zend_Mime::LINEEND 0198 ) 0199 ); 0200 if (!is_resource($filter)) { 0201 // require_once 'Zend/Mime/Exception.php'; 0202 throw new Zend_Mime_Exception( 0203 'Failed to append base64 filter' 0204 ); 0205 } 0206 break; 0207 0208 default: 0209 } 0210 0211 return $this->_content; 0212 } 0213 0214 /** 0215 * Get the Content of the current Mime Part in the given encoding. 0216 * 0217 * @param string $EOL Line end; defaults to {@link Zend_Mime::LINEEND} 0218 * @throws Zend_Mime_Exception 0219 * @return string 0220 */ 0221 public function getContent($EOL = Zend_Mime::LINEEND) 0222 { 0223 if ($this->_isStream) { 0224 return stream_get_contents($this->getEncodedStream()); 0225 } else { 0226 return Zend_Mime::encode($this->_content, $this->encoding, $EOL); 0227 } 0228 } 0229 0230 /** 0231 * Get the RAW unencoded content from this part 0232 * 0233 * @return string 0234 */ 0235 public function getRawContent() 0236 { 0237 if ($this->_isStream) { 0238 return stream_get_contents($this->_content); 0239 } else { 0240 return $this->_content; 0241 } 0242 } 0243 0244 /** 0245 * Create and return the array of headers for this MIME part 0246 * 0247 * @param string $EOL Line end; defaults to {@link Zend_Mime::LINEEND} 0248 * @return array 0249 */ 0250 public function getHeadersArray($EOL = Zend_Mime::LINEEND) 0251 { 0252 $headers = array(); 0253 0254 $contentType = $this->type; 0255 if ($this->charset) { 0256 $contentType .= '; charset=' . $this->charset; 0257 } 0258 0259 if ($this->boundary) { 0260 $contentType .= ';' . $EOL 0261 . " boundary=\"" . $this->boundary . '"'; 0262 } 0263 0264 $headers[] = array( 0265 'Content-Type', 0266 $contentType 0267 ); 0268 0269 if ($this->encoding) { 0270 $headers[] = array( 0271 'Content-Transfer-Encoding', 0272 $this->encoding 0273 ); 0274 } 0275 0276 if ($this->id) { 0277 $headers[] = array( 0278 'Content-ID', 0279 '<' . $this->id . '>' 0280 ); 0281 } 0282 0283 if ($this->disposition) { 0284 $disposition = $this->disposition; 0285 if ($this->filename) { 0286 $disposition .= '; filename="' . $this->filename . '"'; 0287 } 0288 $headers[] = array( 0289 'Content-Disposition', 0290 $disposition 0291 ); 0292 } 0293 0294 if ($this->description) { 0295 $headers[] = array( 0296 'Content-Description', 0297 $this->description 0298 ); 0299 } 0300 0301 if ($this->location) { 0302 $headers[] = array( 0303 'Content-Location', 0304 $this->location 0305 ); 0306 } 0307 0308 if ($this->language) { 0309 $headers[] = array( 0310 'Content-Language', 0311 $this->language 0312 ); 0313 } 0314 0315 return $headers; 0316 } 0317 0318 /** 0319 * Return the headers for this part as a string 0320 * 0321 * @param string $EOL Line end; defaults to {@link Zend_Mime::LINEEND} 0322 * @return string 0323 */ 0324 public function getHeaders($EOL = Zend_Mime::LINEEND) 0325 { 0326 $res = ''; 0327 foreach ($this->getHeadersArray($EOL) as $header) { 0328 $res .= $header[0] . ': ' . $header[1] . $EOL; 0329 } 0330 0331 return $res; 0332 } 0333 }