diff --git a/.travis/run-tests.sh b/.travis/run-tests.sh deleted file mode 100755 index a84e0ba..0000000 --- a/.travis/run-tests.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -travisdir=$(dirname "$0") -testdir="$travisdir/../tests" -testedcomponents=(`cat "$travisdir/tested-components"`) -result=0 - -for tested in "${testedcomponents[@]}" - do - echo "$tested:" - phpunit -c $testdir/phpunit.xml.dist $testdir/$tested - result=$(($result || $?)) -done - -exit $result diff --git a/.travis/skipped-components b/.travis/skipped-components deleted file mode 100644 index 171dfe9..0000000 --- a/.travis/skipped-components +++ /dev/null @@ -1,7 +0,0 @@ -Zend/Amf -Zend/Date -Zend/Dojo -Zend/Queue -Zend/Service -Zend/Test -Zend/Wildfire diff --git a/.travis/tested-components b/.travis/tested-components deleted file mode 100644 index b0b9438..0000000 --- a/.travis/tested-components +++ /dev/null @@ -1,61 +0,0 @@ -Zend/Acl -Zend/Authentication -Zend/Barcode -Zend/Cache -Zend/Captcha -Zend/Cloud -Zend/Code -Zend/Config -Zend/Console -Zend/Crypt -Zend/Currency -Zend/Db -Zend/Di -Zend/DocBook -Zend/Dojo -Zend/Dom -Zend/EventManager -Zend/Feed -Zend/File -Zend/Filter -Zend/Form -Zend/GData -Zend/Http -Zend/InfoCard -Zend/InputFilter -Zend/Json -Zend/Ldap -Zend/Loader -Zend/Locale -Zend/Log -Zend/Mail -Zend/Markup -Zend/Math -Zend/Measure -Zend/Memory -Zend/Mime -Zend/ModuleManager -Zend/Mvc -Zend/Navigation -Zend/OAuth -Zend/OpenId -Zend/Paginator -Zend/Pdf -Zend/ProgressBar -Zend/RegistryTest.php -Zend/Rest -Zend/Search -Zend/Serializer -Zend/Server -Zend/Session -Zend/Soap -Zend/Stdlib -Zend/Tag -Zend/Text -Zend/TimeSync -Zend/Translator -Zend/Uri -Zend/Validator -Zend/VersionTest.php -Zend/View -Zend/XmlRpc diff --git a/src/Decode.php b/src/Decode.php index 9efc04d..2fa5187 100644 --- a/src/Decode.php +++ b/src/Decode.php @@ -20,6 +20,8 @@ namespace Zend\Mime; +use Zend\Mail\Headers; + /** * @category Zend * @package Zend_Mime @@ -106,14 +108,17 @@ public static function splitMessageStruct($message, $boundary, $EOL = Mime::LINE * * The charset of the returned headers depend on your iconv settings. * - * @param string $message raw message with header and optional content - * @param array $headers output param, array with headers as array(name => value) - * @param string $body output param, content of message - * @param string $EOL EOL string; defaults to {@link Zend_Mime::LINEEND} + * @param string|Headers $message raw message with header and optional content + * @param Headers $headers output param, headers container + * @param string $body output param, content of message + * @param string $EOL EOL string; defaults to {@link Zend_Mime::LINEEND} * @return null */ public static function splitMessage($message, &$headers, &$body, $EOL = Mime::LINEEND) { + if ($message instanceof Headers) { + $message = $message->toString(); + } // check for valid header at first line $firstline = strtok($message, "\n"); if (!preg_match('%^[^\s]+[^:]*:%', $firstline)) { @@ -138,30 +143,7 @@ public static function splitMessage($message, &$headers, &$body, $EOL = Mime::LI @list($headers, $body) = @preg_split("%([\r\n]+)\\1%U", $message, 2); } - $headers = iconv_mime_decode_headers($headers, ICONV_MIME_DECODE_CONTINUE_ON_ERROR); - - if ($headers === false) { - // an error occurs during the decoding - return; - } - - // normalize header names - foreach ($headers as $name => $header) { - $lower = strtolower($name); - if ($lower == $name) { - continue; - } - unset($headers[$name]); - if (!isset($headers[$lower])) { - $headers[$lower] = $header; - continue; - } - if (is_array($headers[$lower])) { - $headers[$lower][] = $header; - continue; - } - $headers[$lower] = array($headers[$lower], $header); - } + $headers = Headers::fromString($headers, $EOL); } /** @@ -237,6 +219,6 @@ public static function splitHeaderField($field, $wantedPart = null, $firstName = */ public static function decodeQuotedPrintable($string) { - return iconv_mime_decode($string, ICONV_MIME_DECODE_CONTINUE_ON_ERROR); + return iconv_mime_decode($string, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, 'UTF-8'); } } diff --git a/src/Message.php b/src/Message.php index eb2d2b4..e9e59ab 100644 --- a/src/Message.php +++ b/src/Message.php @@ -237,34 +237,38 @@ public static function createFromMessage($message, $boundary, $EOL = Mime::LINEE foreach ($parts as $part) { // now we build a new MimePart for the current Message Part: $newPart = new Part($part['body']); - foreach ($part['header'] as $key => $value) { + foreach ($part['header'] as $header) { + /** @var \Zend\Mail\Header\HeaderInterface $header */ /** * @todo check for characterset and filename */ - switch(strtolower($key)) { + + $fieldName = $header->getFieldName(); + $fieldValue = $header->getFieldValue(); + switch (strtolower($fieldName)) { case 'content-type': - $newPart->type = $value; + $newPart->type = $fieldValue; break; case 'content-transfer-encoding': - $newPart->encoding = $value; + $newPart->encoding = $fieldValue; break; case 'content-id': - $newPart->id = trim($value,'<>'); + $newPart->id = trim($fieldValue,'<>'); break; case 'content-disposition': - $newPart->disposition = $value; + $newPart->disposition = $fieldValue; break; case 'content-description': - $newPart->description = $value; + $newPart->description = $fieldValue; break; case 'content-location': - $newPart->location = $value; + $newPart->location = $fieldValue; break; case 'content-language': - $newPart->language = $value; + $newPart->language = $fieldValue; break; default: - throw new Exception\RuntimeException('Unknown header ignored for MimePart:' . $key); + throw new Exception\RuntimeException('Unknown header ignored for MimePart:' . $fieldName); } } $res->addPart($newPart);