Example #1
0
 /**
  * Returns the ezcMailText part corresponding to the parsed message.
  *
  * @return ezcMailText
  */
 public function finish()
 {
     $charset = "us-ascii";
     // RFC 2822 default
     if (isset($this->headers['Content-Type'])) {
         preg_match('/\\s*charset\\s?=\\s?"?([^;"\\s]*);?/', $this->headers['Content-Type'], $parameters);
         if (count($parameters) > 0) {
             $charset = strtolower(trim($parameters[1], '"'));
         }
     }
     $encoding = strtolower($this->headers['Content-Transfer-Encoding']);
     if ($encoding == ezcMail::QUOTED_PRINTABLE) {
         $this->text = quoted_printable_decode($this->text);
     } else {
         if ($encoding == ezcMail::BASE64) {
             $this->text = base64_decode($this->text);
         }
     }
     $this->text = ezcMailCharsetConverter::convertToUTF8($this->text, $charset);
     $part = new ezcMailText($this->text, 'utf-8', ezcMail::EIGHT_BIT, $charset);
     $part->subType = $this->subType;
     $part->setHeaders($this->headers->getCaseSensitiveArray());
     ezcMailPartParser::parsePartHeaders($this->headers, $part);
     $part->size = strlen($this->text);
     return $part;
 }
Example #2
0
 /**
  * Returns an ezcMailAddress object parsed from the address string $address.
  *
  * You can set the encoding of the name part with the $encoding parameter.
  * If $encoding is omitted or set to "mime" parseEmailAddress will asume that
  * the name part is mime encoded.
  *
  * This method does not perform validation. It will also accept slightly
  * malformed addresses.
  *
  * If the mail address given can not be decoded null is returned.
  *
  * Example:
  * <code>
  * ezcMailTools::parseEmailAddress( 'John Doe <*****@*****.**>' );
  * </code>
  *
  * @param string $address
  * @param string $encoding
  * @return ezcMailAddress
  */
 public static function parseEmailAddress($address, $encoding = "mime")
 {
     // we don't care about the "group" part of the address since this is not used anywhere
     $matches = array();
     $pattern = '/<?\\"?[a-zA-Z0-9!#\\$\\%\\&\'\\*\\+\\-\\/=\\?\\^_`{\\|}~\\.]+\\"?@[a-zA-Z0-9!#\\$\\%\\&\'\\*\\+\\-\\/=\\?\\^_`{\\|}~\\.]+>?$/';
     if (preg_match(trim($pattern), $address, $matches, PREG_OFFSET_CAPTURE) != 1) {
         return null;
     }
     $name = substr($address, 0, $matches[0][1]);
     // trim <> from the address and "" from the name
     $name = trim($name, '" ');
     $mail = trim($matches[0][0], '<>');
     // remove any quotes found in mail addresses like "bah,"@example.com
     $mail = str_replace('"', '', $mail);
     if ($encoding == 'mime') {
         // the name may contain interesting character encoding. We need to convert it.
         $name = ezcMailTools::mimeDecode($name);
     } else {
         $name = ezcMailCharsetConverter::convertToUTF8($name, $encoding);
     }
     $address = new ezcMailAddress($mail, $name, 'utf-8');
     return $address;
 }
Example #3
0
 public function testMbstringCharsetConverter2()
 {
     if (ezcBaseFeatures::hasExtensionSupport('mbstring')) {
         ezcMailCharsetConverter::setConvertMethod(array('myConverter', 'convertToUTF8Mbstring'));
         $parser = new ezcMailParser();
         $set = new SingleFileSet('various/test-broken-iconv-2');
         $mail = $parser->parseMail($set);
         $mail = $mail[0];
         $this->assertEquals(99, strlen($mail->body->text));
         ezcMailCharsetConverter::setConvertMethod(array('ezcMailCharsetConverter', 'convertToUTF8Iconv'));
     } else {
         $this->markTestSkipped("This test doesn't work without the mbstring extension. PHP must be compiled with --enable-mbstring.");
     }
 }
Example #4
0
 /**
  * Sets the callback function used for character set conversion to UTF-8.
  *
  * Call this method before doing mail parsing if you need a special way
  * of converting the character set to UTF-8.
  *
  * @param callback $method
  */
 public static function setConvertMethod($method)
 {
     self::$method = $method;
 }
 /**
  * Returns the a ezcMailContentDispositionHeader for the parsed $header.
  *
  * If $cd is provided this object will be used to fill in the blanks. This function
  * will not clear out any old values in the object.
  *
  * @param string $header
  * @param ezcMailContentDispositionHeader $cd
  * @return ezcMailContentDispositionHeader
  */
 public static function parseContentDisposition($header, ezcMailContentDispositionHeader $cd = null)
 {
     if ($cd === null) {
         $cd = new ezcMailContentDispositionHeader();
     }
     $parsedHeader = self::parseHeader($header);
     $cd->disposition = $parsedHeader[0];
     if (isset($parsedHeader[1])) {
         foreach ($parsedHeader[1] as $paramName => $data) {
             switch ($paramName) {
                 case 'filename':
                     $cd->fileName = $data['value'];
                     $cd->displayFileName = trim($data['value'], '"');
                     if (isset($data['charset'])) {
                         $cd->fileNameCharSet = $data['charset'];
                         $cd->displayFileName = ezcMailCharsetConverter::convertToUTF8Iconv($cd->displayFileName, $cd->fileNameCharSet);
                     } else {
                         if (preg_match('@^=\\?[^?]+\\?[QqBb]\\?@', $cd->displayFileName)) {
                             $cd->displayFileName = ezcMailTools::mimeDecode($cd->displayFileName);
                         }
                     }
                     if (isset($data['language'])) {
                         $cd->fileNameLanguage = $data['language'];
                     }
                     break;
                 case 'creation-date':
                     $cd->creationDate = $data['value'];
                     break;
                 case 'modification-date':
                     $cd->modificationDate = $data['value'];
                     break;
                 case 'read-date':
                     $cd->readDate = $data['value'];
                     break;
                 case 'size':
                     $cd->size = $data['value'];
                     break;
                 default:
                     $cd->additionalParameters[$paramName] = $data['value'];
                     if (isset($data['charset'])) {
                         $cd->additionalParametersMetaData[$paramName]['charSet'] = $data['charset'];
                     }
                     if (isset($data['language'])) {
                         $cd->additionalParametersMetaData[$paramName]['language'] = $data['language'];
                     }
                     break;
             }
         }
     }
     return $cd;
 }