package.xml0000664000175000017500000023503613055000406011301 0ustar janjan Horde_Mime pear.horde.org Horde_MIME Horde MIME Library Provides methods for dealing with Multipurpose Internet Mail Extensions (MIME) features (RFC 2045/2046/2047). Chuck Hagenbuch chuck chuck@horde.org yes Michael Slusarz slusarz slusarz@horde.org yes 2017-02-27 2.10.3 2.10.0 stable stable LGPL-2.1 * [jan] Correctly encode IP address literal in first Received: header (Bug #14574). 5.3.0 8.0.0alpha1 8.0.0alpha1 1.7.0 Horde_Exception pear.horde.org 2.0.0 3.0.0alpha1 3.0.0alpha1 Horde_ListHeaders pear.horde.org 1.2.0 2.0.0alpha1 3.0.0alpha1 Horde_Mail pear.horde.org 2.5.0 3.0.0alpha1 3.0.0alpha1 Horde_Stream pear.horde.org 1.3.0 2.0.0alpha1 2.0.0alpha1 Horde_Stream_Filter pear.horde.org 2.0.0 3.0.0alpha1 3.0.0alpha1 Horde_Support pear.horde.org 2.1.0 3.0.0alpha1 3.0.0alpha1 Horde_Text_Flowed pear.horde.org 2.0.0 3.0.0alpha1 3.0.0alpha1 Horde_Translation pear.horde.org 2.2.0 3.0.0alpha1 3.0.0alpha1 Horde_Util pear.horde.org 2.0.0 3.0.0alpha1 3.0.0alpha1 Horde_Nls pear.horde.org 2.0.0 3.0.0alpha1 3.0.0alpha1 Horde_Test pear.horde.org 2.1.0 3.0.0alpha1 3.0.0alpha1 Horde_Text_Filter pear.horde.org 2.0.0 3.0.0alpha1 3.0.0alpha1 Net_DNS2 pear.php.net idn pecl.php.net idn intl pecl.php.net intl 1.0.0alpha1 1.0.0 alpha alpha 2011-03-08 LGPL-2.1 * First alpha release for Horde 4. * Add RFC 3282 language support to Horde_Mime_Part. * Add workaround for Horde Bug #8747. * Honor the Content-Disposition 'size' parameter (RFC 2183 [2.7]). * Converted tests to PHPUnit. * Moved viewer code to horde/Mime_Viewer package. * Removed Webcpp and Enscript viewers. Source code highlighting is now exclusively handled by the Srchighlight driver. * No need to generate Content-Transfer-Encoding header if part data is 7bit. * Default disposition should be empty by default, not inline (RFC 2183 [2]). * Request #8556: Allow specifying a header charset for a part. * Add 'raw' render view to Horde_Mime_Viewer. * Horde_Mime_Part::parseMessage() correctly parses non-MIME parts. * Remove dependence on PEAR's Mail_mimeDecode::. * Added Horde_Mime::uudecode(). * Remove support for deprecated mime_magic module. * Use Gnumeric to display MS Excel documents. * Use AbiWord to display MS Word documents (Request #8011). * Add support for decoding IDN (RFC 3490) names (Request #5836). 1.0.0beta1 1.0.0 beta beta 2011-03-16 LGPL-2.1 * Simplify charset handling in Horde_Mime_Mail. 1.0.0RC1 1.0.0 beta beta 2011-03-22 LGPL-2.1 * First release candidate for Horde 4. 1.0.0RC2 1.0.0 beta beta 2011-03-29 LGPL-2.1 * Second release candidate for Horde 4. * [mms] Improve handling of empty address groups. 1.0.0RC3 1.0.0 beta beta 2011-03-29 LGPL-2.1 * [mms] Provide option to always use Windows-1252 when decoding ISO-8859-1 data. 1.0.0 1.0.0 stable stable 2011-04-06 LGPL-2.1 * First stable release for Horde 4. * [mms] Fix Horde_Mime::isChild(). 1.0.1 1.0.0 stable stable 2011-04-20 LGPL-2.1 * [mms] Fix unserializing Horde_Mime_Part containing data (Bug #9819). 1.0.2 1.0.0 stable stable 2011-05-18 LGPL-2.1 * [mms] Fix encoding of headers if charset passed to toArray() is empty (Bug #10054). 1.0.3 1.0.0 stable stable 2011-06-14 LGPL-2.1 * [mms] Fix error when determining part size if contents is empty (rick@havokmon.com, Bug #10223). 1.0.4 1.0.0 stable stable 2011-07-05 LGPL-2.1 * [jan] Fix accessing the MIME part content after serialization (Bug #10252). 1.0.5 1.0.0 stable stable 2011-07-27 LGPL-2.1 * [mms] Fix generation of MDN messages. * [jan] Update Latvian translation. * [mms] Explicitly build MIME IDs when doing a findBody() search. 1.0.6 1.0.0 stable stable 2011-08-30 LGPL-2.1 * [mms] Fix quoted-printable encoding for message parts contained in a multipart that do not share the same EOLs as the parent part (Bug #10324). 1.1.0 1.1.0 stable stable 2011-09-20 LGPL-2.1 * [mms] Provide method to return approximate size of parts if it contains base64 encoded data (Request #9783). * [mms] Support Content-Duration MIME header (RFC 3803). * [mms] MIME body part can not have disposition of 'attachment' (Bug #10458). 1.2.0 1.2.0 stable stable 2011-09-27 LGPL-2.1 * [jan] Add Horde_Mime_Mail#clearParts(). 1.2.1 1.2.0 stable stable 2011-11-02 LGPL-2.1 * [mms] Horde_Mime_Part::getRawPartText() was incorrectly returning a trailing EOL for body data. 1.3.0 1.3.0 stable stable 2011-11-08 LGPL-2.1 * [jan] Make unit tests locale independent. * [mms] Added 'canonical' parameter to Horde_Mime_Headers#toArray() and Horde_Mime_Headers#toString() (Bug #10696). 1.3.1 1.3.0 stable stable 2011-11-22 LGPL-2.1 * [mms] Work around broken number_format() in PHP < 5.4.0. 1.3.2 1.3.0 stable stable 2011-11-30 LGPL-2.1 * [mms] Fix for broken 8BITMIME/BINARYMIME SMTP capability detection (christof@buergi.lugs.ch, Bug #10820). 1.3.3 1.3.0 stable stable 2011-12-06 LGPL-2.1 * [mms] Improved detection of charsets in broken (8-bit) MIME headers. 1.4.0 1.4.0 stable stable 2011-12-13 LGPL-2.1 * [mms] Allow Horde_Mime_Part::getRawPartText() to accept stream input. * [mms] Workaround incoming message data to Horde_Mime_Part::getRawPartText() that contains varying EOL characters (Bug #10809). * [mms] Fix detection of MIME boundaries at beginning of string (Bug #10809). * [mms] Abstract charset detection code out into Horde_Mime_Headers::sanityCheck(). 1.4.1 1.4.0 stable stable 2012-01-17 LGPL-2.1 * [jan] Improve compatibility with some broken text MIME parts (Bug #10925). 1.5.0 1.5.0 stable stable 2012-02-22 LGPL-2.1 * [mms] Support Horde_Mail_Rfc822_Address objects. * [mms] A false value for 'idn' in Horde_Mime_Address#writeAddress() now causes the domain name to be converted TO punycode, if necessary. 1.5.1 1.5.0 stable stable 2012-03-20 LGPL-2.1 * [mms] Add MIME headers to the list of single-value headers. * [mms] Don't add personal part to e-mail address if it is identical to the address itself. 1.6.0 1.6.0 stable stable 2012-04-10 LGPL-2.1 * [jan] Work around broken messages with multiple address headers. * [mms] Add option to allow encoding options to be defined for Horde_Mime_Part#send() (Bug #11058). 1.6.1 1.6.0 stable stable 2012-05-22 LGPL-2.1 * [mms] Workaround PHP's broken convert_uudecode() function. 1.6.2 1.6.0 stable stable 2012-05-22 LGPL-2.1 * [mms] Workaround broken base64 data. 2012-07-06 2.0.0alpha1 2.0.0alpha1 alpha alpha LGPL-2.1 * First alpha release for Horde 5. * [mjr] Fix issue that could cause outputting of duplicate data from a parsed mulitpart mime message. * [mms] Added Horde_Mime_Related class. * [mms] Implement new 2.0 API. See UPGRADING for full details of changes. 2.0.0beta1 2.0.0beta1 beta beta 2012-07-19 LGPL-2.1 * First beta release for Horde 5. 2.0.0beta2 2.0.0beta1 beta beta 2012-08-07 LGPL-2.1 * [mms] Catch/fix malformed undisclosed-recipients address headers. 2.0.0beta3 2.0.0beta1 beta beta 2012-10-12 LGPL-2.1 * [mjr] Add method for returning the message's base MIME part. * [mms] Update MIME mapping file. 2.0.0 2.0.0 stable stable 2012-10-30 LGPL-2.1 * First stable release for Horde 5. 2.0.1 2.0.0 stable stable 2012-11-06 LGPL-2.1 * [jan] Update Dutch translation (Arjen de Korte <build+horde@de-korte.org>). 2.0.2 2.0.0 stable stable 2013-01-04 LGPL-2.1 * [mjr] Fix issue where parsing multipart/alternative messages would turn the parts into attachments. * [jan] Update Basque translation (Ibon Igartua <ibon.igartua@ehu.es>). 2.0.3 2.0.0 stable stable 2013-01-29 LGPL-2.1 * [mms] Never return decimal values from Horde_Mime_Part#getSize(). * [mms] Added parsing limit for deeply nested MIME parts. 2.0.4 2.0.0 stable stable 2013-02-11 LGPL-2.1 * [mms] Fix regression in outputting Content-Disposition 'size' parameter if no other Content-Disposition parameter is present. 2.1.0 2.1.0 stable stable 2013-04-08 LGPL-2.1 * [mms] Allow a Horde_Domhtml object to be directly passed in to Horde_Mime_Related#cidReplace(). * [mms] Content-Type parameters are case-insensitive (Bug #12161). * [mms] Sanity checking: ignore empty values for Content-Transfer-Encoding MIME header (Bug #12146). * [mms] Null characters are no longer allowed in e-mail headers as of RFC 2822. * [mms] More accurate/comprehensive Horde_Mime::is8bit() check (Bug #12127). * [mms] Only use non-ASCII in MIME parameters when absolutely necessary. * [mms] Need to always add charset information to MIME encoded parameters if they are not displayable in pure US-ASCII (Bug #12127). * [mms] Correctly quote forbidden characters in MIME parameter data (Bug #12127). * [mms] Round up size output in Horde_Mime_Part#getSize(). 2.1.1 2.1.0 stable stable 2013-04-18 LGPL-2.1 * [mms] Fix parsing wrapped header lines that contain no atom data (Bug #12189). 2.2.0 2.2.0 stable stable 2013-05-28 LGPL-2.1 * [mms] Add 'no_body' parameter to Horde_Mime_Part#parseMessage(). 2.2.1 2.2.0 stable stable 2013-06-05 LGPL-2.1 * [mms] Fix Horde_Mime_Part::getRawPartText() when obtaining the first body part of a single part message. 2.2.2 2.2.0 stable stable 2013-06-18 LGPL-2.1 * [mms] Update MIME extension mapping. 2.2.3 2.2.0 stable stable 2013-07-16 LGPL-2.1 * [jan] Fix setting a different body if reusing a Horde_Mime_Mail object. 2.2.4 2.2.0 stable stable 2013-08-06 LGPL-2.1 * [mms] Fix parsing broken multipart messages (Bug #12536). * [mms] Use the correct EOL string when transfer encoding content (Bug #12452). 2.2.5 2.2.0 stable stable 2013-08-22 LGPL-2.1 * [mms] Remove stream filters before returning stream to calling code. * [mms] Support Horde_Mail_Transport_Smtphorde when sending messages. * [mms] Net_SMTP does not support sending via BINARYMIME. 2.2.6 2.2.0 stable stable 2013-09-27 LGPL-2.1 * [mjr] Work around broken PHP behavior that could cause a segfault when encoding certain strings as quoted-printable. 2.2.7 2.2.0 stable stable 2013-09-27 LGPL-2.1 * [mms] Fix regression that broke quoted-printable encoding. 2.2.8 2.2.0 stable stable 2013-11-22 LGPL-2.1 * [mms] Fix parsing MIME message that contains mixed EOLs (Bug #12842). 2.2.9 2.2.0 stable stable 2014-02-11 LGPL-2.1 * [mms] Fixed access to a non-visible internal method when performing actions on parts. 2.3.0 2.3.0 stable stable 2014-03-10 LGPL-2.1 * [mms] Horde_Mime_Headers#parseHeaders() now accepts resources and Horde_Stream objects. 2.3.1 2.3.0 stable stable 2014-04-22 LGPL-2.1 * [mms] Fix Horde_Mime_Part#buildMimeIds() when called on the base embedded object of a parent part (Bug #13117). 2.3.2 2.3.0 stable stable 2014-04-22 LGPL-2.1 * [mms] Correctly set size of part when using Horde_Mime_Part::parseMessage() and the 'no_body' option. 2.3.3 2.3.0 stable stable 2014-05-02 LGPL-2.1 * [mms] Add Importance to list of headers that expects a single value. 2.3.4 2.3.0 stable stable 2014-05-09 LGPL-2.1 * [mms] Fix regression in part size calculation for parts that contain the raw contents. 2.3.5 2.3.0 stable stable 2014-05-21 LGPL-2.1 * [mms] Ensure return from Horde_Mime_Part#getBytes() is an integer. 2.4.0 2.4.0 stable stable 2014-05-24 LGPL-2.1 * [mjr] Add Horde_Mime_Mail#getRaw() for returning the raw email email data. 2.4.1 2.4.0 stable stable 2014-05-25 LGPL-2.1 * [mjr] Fix returning stream containing raw email data. 2.4.2 2.4.0 stable stable 2014-06-22 LGPL-2.1 * [mjr] Fix returning raw data of sent email. 2.4.3 2.4.0 stable stable 2014-07-09 LGPL-2.1 * [mms] Fix determination of part size when the part contains explicit sizing information. 2.4.4 2.4.0 stable stable 2014-08-02 LGPL-2.1 * [mms] Fix fatal error in Horde_Mime_Mail#getBasePart() (Thomas Müller <thomas.mueller@tmit.eu>). 2.4.5 2.4.0 stable stable 2014-08-27 LGPL-2.1 * [mms] Fix generation of Original-Message-ID header in MDN notification (Bug #13526). * [mms] Fix determination of MDN user confirmation in certain instances. 2.5.0 2.5.0 stable stable 2014-11-21 LGPL-2.1 * [mms] Horde_Mime_Headers has been rewritten. * [mms] Correctly handle content parameters in a case-insensitive manner. * [mms] Correctly pass the 'no_body' parameter to parts embedded in a message/rfc822 part in Horde_Mime_Part#parseMessage(). * [mms] Fix parsing a base MIME-compliant message with no Content-Type information. * [mms] Horde_Mime::is8bit() no longer requires the charset parameter. * [mms] Improved MIME encoding. * [mms] Deprecated Horde_Mime::quotedPrintableEncode() and move to Horde_Mime_QuotedPrintable. * [mms] Moved MIME ID manipulation/query methods out of Horde_Mime and into Horde_Mime_Id. * [mms] Use string-based ABNF-based parser for scanning MIME content parameters instead of a regular expression (Bug #13587). * [mms] Moved content parameter handling methods out of Horde_Mime and into Horde_Mime_ContentParam. * [mms] Deprecated Horde_Mime::generateMessageId() and move to Horde_Mime_Headers. * [mms] Deprecated Horde_Mime::uudecode() and move to new Horde_Mime_Uudecode class. * [mms] Add Auto-Submitted header to outgoing MDN messages. 2.5.1 2.5.0 stable stable 2014-11-23 LGPL-2.1 * [mms] Fix Horde_Mime_Headers_Deprecated#addReceivedHeader(). * [mms] Fix Horde_Mime_Headers_Deprecated#listHeadersExists(). 2.5.2 2.5.0 stable stable 2014-11-25 LGPL-2.1 * [mms] Improved sanity checking when adding header data. 2.6.0 2.6.0 stable stable 2014-12-05 LGPL-2.1 * [mjr] Fix issue where long lines were not properly dealt with when binary transfer encoding was used (Bug #13709). * [mms] Added Horde_Mime_Filter_Encoding class. * [mms] MIME decoding uses windows-1252 charset by default when iso-8859-1 is identified in the MIME encoded string. * [mms] Move mime.mapping.php generation code from horde-support repository into doc/ directory. 2.6.1 2.6.0 stable stable 2014-12-29 LGPL-2.1 * [jan] Fix Horde_Mime::quotedPrintableEncode() (Bug #13769). 2.7.0 2.7.0 stable stable 2015-01-20 LGPL-2.1 * [mms] Fix setting a MIME part's contents when the data is the current stream resource of that part. * [mms] Fix MIME encoding the Content-Description header (Bug #13814). * [mms] Fix setting MIME IDs when a message/rfc822 part is the base of the part object. 2.8.0 2.8.0 stable stable 2015-03-10 LGPL-2.1 * [mms] Subpart manipulation should now be done via array access. * [mms] Add recurisve iteration to the Horde_Mime_Part object. * [mms] Work around broken line-oriented data when transfer encoding (Bug #13835). * [mms] Fix regression in using the deprecated Horde_Mime::generateMessageId() method (Bug #13846). * [mms] Add Horde_Mime_Headers_ContentId class. * [mms] Add Horde_Mime_Headers_ContentTransferEncoding class. * [mms] Added Horde_Mime_Headers_Element#isDefault(). * [mms] Add interface to differentiate between MIME and non-MIME headers. * [mms] Content-Type and Content-Disposition related data is now handled internally in Horde_Mime_Part object by using Horde_Mime_Headers. * [mms] Added the Horde_Mime_Headers_ContentLanguage class. * [mms] Fix cloning of the Content-Type and Content-Disposition header objects. * [mms] Ensure that null bytes are filtered from MIME data that is contained in the headers. * [mms] Fix cloning of the Content-Type and Content-Disposition header objects. 2.8.1 2.8.0 stable stable 2015-04-13 LGPL-2.1 * [mms] Ignore broken headers when parsing header text. 2.9.0 2.9.0 stable stable 2015-04-28 LGPL-2.1 * [mms] Fix rare errors when multiple iterations are occurring on the same set of MIME parts. * [jan] Fix issues with certain locales like Turkish. * [mms] Fix indexing MIME part when base is a multipart object. 2.9.1 2.9.0 stable stable 2015-05-21 LGPL-2.1 * [mms] Correctly output MIME headers when generating multipart/digest parts (RFC 2047 [5.1.5]). 2.9.2 2.9.0 stable stable 2015-09-01 LGPL-2.1 * [mjr] Correctly work around PHP bug 65776. 2.9.3 2.9.0 stable stable 2016-02-01 LGPL-2.1 * [jan] Mark PHP 7 as supported. 2.9.4 2.9.0 stable stable 2016-03-21 LGPL-2.1 * [jan] Update Greek translation (Limperis Antonis <limperis@cti.gr>). 2.9.5 2.9.0 stable stable 2016-05-31 LGPL-2.1 * [mjr] Add sanity check for malformed offset in Date header (Bug #14381). 2.10.0 2.10.0 stable stable 2016-07-01 LGPL-2.1 * [jan] Add Horde_Mime_Part#isAttachment(). * [mjr] Add workaround for failures due to sending broken rfc822/message attachments (Bug #14324). * [mjr] Catch incorrectly localized Date headers. 2.10.1 2.10.0 stable stable 2016-09-05 LGPL-2.1 * [mjr] Fix parsing headers containing MIME encoded email addresses (Bug #14456). 2.10.2 2.10.0 stable stable 2016-11-09 LGPL-2.1 * [mjr] Fix regression caused by incorrect fix and test for Bug #14456 (Bug #14505). 2.10.3 2.10.0 stable stable 2017-02-27 LGPL-2.1 * [jan] Correctly encode IP address literal in first Received: header (Bug #14574). Horde_Mime-2.10.3/doc/Horde/Mime/mime_mapping/convert.php0000664000175000017500000000754413055000403021241 0ustar janjan * @author Michael Slusarz * @category Horde * @copyright 2001-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ /* Files containing MIME extensions (Apache format). * https://github.com/apache/httpd/blob/trunk/docs/conf/mime.types */ $files = array( 'mime.types', 'mime.types.horde' ); /* Files contating MIME extensions (freedesktop.org format). * http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec */ $od_files = array( 'mime.globs' ); $exts = array(); $maxlength = strlen('__MAXPERIOD__'); $maxperiod = 0; /* Map the mime extensions file(s) into the $exts hash. */ foreach ($files as $val) { /* Read file and remove trailing whitespace. */ $data = array_filter(array_map('rtrim', file($val))); foreach ($data as $line) { /* Skip comments. */ if ($line[0] === '#') { continue; } /* These are tab-delimited files. Skip the entry if there is no * extension information. */ $fields = preg_split("/\s+/", $line, 2); if (!empty($fields[1])) { foreach (preg_split("/\s+/", $fields[1]) as $val2) { $exts[$val2] = $fields[0]; $maxlength = max(strlen($val2), $maxlength); } } } } foreach ($od_files as $val) { /* Read file and remove trailing whitespace. */ $data = array_filter(array_map('rtrim', file($val))); foreach ($data as $line) { /* Skip comments. */ if ($line[0] === '#') { continue; } /* These are ':' delimited files. Skip the entry if this is not an extension matching glob. */ $fields = explode(':', $line, 2); $pos = strpos($fields[1], '*.'); if ($pos !== false) { $val2 = substr($fields[1], $pos + 2); if ((strpos($val2, '*') !== false) || (strpos($val2, '[') !== false) || isset($exts[$val2])) { continue; } $maxperiod = max(substr_count($val2, '.'), $maxperiod); $maxlength = max(strlen($val2), $maxlength); $exts[$val2] = $fields[0]; } } } /* Assemble/sort the extensions into an output array. */ $output = array( sprintf( "'__MAXPERIOD__'%s => '%u'", str_repeat(' ', $maxlength - strlen('__MAXPERIOD__')), $maxperiod ) ); ksort($exts); /* Special case: move .jpg to the first image/jpeg entry. */ $first_jpeg = array_search('image/jpeg', $exts); $keys = array_keys($exts); $index1 = array_search($first_jpeg, $keys); $index2 = array_search('jpg', $keys); $keys[$index1] = 'jpg'; $keys[$index2] = $first_jpeg; $exts = array_combine($keys, array_values($exts)); foreach ($exts as $key => $val) { $output[] = sprintf( "'%s'%s => '%s'", $key, str_repeat(' ', $maxlength - strlen($key)), $val ); } /* Generate the PHP output file. */ $generated = sprintf( '%s by %s on %s', strftime('%D %T'), $_SERVER['USER'], $_SERVER['HOST'] ); $map = implode(",\n ", $output); print <<
' where is the unknown file extension. * * Generated: $generated * * @category Horde * @package Mime */ \$mime_extension_map = array( $map ); HEADER; Horde_Mime-2.10.3/doc/Horde/Mime/mime_mapping/Makefile0000664000175000017500000000017213055000403020476 0ustar janjanOUT=mime.mapping.php HOST=`hostname -f` all: ${OUT} ${OUT}: HOST=${HOST} php convert.php > ${OUT} clean: rm -f ${OUT} Horde_Mime-2.10.3/doc/Horde/Mime/mime_mapping/mime.globs0000664000175000017500000005765413055000403021036 0ustar janjan# This file was automatically generated by the # update-mime-database command. DO NOT EDIT! text/x-eiffel:*.e audio/ac3:*.ac3 application/x-mswrite:*.wri application/smil:*.smil text/x-verilog:*.v image/x-jng:*.jng image/x-exr:*.exr application/x-compress:*.z image/x-xpixmap:*.xpm application/oda:*.oda application/vnd.oasis.opendocument.database:*.odb application/vnd.oasis.opendocument.chart:*.odc text/vtt:*.vtt application/x-xz-compressed-tar:*.txz application/vnd.oasis.opendocument.formula:*.odf application/vnd.oasis.opendocument.graphics:*.odg text/x-ldif:*.ldif application/vnd.oasis.opendocument.image:*.odi image/jp2:*.jp2 application/x-oleo:*.oleo application/oxps:*.xps application/vnd.oasis.opendocument.text-master:*.odm application/x-ruby:*.rb audio/vnd.rn-realaudio:*.ra application/x-mimearchive:*.mht application/vnd.oasis.opendocument.presentation:*.odp application/x-raw-disk-image-xz-compressed:*.raw-disk-image.xz application/vnd.oasis.opendocument.spreadsheet:*.ods application/vnd.oasis.opendocument.text:*.odt image/x-portable-bitmap:*.pbm application/x-egon:*.egon application/x-font-pcf:*.pcf.z application/x-xliff:*.xliff application/vnd.rn-realmedia:*.rm application/x-abiword:*.abw image/vnd.rn-realpix:*.rp image/x-sigma-x3f:*.x3f video/webm:*.webm application/vnd.openxmlformats-officedocument.wordprocessingml.document:*.docx text/vnd.rn-realtext:*.rt image/webp:*.webp application/x-cpio:*.cpio audio/midi:*.mid application/x-mif:*.mif video/vnd.rn-realvideo:*.rv application/vnd.google-earth.kml+xml:*.kml image/x-3ds:*.3ds image/x-photo-cd:*.pcd application/x-pc-engine-rom:*.pce application/x-font-pcf:*.pcf application/x-cisco-vpn-settings:*.pcf model/vrml:*.wrl video/quicktime:*.qt text/plain:*.txt text/vcard:*.vcard application/vnd.hp-pcl:*.pcl application/x-trash:*.bak application/x-ace:*.ace application/x-shellscript:*.sh model/vrml:*.vrml text/x-changelog:changelog image/x-skencil:*.sk image/x-pict:*.pct video/3gpp2:*.3g2 text/x-vala:*.vapi application/x-sharedlib:*.so application/x-tzo:*.tzo video/x-javafx:*.fxm image/jpeg:*.jpe audio/x-aifc:*.aifc audio/x-aifc:*.aiffc x-epoc/x-sisx-app:*.sisx audio/x-aiff:*.aiff application/x-lzma-compressed-tar:*.tar.lzma image/jp2:*.jpf application/x-hdf:*.hdf4 application/x-hdf:*.hdf5 application/x-aportisdoc:*.pdb application/vnd.palm:*.pdb application/x-aportisdoc:*.pdc application/x-profile:gmon.out application/x-jbuilder-project:*.jpr application/pdf:*.pdf application/x-bzpdf:*.pdf.bz2 application/x-theme:*.theme image/jpeg:*.jpg application/x-raw-disk-image-xz-compressed:*.img.xz application/x-jbuilder-project:*.jpx image/jp2:*.jpx text/x-svsrc:*.sv image/x-quicktime:*.qtif image/x-kodak-k25:*.k25 text/x-scheme:*.ss application/vnd.openxmlformats-officedocument.presentationml.presentation:*.pptx text/x-adasrc:*.adb image/x-pcx:*.pcx text/x-adasrc:*.ads text/x-tcl:*.tk application/xml:*.xsd audio/flac:*.flac video/mpeg:[0-9][0-9][0-9].vdr text/html:*.htm text/x-google-video-pointer:*.gvp text/troff:*.tr audio/x-matroska:*.mka text/vnd.trolltech.linguist:*.ts video/mp2t:*.ts application/x-cb7:*.cb7 text/x-vhdl:*.vhdl audio/ogg:*.oga audio/x-vorbis+ogg:*.oga audio/x-flac+ogg:*.oga audio/x-speex+ogg:*.oga application/xslt+xml:*.xsl application/x-cd-image:*.iso application/x-wii-rom:*.iso application/x-gamecube-rom:*.iso application/atom+xml:*.atom video/3gpp:*.3ga application/x-kontour:*.kon audio/ogg:*.ogg video/ogg:*.ogg audio/x-vorbis+ogg:*.ogg audio/x-flac+ogg:*.ogg audio/x-speex+ogg:*.ogg video/x-theora+ogg:*.ogg image/x-pentax-pef:*.pef application/vnd.ms-cab-compressed:*.cab text/x-markdown:*.mkd application/rdf+xml:*.rdfs application/x-zoo:*.zoo video/x-ogm+ogg:*.ogm text/x-rpm-spec:*.spec application/x-x509-ca-cert:*.pem video/3gpp2:*.3gp2 application/x-xpinstall:*.xpi video/x-matroska:*.mkv application/ram:*.ram application/x-designer:*.ui application/x-gtk-builder:*.ui audio/x-wavpack-correction:*.wvc video/ogg:*.ogv application/vnd.tcpdump.pcap:*.cap application/ogg:*.ogx application/x-rar:*.rar application/x-xbel:*.xbel image/x-fuji-raf:*.raf application/vnd.ms-tnef:*.tnef image/x-panasonic-raw:*.raw video/3gpp:*.3gp audio/vnd.rn-realaudio:*.rax text/x-python:*.wsgi application/x-7z-compressed:*.7z audio/x-wavpack:*.wvp image/x-cmu-raster:*.ras application/x-font-type1:*.pfa application/x-font-type1:*.pfb application/x-kpovmodeler:*.kpm text/x-ocaml:*.mli image/x-compressed-xcf:*.xcf.bz2 text/x-uuencode:*.uue audio/x-ms-asx:*.wvx application/x-kpresenter:*.kpr application/x-font-bdf:*.bdf application/x-cd-image:*.iso9660 application/x-kpresenter:*.kpt text/x-texinfo:*.texi application/x-font-afm:*.afm text/x-nfo:*.nfo video/mp2t:*.mpls text/x-cobol:*.cbl video/mp2t:*.bdm video/quicktime:*.moov application/x-wwf:*.wwf application/x-cbr:*.cbr application/x-pkcs12:*.pfx application/metalink+xml:*.metalink application/x-cbt:*.cbt application/x-perl:*.perl application/vnd.mozilla.xul+xml:*.xul application/x-cbz:*.cbz text/x-log:*.log application/x-smaf:*.mmf application/javascript:*.jsm video/3gpp:*.3gpp application/x-hwt:*.hwt text/x-iptables:*.iptables application/mathml+xml:*.mml application/oxps:*.oxps video/mp2t:*.bdmv text/x-python:*.py application/x-docbook+xml:*.docbook audio/x-mod:*.m15 application/x-chess-pgn:*.pgn audio/x-mo3:*.mo3 application/x-bcpio:*.bcpio application/pgp-encrypted:*.pgp application/pgp-keys:*.pgp application/pgp-signature:*.pgp application/x-bzip-compressed-tar:*.tar.bz application/x-amipro:*.sam application/vnd.google-earth.kmz:*.kmz application/x-hwp:*.hwp image/x-portable-graymap:*.pgm application/x-krita:*.kra application/x-dar:*.dar application/vnd.wordperfect:*.wp image/vnd.wap.wbmp:*.wbmp application/x-spss-sav:*.sav video/x-msvideo:*.divx audio/x-wavpack:*.wv application/xhtml+xml:*.xhtml video/x-mng:*.mng image/x-pict:*.pict1 image/x-pict:*.pict2 image/x-bzeps:*.eps.bz2 audio/x-musepack:*.mp+ text/x-c++hdr:*.hxx application/rdf+xml:*.rdf application/x-netcdf:*.cdf application/vnd.rn-realmedia:*.rmvb application/x-dbf:*.dbf audio/mp2:*.mp2 video/mpeg:*.mp2 application/vnd.lotus-1-2-3:*.123 video/mp4:*.mp4 application/x-font-pcf:*.pcf.gz audio/mpeg:*.mp3 application/x-php:*.php audio/x-minipsf:*.minipsf audio/x-xm:*.xm application/vnd.corel-draw:*.cdr audio/x-xi:*.xi image/x-xwindowdump:*.xwd application/x-desktop:*.desktop application/x-bzip-compressed-tar:*.tb2 text/x-tex:*.latex text/x-moc:*.moc audio/x-mod:*.mod text/x-mof:*.mof application/x-xz:*.xz application/vnd.ms-excel.sheet.binary.macroEnabled.12:*.xlsb application/x-kspread:*.ksp audio/x-aiff:*.aif text/vcard:*.gcrd application/x-php:*.php3 application/x-php:*.php4 application/x-php:*.php5 text/x-reject:*.rej application/vnd.ms-excel.sheet.macroEnabled.12:*.xlsm video/mp2t:*.m2ts text/x-ms-regedit:*.reg text/x-dcl:*.dcl application/dicom:*.dcm video/vnd.mpegurl:*.m1u text/x-scheme:*.scm application/x-qtiplot:*.qti.gz application/pkix-cert:*.cer image/x-kodak-dcr:*.dcr application/x-tar:*.tar text/x-patch:*.patch text/x-scala:*.scala image/vnd.djvu:*.djvu audio/x-musepack:*.mpc video/quicktime:*.mov video/mpeg:*.mpe application/x-tarz:*.taz application/x-trash:*.old video/mpeg:*.mpg video/mp2t:*.mpl application/vnd.stardivision.draw:*.sda application/vnd.stardivision.calc:*.sdc text/x-mrml:*.mrml application/vnd.stardivision.impress:*.sdd audio/x-musepack:*.mpp application/vnd.ms-excel.template.macroEnabled.12:*.xltm image/x-gzeps:*.epsf.gz video/mp2t:*.m2t application/x-lrzip:*.lrz video/3gpp2:*.3gpp2 image/jpeg:*.jpeg application/mbox:*.mbox application/vnd.stardivision.impress:*.sdp application/sdp:*.sdp audio/x-mpegurl:*.m3u8 application/vnd.apple.mpegurl:*.m3u8 application/vnd.stardivision.chart:*.sds image/x-dds:*.dds application/x-kugar:*.kud application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:*.xlsx application/vnd.stardivision.writer:*.sdw application/x-xzpdf:*.pdf.xz application/x-fictionbook+xml:*.fb2 text/x-copying:copying application/x-bzip-compressed-tar:*.tbz application/vnd.openxmlformats-officedocument.spreadsheetml.template:*.xltx application/x-lrzip-compressed-tar:*.tar.lrz text/x-bibtex:*.bib image/x-rgb:*.rgb application/x-gzpostscript:*.ps.gz application/x-qw:*.qif image/x-quicktime:*.qif application/x-php:*.phps application/x-deb:*.deb audio/x-mpegurl:*.m3u application/vnd.apple.mpegurl:*.m3u application/x-ccmx:*.ccmx text/x-c++src:*.c++ text/x-mup:*.not application/octet-stream:*.bin application/smil:*.kino application/pgp-keys:*.pkr text/x-tcl:*.tcl image/cgm:*.cgm audio/mp4:*.m4a application/x-x509-ca-cert:*.der audio/x-m4b:*.m4b application/x-sami:*.sami audio/x-iriver-pla:*.pla text/x-mrml:*.mrl application/vnd.nintendo.snes.rom:*.sfc video/vnd.mpegurl:*.m4u video/mp4:*.m4v application/x-planperfect:*.pln text/x-tex:*.ltx image/x-minolta-mrw:*.mrw application/metalink4+xml:*.meta4 application/vnd.ms-powerpoint.addin.macroEnabled.12:*.ppam audio/x-scpls:*.pls application/x-compressed-tar:*.tar.gz application/vnd.ms-htmlhelp:*.chm application/x-abiword:*.abw.gz application/x-alz:*.alz application/x-kword:*.kwd text/x-lua:*.lua text/x-ooc:*.ooc application/x-msi:*.msi application/x-kexiproject-sqlite2:*.kexi application/x-kexiproject-sqlite3:*.kexi video/x-anim:*.anim[1-9j] application/x-abiword:*.zabw application/x-kword:*.kwt application/x-go-sgf:*.sgf application/pkcs10:*.p10 image/x-sgi:*.sgi application/x-pkcs12:*.p12 application/x-blender:*.blender application/vnd.stardivision.writer:*.sgl audio/AMR:*.amr application/x-dia-shape:*.shape application/x-blender:*.blend application/x-blender:*.blend application/x-mimearchive:*.mhtml audio/midi:*.midi application/x-msx-rom:*.msx application/x-java-jnlp-file:*.jnlp text/x-cmake:cmakelists.txt audio/x-amzxml:*.amz image/x-tga:*.tpic text/sgml:*.sgm text/x-makefile:makefile text/x-tex:*.tex application/vnd.oasis.opendocument.graphics-flat-xml:*.fodg text/x-authors:authors image/x-msod:*.msod audio/x-mod:*.mtm image/png:*.png application/vnd.oasis.opendocument.presentation-flat-xml:*.fodp application/x-navi-animation:*.ani application/vnd.oasis.opendocument.spreadsheet-flat-xml:*.fods application/vnd.oasis.opendocument.text-flat-xml:*.fodt application/x-n64-rom:*.n64 application/x-ustar:*.ustar image/x-portable-anymap:*.pnm application/x-gba-rom:*.gba application/x-java-pack200:*.pack application/dicom:dicomdir application/x-shar:*.shar application/x-shorten:*.shn video/mp2t:*.mts application/x-gzdvi:*.dvi.gz application/annodex:*.anx text/html:*.html text/x-install:install application/x-netshow-channel:*.nsc application/x-quattropro:*.wb1 application/x-quattropro:*.wb2 application/x-quattropro:*.wb3 application/x-gnucash:*.gnucash application/x-perl:*.pod application/x-source-rpm:*.src.rpm image/x-lwo:*.lwo application/x-dia-diagram:*.dia application/vnd.lotus-wordpro:*.lwp application/x-lrzip-compressed-tar:*.tlrz audio/prs.sid:*.sid application/x-glade:*.glade application/pgp-signature:*.sig text/x-qml:*.qml image/x-tga:*.tga text/x-mup:*.mup application/x-trash:*.sik application/x-spss-por:*.por image/bmp:*.bmp application/vnd.ms-powerpoint:*.pot text/x-gettext-translation-template:*.pot image/x-lws:*.lws application/x-zip-compressed-fb2:*.fb2.zip text/vcard:*.vcf application/vnd.symbian.install:*.sis application/x-stuffit:*.sit application/x-e-theme:*.etheme application/sieve:*.siv image/x-skencil:*.sk1 image/openraster:*.ora text/vcard:*.vct application/x-compressed-tar:*.tgz audio/x-wav:*.wav image/x-olympus-orf:*.orf audio/x-ms-asx:*.wax audio/x-ape:*.ape image/x-lwo:*.lwob text/calendar:*.vcs image/rle:*.rle application/x-siag:*.siag application/vnd.android.package-archive:*.apk image/x-portable-pixmap:*.ppm application/x-lz4:*.lz4 image/x-applix-graphics:*.ag application/illustrator:*.ai application/vnd.ms-powerpoint:*.pps application/vnd.ms-powerpoint:*.ppt video/x-nsv:*.nsv application/x-perl:*.al image/x-tga:*.vda text/x-tex:*.cls application/x-archive:*.ar application/vnd.ms-powerpoint:*.ppz application/x-applix-spreadsheet:*.as audio/basic:*.au image/vnd.djvu:*.djv application/x-applix-word:*.aw application/vnd.tcpdump.pcap:*.pcap application/vnd.palm:*.pqa application/xslt+xml:*.xslt application/x-bittorrent:*.torrent image/x-bzeps:*.epsi.bz2 video/quicktime:*.qtvr application/x-t602:*.602 application/vnd.rn-realmedia:*.rmj image/tiff:*.tif application/x-lyx:*.lyx application/x-gedcom:*.ged application/vnd.rn-realmedia:*.rmm application/x-gnucash:*.xac text/x-eiffel:*.eif application/x-sv4cpio:*.sv4cpio application/vnd.rn-realmedia:*.rms application/pgp-keys:*.skr application/x-tar:*.gem application/x-genesis-rom:*.gen application/vnd.ms-works:*.wcm application/x-yaml:*.yaml application/vnd.ms-word.template.macroEnabled.12:*.dotm application/x-lha:*.lzh application/mxf:*.mxf application/vnd.oasis.opendocument.chart-template:*.otc application/x-mobipocket-ebook:*.prc application/vnd.palm:*.prc application/vnd.oasis.opendocument.formula-template:*.otf application/x-font-otf:*.otf application/vnd.oasis.opendocument.graphics-template:*.otg application/vnd.oasis.opendocument.text-web:*.oth application/relax-ng-compact-syntax:*.rnc application/x-lzop:*.lzo text/x-makefile:gnumakefile application/x-bzip:*.bz application/x-arj:*.arj application/x-spss-sav:*.zsav text/x-c++src:*.cc application/vnd.oasis.opendocument.presentation-template:*.otp image/fits:*.fits application/vnd.ms-works:*.wdb application/vnd.oasis.opendocument.spreadsheet-template:*.ots application/vnd.oasis.opendocument.text-template:*.ott application/vnd.openxmlformats-officedocument.wordprocessingml.template:*.dotx application/x-tzo:*.tar.lzo application/x-hdf:*.hdf application/x-tarz:*.tar.z application/vnd.rn-realmedia:*.rmx image/x-sony-arw:*.arw image/svg+xml-compressed:*.svgz text/x-csharp:*.cs text/spreadsheet:*.slk image/x-icns:*.icns image/x-xbitmap:*.xbm video/vnd.mpegurl:*.mxu application/xml:*.xbl application/xml:*.rng text/x-opml+xml:*.opml text/plain:*.asc image/vnd.adobe.photoshop:*.psd application/x-font-linux-psf:*.psf audio/x-psf:*.psf text/x-cobol:*.cob application/vnd.ms-asf:*.asf application/vnd.nintendo.snes.rom:*.smc application/vnd.stardivision.mail:*.smd application/x-dc-rom:*.dc application/vnd.stardivision.math:*.smf application/x-apple-diskimage:*.dmg application/smil:*.smi application/x-sami:*.smi text/x-dsrc:*.di application/x-asp:*.asp application/x-gedcom:*.gedcom application/smil:*.sml text/x-ssa:*.ass image/x-xfig:*.fig image/x-tga:*.icb application/vnd.tcpdump.pcap:*.dmp application/x-pocket-word:*.psw application/x-sms-rom:*.sms audio/x-ms-asx:*.asx image/x-xcf:*.xcf text/vnd.sun.j2me.app-descriptor:*.jad video/dv:*.dv application/vnd.iccprofile:*.icm image/vnd.microsoft.icon:*.ico application/x-ica:*.ica application/vnd.iccprofile:*.icc text/calendar:*.ics application/x-java-archive:*.jar application/x-gnumeric:*.gnumeric application/x-sv4crc:*.sv4crc audio/basic:*.snd application/x-lzma:*.lzma application/x-x509-ca-cert:*.cert image/x-adobe-dng:*.dng video/mp2t:*.cpi text/x-vhdl:*.vhd application/x-rpm:*.rpm application/x-bzpostscript:*.ps.bz2 text/x-emacs-lisp:*.el application/xspf+xml:*.xspf text/x-c++src:*.cpp image/x-canon-cr2:*.cr2 application/x-gnuplot:*.gnuplot application/ecmascript:*.es image/fax-g3:*.g3 text/x-idl:*.idl application/x-pkcs7-certificates:*.p7b application/pkcs7-mime:*.p7c application/andrew-inset:*.ez application/x-desktop:*.kdelnk application/vnd.ms-publisher:*.pub application/x-lzma-compressed-tar:*.tlz application/x-core:core text/x-xslfo:*.xslfo application/x-trig:*.trig application/pkcs7-mime:*.p7m application/msword:*.doc application/rdf+xml:*.owl text/cache-manifest:*.manifest application/pkcs7-signature:*.p7s image/x-emf:*.emf application/x-fluid:*.fl image/gif:*.gif message/rfc822:*.eml text/x-uil:*.uil image/ief:*.ief text/x-c++hdr:*.h++ text/x-xslfo:*.fo application/vnd.emusic-emusic_package:*.emp application/msword-template:*.dot text/vnd.graphviz:*.dot application/x-hdf:*.h4 application/x-hdf:*.h5 application/x-nzb:*.nzb video/vivo:*.viv audio/midi:*.kar video/x-msvideo:*.avf application/x-pkcs7-certificates:*.spc application/x-font-speedo:*.spd application/x-qtiplot:*.qti application/vnd.ms-excel.addin.macroEnabled.12:*.xlam application/x-tex-gf:*.gf application/vnd.ms-tnef:*.tnf application/x-quicktime-media-link:*.qtl text/x-patch:*.diff application/pkix-crl:*.crl application/vnd.openofficeorg.extension:*.oxt application/x-source-rpm:*.spm application/x-sms-rom:*.gg application/vnd.adobe.flash.movie:*.spl application/x-bzdvi:*.dvi.bz2 application/x-gnuplot:*.gp application/x-gameboy-rom:*.gb application/x-x509-ca-cert:*.crt image/x-sony-sr2:*.sr2 application/x-gz-font-linux-psf:*.psf.gz image/x-canon-crw:*.crw image/x-ilbm:*.iff audio/x-speex:*.spx audio/x-mod:*.ult audio/x-mod:*.669 video/x-flv:*.flv application/x-kivio:*.flw text/vnd.graphviz:*.gv audio/AMR-WB:*.awb application/pkix-pkipath:*.pkipath application/vnd.palm:*.oprc application/gzip:*.gz text/x-texinfo:*.texinfo video/x-flic:*.flc text/x-go:*.go application/x-cdrdao-toc:*.toc application/x-awk:*.awk application/x-csh:*.csh audio/x-s3m:*.s3m text/x-c++hdr:*.hh application/xml-external-parsed-entity:*.ent application/sql:*.sql image/x-gzeps:*.eps.gz video/x-msvideo:*.avi application/rss+xml:*.rss application/x-ufraw:*.ufraw text/css:*.css text/x-c++hdr:*.hp application/x-ms-wim:*.wim text/csv:*.csv text/x-haskell:*.hs application/x-mobipocket-ebook:*.mobi application/vnd.lotus-1-2-3:*.wk1 audio/annodex:*.axa application/vnd.lotus-1-2-3:*.wk3 application/vnd.lotus-1-2-3:*.wk4 application/x-wais-source:*.src application/rtf:*.rtf image/x-sony-srf:*.srf image/x-ilbm:*.ilbm audio/x-mpegurl:*.vlc application/x-smaf:*.smaf audio/x-mod:*.uni video/x-flic:*.fli text/sgml:*.sgml video/annodex:*.axv image/x-kodak-kdc:*.kdc text/x-txt2tags:*.t2t application/x-subrip:*.srt audio/x-it:*.it image/x-eps:*.eps application/x-gzpdf:*.pdf.gz image/x-eps:*.epsf text/richtext:*.rtx image/x-eps:*.epsi application/x-java-jce-keystore:*.jceks application/x-python-bytecode:*.pyc image/x-ilbm:*.lbm video/vivo:*.vivo text/x-ssa:*.ssa application/x-cue:*.cue audio/vnd.dts.hd:*.dtshd application/x-python-bytecode:*.pyo application/x-windows-themepack:*.themepack video/x-sgi-movie:*.movie text/x-cmake:*.cmake text/x-dsl:*.dsl application/x-trash:*% application/vnd.ms-powerpoint.slide.macroEnabled.12:*.sldm image/x-panasonic-raw2:*.rw2 application/gml+xml:*.gml application/javascript:*.js application/x-markaby:*.mab application/x-gettext-translation:*.gmo image/x-win-bitmap:*.cur text/x-fortran:*.for application/vnd.lotus-1-2-3:*.wks application/vnd.ms-works:*.wks text/x-python:*.pyx application/vnd.openxmlformats-officedocument.presentationml.slide:*.sldx text/x-makefile:*.mak application/x-troff-man:*.man message/x-gnu-rmail:rmail application/vnd.sun.xml.calc.template:*.stc application/vnd.sun.xml.draw.template:*.std application/xml-dtd:*.dtd application/x-iwork-keynote-sffkey:*.key application/vnd.sun.xml.impress.template:*.sti audio/prs.sid:*.psid application/x-abiword:*.abw.crashed application/x-kchart:*.chrt application/x-gnucash:*.gnc application/gnunet-directory:*.gnd audio/ogg:*.opus audio/x-opus+ogg:*.opus audio/x-stm:*.stm application/x-bzip:*.bz2 text/x-erlang:*.erl application/epub+zip:*.epub application/x-java-keystore:*.ks video/vnd.rn-realvideo:*.rvx application/x-m4:*.m4 application/vnd.sun.xml.writer.template:*.stw text/x-tex:*.sty audio/vnd.dts:*.dts application/json:*.json text/x-tex:*.dtx application/x-kformula:*.kfo application/x-bzip-compressed-tar:*.tar.bz2 application/x-java:*.class application/x-shared-library-la:*.la text/x-microdvd:*.sub text/x-mpsub:*.sub text/x-subviewer:*.sub application/font-woff:*.woff image/x-macpaint:*.pntg application/winhlp:*.hlp image/tiff:*.tiff audio/x-ms-wma:*.wma audio/x-voc:*.voc video/mpeg:*.vob text/troff:*.roff image/x-sun-raster:*.sun image/x-wmf:*.wmf application/x-tar:*.gtar text/vnd.wap.wml:*.wml application/x-par2:*.par2 application/x-par2:*.par2 application/x-cpio-compressed:*.cpio.gz application/vnd.stardivision.writer:*.vor image/x-compressed-xcf:*.xcf.gz text/x-lilypond:*.ly application/x-lzip:*.lz audio/x-psflib:*.psflib video/x-ms-wmv:*.wmv audio/x-ms-asx:*.wmx application/x-it87:*.it87 text/tab-separated-values:*.tsv audio/mp4:*.f4a audio/x-m4b:*.f4b audio/x-tta:*.tta application/x-trash:*~ application/x-font-ttf:*.ttc image/svg+xml:*.svg application/x-kexi-connectiondata:*.kexic application/x-font-ttf:*.ttf application/x-dvi:*.dvi application/vnd.ms-excel:*.xla text/x-java:*.java application/vnd.ms-excel:*.xlc application/vnd.ms-excel:*.xld application/pgp-encrypted:*.gpg application/pgp-keys:*.gpg application/pgp-signature:*.gpg application/x-xliff:*.xlf application/x-gettext-translation:*.mo text/x-modelica:*.mo text/x-svhdr:*.svh application/x-mswinurl:*.url image/x-gzeps:*.epsi.gz application/vnd.ms-access:*.mdb application/vnd.ms-excel:*.xll application/vnd.ms-excel:*.xlm application/vnd.ms-tnef:winmail.dat application/x-kexiproject-shortcut:*.kexis application/x-font-ttx:*.ttx application/x-raw-disk-image:*.raw-disk-image application/vnd.ms-works:*.xlr application/vnd.ms-excel:*.xls application/vnd.wordperfect:*.wp4 application/vnd.wordperfect:*.wp5 application/vnd.wordperfect:*.wp6 application/vnd.ms-excel:*.xlt application/vnd.ms-excel:*.xlw text/x-troff-mm:*.mm application/mathematica:*.nb application/x-netcdf:*.nc video/mp4:*.f4v application/vnd.adobe.flash.movie:*.swf text/x-makefile:*.mk image/vnd.dwg:*.dwg text/x-setext:*.etx image/vnd.ms-modi:*.mdi application/vnd.ms-powerpoint.template.macroEnabled.12:*.potm application/x-xz-compressed-tar:*.tar.xz application/x-ms-wim:*.swm video/mpeg:*.mpeg text/x-credits:credits audio/x-xmf:*.xmf text/x-iMelody:*.ime application/x-raw-disk-image:*.img text/x-xmi:*.xmi text/spreadsheet:*.sylk text/x-markdown:*.markdown application/xml:*.xml audio/x-mod:*.med text/vnd.wap.wmlscript:*.wmls image/x-bzeps:*.epsf.bz2 application/x-killustrator:*.kil application/pkcs8:*.p8 application/zip:*.zip text/x-vala:*.vala application/x-java-keystore:*.jks text/x-c++src:*.cxx text/x-iMelody:*.imy application/vnd.sun.xml.calc:*.sxc application/vnd.sun.xml.draw:*.sxd application/x-java-keystore:cacerts application/vnd.sun.xml.writer.global:*.sxg application/x-graphite:*.gra application/vnd.sun.xml.impress:*.sxi video/x-matroska-3d:*.mk3d application/vnd.wordperfect:*.wpd application/vnd.sun.xml.math:*.sxm application/vnd.ms-powerpoint.slideshow.macroEnabled.12:*.ppsm application/x-wpg:*.wpg application/x-gnuplot:*.gplt image/vnd.dxf:*.dxf application/x-lha:*.lha model/vrml:*.vrm application/vnd.ms-wpl:*.wpl audio/mpeg:*.mpga application/vnd.sun.xml.writer:*.sxw application/vnd.wordperfect:*.wpp text/x-c++hdr:*.hpp application/vnd.ms-works:*.wps text/plain:*,v text/x-markdown:*.md text/x-tex:*.ins text/x-troff-ms:*.ms application/x-tgif:*.obj text/x-c++src:*.C text/x-literate-haskell:*.lhs image/x-pict:*.pict text/x-ocaml:*.ml application/vnd.openxmlformats-officedocument.presentationml.slideshow:*.ppsx application/x-nintendo-ds-rom:*.nds application/x-bzip-compressed-tar:*.tbz2 application/vnd.hp-hpgl:*.hpgl application/x-lhz:*.lhz application/vnd.visio:*.vsd application/x-tex-pk:*.pk application/x-font-type1:*.gsf application/x-perl:*.pl application/x-perl:*.pl application/x-perl:*.pm application/vnd.ms-powerpoint.presentation.macroEnabled.12:*.pptm text/x-gettext-translation:*.po text/x-fortran:*.f90 audio/x-gsm:*.gsm application/postscript:*.ps application/vnd.openxmlformats-officedocument.presentationml.template:*.potx application/vnd.ms-word.document.macroEnabled.12:*.docm application/x-yaml:*.yml application/vnd.visio:*.vss application/vnd.visio:*.vst image/x-tga:*.vst application/x-karbon:*.karbon image/x-nikon-nef:*.nef audio/aac:*.aac application/vnd.visio:*.vsw application/x-archive:*.a text/x-csrc:*.c text/x-dsrc:*.d application/x-pw:*.pw application/x-magicpoint:*.mgp text/x-ocl:*.ocl application/x-pak:*.pak text/x-chdr:*.h text/x-fortran:*.f95 application/x-nes-rom:*.nes application/x-ms-dos-executable:*.exe text/x-objcsrc:*.m text/x-matlab:*.m text/x-troff-me:*.me application/x-object:*.o text/x-fortran:*.f text/x-pascal:*.p text/x-pascal:*.pas video/mp2t:*.clpi application/x-perl:*.t text/troff:*.t image/x-apple-ios-png:*.png text/x-readme:readme* application/pgp-encrypted:*.asc application/pgp-keys:*.asc application/pgp-signature:*.asc text/x-makefile:makefile.* Horde_Mime-2.10.3/doc/Horde/Mime/mime_mapping/mime.types0000664000175000017500000014742113055000403021064 0ustar janjan# This file maps Internet media types to unique file extension(s). # Although created for httpd, this file is used by many software systems # and has been placed in the public domain for unlimited redisribution. # # The table below contains both registered and (common) unregistered types. # A type that has no unique extension can be ignored -- they are listed # here to guide configurations toward known types and to make it easier to # identify "new" types. File extensions are also commonly used to indicate # content languages and encodings, so choose them carefully. # # Internet media types should be registered as described in RFC 4288. # The registry is at . # # MIME type (lowercased) Extensions # ============================================ ========== # application/1d-interleaved-parityfec # application/3gpp-ims+xml # application/activemessage application/andrew-inset ez # application/applefile application/applixware aw application/atom+xml atom application/atomcat+xml atomcat # application/atomicmail application/atomsvc+xml atomsvc # application/auth-policy+xml # application/batch-smtp # application/beep+xml # application/calendar+xml # application/cals-1840 # application/ccmp+xml application/ccxml+xml ccxml application/cdmi-capability cdmia application/cdmi-container cdmic application/cdmi-domain cdmid application/cdmi-object cdmio application/cdmi-queue cdmiq # application/cea-2018+xml # application/cellml+xml # application/cfw # application/cnrp+xml # application/commonground # application/conference-info+xml # application/cpl+xml # application/csta+xml # application/cstadata+xml application/cu-seeme cu # application/cybercash application/davmount+xml davmount # application/dca-rft # application/dec-dx # application/dialog-info+xml # application/dicom # application/dns application/docbook+xml dbk # application/dskpp+xml application/dssc+der dssc application/dssc+xml xdssc # application/dvcs application/ecmascript ecma # application/edi-consent # application/edi-x12 # application/edifact application/emma+xml emma # application/epp+xml application/epub+zip epub # application/eshop # application/example application/exi exi # application/fastinfoset # application/fastsoap # application/fits application/font-tdpfr pfr # application/framework-attributes+xml application/gml+xml gml application/gpx+xml gpx application/gxf gxf # application/h224 # application/held+xml # application/http application/hyperstudio stk # application/ibe-key-request+xml # application/ibe-pkg-reply+xml # application/ibe-pp-data # application/iges # application/im-iscomposing+xml # application/index # application/index.cmd # application/index.obj # application/index.response # application/index.vnd application/inkml+xml ink inkml # application/iotp application/ipfix ipfix # application/ipp # application/isup application/java-archive jar application/java-serialized-object ser application/java-vm class application/javascript js application/json json application/jsonml+json jsonml # application/kpml-request+xml # application/kpml-response+xml application/lost+xml lostxml application/mac-binhex40 hqx application/mac-compactpro cpt # application/macwriteii application/mads+xml mads application/marc mrc application/marcxml+xml mrcx application/mathematica ma nb mb # application/mathml-content+xml # application/mathml-presentation+xml application/mathml+xml mathml # application/mbms-associated-procedure-description+xml # application/mbms-deregister+xml # application/mbms-envelope+xml # application/mbms-msk+xml # application/mbms-msk-response+xml # application/mbms-protection-description+xml # application/mbms-reception-report+xml # application/mbms-register+xml # application/mbms-register-response+xml # application/mbms-user-service-description+xml application/mbox mbox # application/media_control+xml application/mediaservercontrol+xml mscml application/metalink+xml metalink application/metalink4+xml meta4 application/mets+xml mets # application/mikey application/mods+xml mods # application/moss-keys # application/moss-signature # application/mosskey-data # application/mosskey-request application/mp21 m21 mp21 application/mp4 mp4s # application/mpeg4-generic # application/mpeg4-iod # application/mpeg4-iod-xmt # application/msc-ivr+xml # application/msc-mixer+xml application/msword doc dot application/mxf mxf # application/nasdata # application/news-checkgroups # application/news-groupinfo # application/news-transmission # application/nss # application/ocsp-request # application/ocsp-response application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy application/oda oda application/oebps-package+xml opf application/ogg ogx application/omdoc+xml omdoc application/onenote onetoc onetoc2 onetmp onepkg application/oxps oxps # application/parityfec application/patch-ops-error+xml xer application/pdf pdf application/pgp-encrypted pgp # application/pgp-keys application/pgp-signature asc sig application/pics-rules prf # application/pidf+xml # application/pidf-diff+xml application/pkcs10 p10 application/pkcs7-mime p7m p7c application/pkcs7-signature p7s application/pkcs8 p8 application/pkix-attr-cert ac application/pkix-cert cer application/pkix-crl crl application/pkix-pkipath pkipath application/pkixcmp pki application/pls+xml pls # application/poc-settings+xml application/postscript ai eps ps # application/prs.alvestrand.titrax-sheet application/prs.cww cww # application/prs.nprend # application/prs.plucker # application/prs.rdf-xml-crypt # application/prs.xsf+xml application/pskc+xml pskcxml # application/qsig application/rdf+xml rdf application/reginfo+xml rif application/relax-ng-compact-syntax rnc # application/remote-printing application/resource-lists+xml rl application/resource-lists-diff+xml rld # application/riscos # application/rlmi+xml application/rls-services+xml rs application/rpki-ghostbusters gbr application/rpki-manifest mft application/rpki-roa roa # application/rpki-updown application/rsd+xml rsd application/rss+xml rss application/rtf rtf # application/rtx # application/samlassertion+xml # application/samlmetadata+xml application/sbml+xml sbml application/scvp-cv-request scq application/scvp-cv-response scs application/scvp-vp-request spq application/scvp-vp-response spp application/sdp sdp # application/set-payment application/set-payment-initiation setpay # application/set-registration application/set-registration-initiation setreg # application/sgml # application/sgml-open-catalog application/shf+xml shf # application/sieve # application/simple-filter+xml # application/simple-message-summary # application/simplesymbolcontainer # application/slate # application/smil application/smil+xml smi smil # application/soap+fastinfoset # application/soap+xml application/sparql-query rq application/sparql-results+xml srx # application/spirits-event+xml application/srgs gram application/srgs+xml grxml application/sru+xml sru application/ssdl+xml ssdl application/ssml+xml ssml # application/tamp-apex-update # application/tamp-apex-update-confirm # application/tamp-community-update # application/tamp-community-update-confirm # application/tamp-error # application/tamp-sequence-adjust # application/tamp-sequence-adjust-confirm # application/tamp-status-query # application/tamp-status-response # application/tamp-update # application/tamp-update-confirm application/tei+xml tei teicorpus application/thraud+xml tfi # application/timestamp-query # application/timestamp-reply application/timestamped-data tsd # application/tve-trigger # application/ulpfec # application/vcard+xml # application/vemmi # application/vividence.scriptfile # application/vnd.3gpp.bsf+xml application/vnd.3gpp.pic-bw-large plb application/vnd.3gpp.pic-bw-small psb application/vnd.3gpp.pic-bw-var pvb # application/vnd.3gpp.sms # application/vnd.3gpp2.bcmcsinfo+xml # application/vnd.3gpp2.sms application/vnd.3gpp2.tcap tcap application/vnd.3m.post-it-notes pwn application/vnd.accpac.simply.aso aso application/vnd.accpac.simply.imp imp application/vnd.acucobol acu application/vnd.acucorp atc acutc application/vnd.adobe.air-application-installer-package+zip air application/vnd.adobe.formscentral.fcdt fcdt application/vnd.adobe.fxp fxp fxpl # application/vnd.adobe.partial-upload application/vnd.adobe.xdp+xml xdp application/vnd.adobe.xfdf xfdf # application/vnd.aether.imp # application/vnd.ah-barcode application/vnd.ahead.space ahead application/vnd.airzip.filesecure.azf azf application/vnd.airzip.filesecure.azs azs application/vnd.amazon.ebook azw application/vnd.americandynamics.acc acc application/vnd.amiga.ami ami # application/vnd.amundsen.maze+xml application/vnd.android.package-archive apk application/vnd.anser-web-certificate-issue-initiation cii application/vnd.anser-web-funds-transfer-initiation fti application/vnd.antix.game-component atx application/vnd.apple.installer+xml mpkg application/vnd.apple.mpegurl m3u8 # application/vnd.arastra.swi application/vnd.aristanetworks.swi swi application/vnd.astraea-software.iota iota application/vnd.audiograph aep # application/vnd.autopackage # application/vnd.avistar+xml application/vnd.blueice.multipass mpm # application/vnd.bluetooth.ep.oob application/vnd.bmi bmi application/vnd.businessobjects rep # application/vnd.cab-jscript # application/vnd.canon-cpdl # application/vnd.canon-lips # application/vnd.cendio.thinlinc.clientconf application/vnd.chemdraw+xml cdxml application/vnd.chipnuts.karaoke-mmd mmd application/vnd.cinderella cdy # application/vnd.cirpack.isdn-ext application/vnd.claymore cla application/vnd.cloanto.rp9 rp9 application/vnd.clonk.c4group c4g c4d c4f c4p c4u application/vnd.cluetrust.cartomobile-config c11amc application/vnd.cluetrust.cartomobile-config-pkg c11amz # application/vnd.collection+json # application/vnd.commerce-battelle application/vnd.commonspace csp application/vnd.contact.cmsg cdbcmsg application/vnd.cosmocaller cmc application/vnd.crick.clicker clkx application/vnd.crick.clicker.keyboard clkk application/vnd.crick.clicker.palette clkp application/vnd.crick.clicker.template clkt application/vnd.crick.clicker.wordbank clkw application/vnd.criticaltools.wbs+xml wbs application/vnd.ctc-posml pml # application/vnd.ctct.ws+xml # application/vnd.cups-pdf # application/vnd.cups-postscript application/vnd.cups-ppd ppd # application/vnd.cups-raster # application/vnd.cups-raw # application/vnd.curl application/vnd.curl.car car application/vnd.curl.pcurl pcurl # application/vnd.cybank application/vnd.dart dart application/vnd.data-vision.rdz rdz application/vnd.dece.data uvf uvvf uvd uvvd application/vnd.dece.ttml+xml uvt uvvt application/vnd.dece.unspecified uvx uvvx application/vnd.dece.zip uvz uvvz application/vnd.denovo.fcselayout-link fe_launch # application/vnd.dir-bi.plate-dl-nosuffix application/vnd.dna dna application/vnd.dolby.mlp mlp # application/vnd.dolby.mobile.1 # application/vnd.dolby.mobile.2 application/vnd.dpgraph dpg application/vnd.dreamfactory dfac application/vnd.ds-keypoint kpxx application/vnd.dvb.ait ait # application/vnd.dvb.dvbj # application/vnd.dvb.esgcontainer # application/vnd.dvb.ipdcdftnotifaccess # application/vnd.dvb.ipdcesgaccess # application/vnd.dvb.ipdcesgaccess2 # application/vnd.dvb.ipdcesgpdd # application/vnd.dvb.ipdcroaming # application/vnd.dvb.iptv.alfec-base # application/vnd.dvb.iptv.alfec-enhancement # application/vnd.dvb.notif-aggregate-root+xml # application/vnd.dvb.notif-container+xml # application/vnd.dvb.notif-generic+xml # application/vnd.dvb.notif-ia-msglist+xml # application/vnd.dvb.notif-ia-registration-request+xml # application/vnd.dvb.notif-ia-registration-response+xml # application/vnd.dvb.notif-init+xml # application/vnd.dvb.pfr application/vnd.dvb.service svc # application/vnd.dxr application/vnd.dynageo geo # application/vnd.easykaraoke.cdgdownload # application/vnd.ecdis-update application/vnd.ecowin.chart mag # application/vnd.ecowin.filerequest # application/vnd.ecowin.fileupdate # application/vnd.ecowin.series # application/vnd.ecowin.seriesrequest # application/vnd.ecowin.seriesupdate # application/vnd.emclient.accessrequest+xml application/vnd.enliven nml # application/vnd.eprints.data+xml application/vnd.epson.esf esf application/vnd.epson.msf msf application/vnd.epson.quickanime qam application/vnd.epson.salt slt application/vnd.epson.ssf ssf # application/vnd.ericsson.quickcall application/vnd.eszigno3+xml es3 et3 # application/vnd.etsi.aoc+xml # application/vnd.etsi.cug+xml # application/vnd.etsi.iptvcommand+xml # application/vnd.etsi.iptvdiscovery+xml # application/vnd.etsi.iptvprofile+xml # application/vnd.etsi.iptvsad-bc+xml # application/vnd.etsi.iptvsad-cod+xml # application/vnd.etsi.iptvsad-npvr+xml # application/vnd.etsi.iptvservice+xml # application/vnd.etsi.iptvsync+xml # application/vnd.etsi.iptvueprofile+xml # application/vnd.etsi.mcid+xml # application/vnd.etsi.overload-control-policy-dataset+xml # application/vnd.etsi.sci+xml # application/vnd.etsi.simservs+xml # application/vnd.etsi.tsl+xml # application/vnd.etsi.tsl.der # application/vnd.eudora.data application/vnd.ezpix-album ez2 application/vnd.ezpix-package ez3 # application/vnd.f-secure.mobile application/vnd.fdf fdf application/vnd.fdsn.mseed mseed application/vnd.fdsn.seed seed dataless # application/vnd.ffsns # application/vnd.fints application/vnd.flographit gph application/vnd.fluxtime.clip ftc # application/vnd.font-fontforge-sfd application/vnd.framemaker fm frame maker book application/vnd.frogans.fnc fnc application/vnd.frogans.ltf ltf application/vnd.fsc.weblaunch fsc application/vnd.fujitsu.oasys oas application/vnd.fujitsu.oasys2 oa2 application/vnd.fujitsu.oasys3 oa3 application/vnd.fujitsu.oasysgp fg5 application/vnd.fujitsu.oasysprs bh2 # application/vnd.fujixerox.art-ex # application/vnd.fujixerox.art4 # application/vnd.fujixerox.hbpl application/vnd.fujixerox.ddd ddd application/vnd.fujixerox.docuworks xdw application/vnd.fujixerox.docuworks.binder xbd # application/vnd.fut-misnet application/vnd.fuzzysheet fzs application/vnd.genomatix.tuxedo txd # application/vnd.geocube+xml application/vnd.geogebra.file ggb application/vnd.geogebra.tool ggt application/vnd.geometry-explorer gex gre application/vnd.geonext gxt application/vnd.geoplan g2w application/vnd.geospace g3w # application/vnd.globalplatform.card-content-mgt # application/vnd.globalplatform.card-content-mgt-response application/vnd.gmx gmx application/vnd.google-earth.kml+xml kml application/vnd.google-earth.kmz kmz application/vnd.grafeq gqf gqs # application/vnd.gridmp application/vnd.groove-account gac application/vnd.groove-help ghf application/vnd.groove-identity-message gim application/vnd.groove-injector grv application/vnd.groove-tool-message gtm application/vnd.groove-tool-template tpl application/vnd.groove-vcard vcg # application/vnd.hal+json application/vnd.hal+xml hal application/vnd.handheld-entertainment+xml zmm application/vnd.hbci hbci # application/vnd.hcl-bireports application/vnd.hhe.lesson-player les application/vnd.hp-hpgl hpgl application/vnd.hp-hpid hpid application/vnd.hp-hps hps application/vnd.hp-jlyt jlt application/vnd.hp-pcl pcl application/vnd.hp-pclxl pclxl # application/vnd.httphone application/vnd.hydrostatix.sof-data sfd-hdstx # application/vnd.hzn-3d-crossword # application/vnd.ibm.afplinedata # application/vnd.ibm.electronic-media application/vnd.ibm.minipay mpy application/vnd.ibm.modcap afp listafp list3820 application/vnd.ibm.rights-management irm application/vnd.ibm.secure-container sc application/vnd.iccprofile icc icm application/vnd.igloader igl application/vnd.immervision-ivp ivp application/vnd.immervision-ivu ivu # application/vnd.informedcontrol.rms+xml # application/vnd.informix-visionary # application/vnd.infotech.project # application/vnd.infotech.project+xml # application/vnd.innopath.wamp.notification application/vnd.insors.igm igm application/vnd.intercon.formnet xpw xpx application/vnd.intergeo i2g # application/vnd.intertrust.digibox # application/vnd.intertrust.nncp application/vnd.intu.qbo qbo application/vnd.intu.qfx qfx # application/vnd.iptc.g2.conceptitem+xml # application/vnd.iptc.g2.knowledgeitem+xml # application/vnd.iptc.g2.newsitem+xml # application/vnd.iptc.g2.newsmessage+xml # application/vnd.iptc.g2.packageitem+xml # application/vnd.iptc.g2.planningitem+xml application/vnd.ipunplugged.rcprofile rcprofile application/vnd.irepository.package+xml irp application/vnd.is-xpr xpr application/vnd.isac.fcs fcs application/vnd.jam jam # application/vnd.japannet-directory-service # application/vnd.japannet-jpnstore-wakeup # application/vnd.japannet-payment-wakeup # application/vnd.japannet-registration # application/vnd.japannet-registration-wakeup # application/vnd.japannet-setstore-wakeup # application/vnd.japannet-verification # application/vnd.japannet-verification-wakeup application/vnd.jcp.javame.midlet-rms rms application/vnd.jisp jisp application/vnd.joost.joda-archive joda application/vnd.kahootz ktz ktr application/vnd.kde.karbon karbon application/vnd.kde.kchart chrt application/vnd.kde.kformula kfo application/vnd.kde.kivio flw application/vnd.kde.kontour kon application/vnd.kde.kpresenter kpr kpt application/vnd.kde.kspread ksp application/vnd.kde.kword kwd kwt application/vnd.kenameaapp htke application/vnd.kidspiration kia application/vnd.kinar kne knp application/vnd.koan skp skd skt skm application/vnd.kodak-descriptor sse application/vnd.las.las+xml lasxml # application/vnd.liberty-request+xml application/vnd.llamagraphics.life-balance.desktop lbd application/vnd.llamagraphics.life-balance.exchange+xml lbe application/vnd.lotus-1-2-3 123 application/vnd.lotus-approach apr application/vnd.lotus-freelance pre application/vnd.lotus-notes nsf application/vnd.lotus-organizer org application/vnd.lotus-screencam scm application/vnd.lotus-wordpro lwp application/vnd.macports.portpkg portpkg # application/vnd.marlin.drm.actiontoken+xml # application/vnd.marlin.drm.conftoken+xml # application/vnd.marlin.drm.license+xml # application/vnd.marlin.drm.mdcf application/vnd.mcd mcd application/vnd.medcalcdata mc1 application/vnd.mediastation.cdkey cdkey # application/vnd.meridian-slingshot application/vnd.mfer mwf application/vnd.mfmp mfm application/vnd.micrografx.flo flo application/vnd.micrografx.igx igx application/vnd.mif mif # application/vnd.minisoft-hp3000-save # application/vnd.mitsubishi.misty-guard.trustweb application/vnd.mobius.daf daf application/vnd.mobius.dis dis application/vnd.mobius.mbk mbk application/vnd.mobius.mqy mqy application/vnd.mobius.msl msl application/vnd.mobius.plc plc application/vnd.mobius.txf txf application/vnd.mophun.application mpn application/vnd.mophun.certificate mpc # application/vnd.motorola.flexsuite # application/vnd.motorola.flexsuite.adsi # application/vnd.motorola.flexsuite.fis # application/vnd.motorola.flexsuite.gotap # application/vnd.motorola.flexsuite.kmr # application/vnd.motorola.flexsuite.ttc # application/vnd.motorola.flexsuite.wem # application/vnd.motorola.iprm application/vnd.mozilla.xul+xml xul application/vnd.ms-artgalry cil # application/vnd.ms-asf application/vnd.ms-cab-compressed cab # application/vnd.ms-color.iccprofile application/vnd.ms-excel xls xlm xla xlc xlt xlw application/vnd.ms-excel.addin.macroenabled.12 xlam application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb application/vnd.ms-excel.sheet.macroenabled.12 xlsm application/vnd.ms-excel.template.macroenabled.12 xltm application/vnd.ms-fontobject eot application/vnd.ms-htmlhelp chm application/vnd.ms-ims ims application/vnd.ms-lrm lrm # application/vnd.ms-office.activex+xml application/vnd.ms-officetheme thmx # application/vnd.ms-opentype # application/vnd.ms-package.obfuscated-opentype application/vnd.ms-pki.seccat cat application/vnd.ms-pki.stl stl # application/vnd.ms-playready.initiator+xml application/vnd.ms-powerpoint ppt pps pot application/vnd.ms-powerpoint.addin.macroenabled.12 ppam application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm application/vnd.ms-powerpoint.slide.macroenabled.12 sldm application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm application/vnd.ms-powerpoint.template.macroenabled.12 potm # application/vnd.ms-printing.printticket+xml application/vnd.ms-project mpp mpt # application/vnd.ms-tnef # application/vnd.ms-wmdrm.lic-chlg-req # application/vnd.ms-wmdrm.lic-resp # application/vnd.ms-wmdrm.meter-chlg-req # application/vnd.ms-wmdrm.meter-resp application/vnd.ms-word.document.macroenabled.12 docm application/vnd.ms-word.template.macroenabled.12 dotm application/vnd.ms-works wps wks wcm wdb application/vnd.ms-wpl wpl application/vnd.ms-xpsdocument xps application/vnd.mseq mseq # application/vnd.msign # application/vnd.multiad.creator # application/vnd.multiad.creator.cif # application/vnd.music-niff application/vnd.musician mus application/vnd.muvee.style msty application/vnd.mynfc taglet # application/vnd.ncd.control # application/vnd.ncd.reference # application/vnd.nervana # application/vnd.netfpx application/vnd.neurolanguage.nlu nlu application/vnd.nitf ntf nitf application/vnd.noblenet-directory nnd application/vnd.noblenet-sealer nns application/vnd.noblenet-web nnw # application/vnd.nokia.catalogs # application/vnd.nokia.conml+wbxml # application/vnd.nokia.conml+xml # application/vnd.nokia.isds-radio-presets # application/vnd.nokia.iptv.config+xml # application/vnd.nokia.landmark+wbxml # application/vnd.nokia.landmark+xml # application/vnd.nokia.landmarkcollection+xml # application/vnd.nokia.n-gage.ac+xml application/vnd.nokia.n-gage.data ngdat application/vnd.nokia.n-gage.symbian.install n-gage # application/vnd.nokia.ncd # application/vnd.nokia.pcd+wbxml # application/vnd.nokia.pcd+xml application/vnd.nokia.radio-preset rpst application/vnd.nokia.radio-presets rpss application/vnd.novadigm.edm edm application/vnd.novadigm.edx edx application/vnd.novadigm.ext ext # application/vnd.ntt-local.file-transfer # application/vnd.ntt-local.sip-ta_remote # application/vnd.ntt-local.sip-ta_tcp_stream application/vnd.oasis.opendocument.chart odc application/vnd.oasis.opendocument.chart-template otc application/vnd.oasis.opendocument.database odb application/vnd.oasis.opendocument.formula odf application/vnd.oasis.opendocument.formula-template odft application/vnd.oasis.opendocument.graphics odg application/vnd.oasis.opendocument.graphics-template otg application/vnd.oasis.opendocument.image odi application/vnd.oasis.opendocument.image-template oti application/vnd.oasis.opendocument.presentation odp application/vnd.oasis.opendocument.presentation-template otp application/vnd.oasis.opendocument.spreadsheet ods application/vnd.oasis.opendocument.spreadsheet-template ots application/vnd.oasis.opendocument.text odt application/vnd.oasis.opendocument.text-master odm application/vnd.oasis.opendocument.text-template ott application/vnd.oasis.opendocument.text-web oth # application/vnd.obn # application/vnd.oftn.l10n+json # application/vnd.oipf.contentaccessdownload+xml # application/vnd.oipf.contentaccessstreaming+xml # application/vnd.oipf.cspg-hexbinary # application/vnd.oipf.dae.svg+xml # application/vnd.oipf.dae.xhtml+xml # application/vnd.oipf.mippvcontrolmessage+xml # application/vnd.oipf.pae.gem # application/vnd.oipf.spdiscovery+xml # application/vnd.oipf.spdlist+xml # application/vnd.oipf.ueprofile+xml # application/vnd.oipf.userprofile+xml application/vnd.olpc-sugar xo # application/vnd.oma-scws-config # application/vnd.oma-scws-http-request # application/vnd.oma-scws-http-response # application/vnd.oma.bcast.associated-procedure-parameter+xml # application/vnd.oma.bcast.drm-trigger+xml # application/vnd.oma.bcast.imd+xml # application/vnd.oma.bcast.ltkm # application/vnd.oma.bcast.notification+xml # application/vnd.oma.bcast.provisioningtrigger # application/vnd.oma.bcast.sgboot # application/vnd.oma.bcast.sgdd+xml # application/vnd.oma.bcast.sgdu # application/vnd.oma.bcast.simple-symbol-container # application/vnd.oma.bcast.smartcard-trigger+xml # application/vnd.oma.bcast.sprov+xml # application/vnd.oma.bcast.stkm # application/vnd.oma.cab-address-book+xml # application/vnd.oma.cab-feature-handler+xml # application/vnd.oma.cab-pcc+xml # application/vnd.oma.cab-user-prefs+xml # application/vnd.oma.dcd # application/vnd.oma.dcdc application/vnd.oma.dd2+xml dd2 # application/vnd.oma.drm.risd+xml # application/vnd.oma.group-usage-list+xml # application/vnd.oma.pal+xml # application/vnd.oma.poc.detailed-progress-report+xml # application/vnd.oma.poc.final-report+xml # application/vnd.oma.poc.groups+xml # application/vnd.oma.poc.invocation-descriptor+xml # application/vnd.oma.poc.optimized-progress-report+xml # application/vnd.oma.push # application/vnd.oma.scidm.messages+xml # application/vnd.oma.xcap-directory+xml # application/vnd.omads-email+xml # application/vnd.omads-file+xml # application/vnd.omads-folder+xml # application/vnd.omaloc-supl-init application/vnd.openofficeorg.extension oxt # application/vnd.openxmlformats-officedocument.custom-properties+xml # application/vnd.openxmlformats-officedocument.customxmlproperties+xml # application/vnd.openxmlformats-officedocument.drawing+xml # application/vnd.openxmlformats-officedocument.drawingml.chart+xml # application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml # application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml # application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml # application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml # application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml # application/vnd.openxmlformats-officedocument.extended-properties+xml # application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml # application/vnd.openxmlformats-officedocument.presentationml.comments+xml # application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml # application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml # application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml application/vnd.openxmlformats-officedocument.presentationml.presentation pptx # application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml # application/vnd.openxmlformats-officedocument.presentationml.presprops+xml application/vnd.openxmlformats-officedocument.presentationml.slide sldx # application/vnd.openxmlformats-officedocument.presentationml.slide+xml # application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml # application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx # application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml # application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml # application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml # application/vnd.openxmlformats-officedocument.presentationml.tags+xml application/vnd.openxmlformats-officedocument.presentationml.template potx # application/vnd.openxmlformats-officedocument.presentationml.template.main+xml # application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx # application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx # application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml # application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml # application/vnd.openxmlformats-officedocument.theme+xml # application/vnd.openxmlformats-officedocument.themeoverride+xml # application/vnd.openxmlformats-officedocument.vmldrawing # application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml application/vnd.openxmlformats-officedocument.wordprocessingml.document docx # application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml # application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml # application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml # application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml # application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml # application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml # application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml # application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml # application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx # application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml # application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml # application/vnd.openxmlformats-package.core-properties+xml # application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml # application/vnd.openxmlformats-package.relationships+xml # application/vnd.quobject-quoxdocument # application/vnd.osa.netdeploy application/vnd.osgeo.mapguide.package mgp # application/vnd.osgi.bundle application/vnd.osgi.dp dp application/vnd.osgi.subsystem esa # application/vnd.otps.ct-kip+xml application/vnd.palm pdb pqa oprc # application/vnd.paos.xml application/vnd.pawaafile paw application/vnd.pg.format str application/vnd.pg.osasli ei6 # application/vnd.piaccess.application-licence application/vnd.picsel efif application/vnd.pmi.widget wg # application/vnd.poc.group-advertisement+xml application/vnd.pocketlearn plf application/vnd.powerbuilder6 pbd # application/vnd.powerbuilder6-s # application/vnd.powerbuilder7 # application/vnd.powerbuilder7-s # application/vnd.powerbuilder75 # application/vnd.powerbuilder75-s # application/vnd.preminet application/vnd.previewsystems.box box application/vnd.proteus.magazine mgz application/vnd.publishare-delta-tree qps application/vnd.pvi.ptid1 ptid # application/vnd.pwg-multiplexed # application/vnd.pwg-xhtml-print+xml # application/vnd.qualcomm.brew-app-res application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb # application/vnd.radisys.moml+xml # application/vnd.radisys.msml+xml # application/vnd.radisys.msml-audit+xml # application/vnd.radisys.msml-audit-conf+xml # application/vnd.radisys.msml-audit-conn+xml # application/vnd.radisys.msml-audit-dialog+xml # application/vnd.radisys.msml-audit-stream+xml # application/vnd.radisys.msml-conf+xml # application/vnd.radisys.msml-dialog+xml # application/vnd.radisys.msml-dialog-base+xml # application/vnd.radisys.msml-dialog-fax-detect+xml # application/vnd.radisys.msml-dialog-fax-sendrecv+xml # application/vnd.radisys.msml-dialog-group+xml # application/vnd.radisys.msml-dialog-speech+xml # application/vnd.radisys.msml-dialog-transform+xml # application/vnd.rainstor.data # application/vnd.rapid application/vnd.realvnc.bed bed application/vnd.recordare.musicxml mxl application/vnd.recordare.musicxml+xml musicxml # application/vnd.renlearn.rlprint application/vnd.rig.cryptonote cryptonote application/vnd.rim.cod cod application/vnd.rn-realmedia rm application/vnd.rn-realmedia-vbr rmvb application/vnd.route66.link66+xml link66 # application/vnd.rs-274x # application/vnd.ruckus.download # application/vnd.s3sms application/vnd.sailingtracker.track st # application/vnd.sbm.cid # application/vnd.sbm.mid2 # application/vnd.scribus # application/vnd.sealed.3df # application/vnd.sealed.csf # application/vnd.sealed.doc # application/vnd.sealed.eml # application/vnd.sealed.mht # application/vnd.sealed.net # application/vnd.sealed.ppt # application/vnd.sealed.tiff # application/vnd.sealed.xls # application/vnd.sealedmedia.softseal.html # application/vnd.sealedmedia.softseal.pdf application/vnd.seemail see application/vnd.sema sema application/vnd.semd semd application/vnd.semf semf application/vnd.shana.informed.formdata ifm application/vnd.shana.informed.formtemplate itp application/vnd.shana.informed.interchange iif application/vnd.shana.informed.package ipk application/vnd.simtech-mindmapper twd twds application/vnd.smaf mmf # application/vnd.smart.notebook application/vnd.smart.teacher teacher # application/vnd.software602.filler.form+xml # application/vnd.software602.filler.form-xml-zip application/vnd.solent.sdkm+xml sdkm sdkd application/vnd.spotfire.dxp dxp application/vnd.spotfire.sfs sfs # application/vnd.sss-cod # application/vnd.sss-dtf # application/vnd.sss-ntf application/vnd.stardivision.calc sdc application/vnd.stardivision.draw sda application/vnd.stardivision.impress sdd application/vnd.stardivision.math smf application/vnd.stardivision.writer sdw vor application/vnd.stardivision.writer-global sgl application/vnd.stepmania.package smzip application/vnd.stepmania.stepchart sm # application/vnd.street-stream application/vnd.sun.xml.calc sxc application/vnd.sun.xml.calc.template stc application/vnd.sun.xml.draw sxd application/vnd.sun.xml.draw.template std application/vnd.sun.xml.impress sxi application/vnd.sun.xml.impress.template sti application/vnd.sun.xml.math sxm application/vnd.sun.xml.writer sxw application/vnd.sun.xml.writer.global sxg application/vnd.sun.xml.writer.template stw # application/vnd.sun.wadl+xml application/vnd.sus-calendar sus susp application/vnd.svd svd # application/vnd.swiftview-ics application/vnd.symbian.install sis sisx application/vnd.syncml+xml xsm application/vnd.syncml.dm+wbxml bdm application/vnd.syncml.dm+xml xdm # application/vnd.syncml.dm.notification # application/vnd.syncml.ds.notification application/vnd.tao.intent-module-archive tao application/vnd.tcpdump.pcap pcap cap dmp application/vnd.tmobile-livetv tmo application/vnd.trid.tpt tpt application/vnd.triscape.mxs mxs application/vnd.trueapp tra # application/vnd.truedoc # application/vnd.ubisoft.webplayer application/vnd.ufdl ufd ufdl application/vnd.uiq.theme utz application/vnd.umajin umj application/vnd.unity unityweb application/vnd.uoml+xml uoml # application/vnd.uplanet.alert # application/vnd.uplanet.alert-wbxml # application/vnd.uplanet.bearer-choice # application/vnd.uplanet.bearer-choice-wbxml # application/vnd.uplanet.cacheop # application/vnd.uplanet.cacheop-wbxml # application/vnd.uplanet.channel # application/vnd.uplanet.channel-wbxml # application/vnd.uplanet.list # application/vnd.uplanet.list-wbxml # application/vnd.uplanet.listcmd # application/vnd.uplanet.listcmd-wbxml # application/vnd.uplanet.signal application/vnd.vcx vcx # application/vnd.vd-study # application/vnd.vectorworks # application/vnd.verimatrix.vcas # application/vnd.vidsoft.vidconference application/vnd.visio vsd vst vss vsw application/vnd.visionary vis # application/vnd.vividence.scriptfile application/vnd.vsf vsf # application/vnd.wap.sic # application/vnd.wap.slc application/vnd.wap.wbxml wbxml application/vnd.wap.wmlc wmlc application/vnd.wap.wmlscriptc wmlsc application/vnd.webturbo wtb # application/vnd.wfa.wsc # application/vnd.wmc # application/vnd.wmf.bootstrap # application/vnd.wolfram.mathematica # application/vnd.wolfram.mathematica.package application/vnd.wolfram.player nbp application/vnd.wordperfect wpd application/vnd.wqd wqd # application/vnd.wrq-hp3000-labelled application/vnd.wt.stf stf # application/vnd.wv.csp+wbxml # application/vnd.wv.csp+xml # application/vnd.wv.ssp+xml application/vnd.xara xar application/vnd.xfdl xfdl # application/vnd.xfdl.webform # application/vnd.xmi+xml # application/vnd.xmpie.cpkg # application/vnd.xmpie.dpkg # application/vnd.xmpie.plan # application/vnd.xmpie.ppkg # application/vnd.xmpie.xlim application/vnd.yamaha.hv-dic hvd application/vnd.yamaha.hv-script hvs application/vnd.yamaha.hv-voice hvp application/vnd.yamaha.openscoreformat osf application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg # application/vnd.yamaha.remote-setup application/vnd.yamaha.smaf-audio saf application/vnd.yamaha.smaf-phrase spf # application/vnd.yamaha.through-ngn # application/vnd.yamaha.tunnel-udpencap application/vnd.yellowriver-custom-menu cmp application/vnd.zul zir zirz application/vnd.zzazz.deck+xml zaz application/voicexml+xml vxml # application/vq-rtcpxr # application/watcherinfo+xml # application/whoispp-query # application/whoispp-response application/widget wgt application/winhlp hlp # application/wita # application/wordperfect5.1 application/wsdl+xml wsdl application/wspolicy+xml wspolicy application/x-7z-compressed 7z application/x-abiword abw application/x-ace-compressed ace # application/x-amf application/x-apple-diskimage dmg application/x-authorware-bin aab x32 u32 vox application/x-authorware-map aam application/x-authorware-seg aas application/x-bcpio bcpio application/x-bittorrent torrent application/x-blorb blb blorb application/x-bzip bz application/x-bzip2 bz2 boz application/x-cbr cbr cba cbt cbz cb7 application/x-cdlink vcd application/x-cfs-compressed cfs application/x-chat chat application/x-chess-pgn pgn application/x-conference nsc # application/x-compress application/x-cpio cpio application/x-csh csh application/x-debian-package deb udeb application/x-dgc-compressed dgc application/x-director dir dcr dxr cst cct cxt w3d fgd swa application/x-doom wad application/x-dtbncx+xml ncx application/x-dtbook+xml dtb application/x-dtbresource+xml res application/x-dvi dvi application/x-envoy evy application/x-eva eva application/x-font-bdf bdf # application/x-font-dos # application/x-font-framemaker application/x-font-ghostscript gsf # application/x-font-libgrx application/x-font-linux-psf psf application/x-font-otf otf application/x-font-pcf pcf application/x-font-snf snf # application/x-font-speedo # application/x-font-sunos-news application/x-font-ttf ttf ttc application/x-font-type1 pfa pfb pfm afm application/font-woff woff # application/x-font-vfont application/x-freearc arc application/x-futuresplash spl application/x-gca-compressed gca application/x-glulx ulx application/x-gnumeric gnumeric application/x-gramps-xml gramps application/x-gtar gtar # application/x-gzip application/x-hdf hdf application/x-install-instructions install application/x-iso9660-image iso application/x-java-jnlp-file jnlp application/x-latex latex application/x-lzh-compressed lzh lha application/x-mie mie application/x-mobipocket-ebook prc mobi application/x-ms-application application application/x-ms-shortcut lnk application/x-ms-wmd wmd application/x-ms-wmz wmz application/x-ms-xbap xbap application/x-msaccess mdb application/x-msbinder obd application/x-mscardfile crd application/x-msclip clp application/x-msdownload exe dll com bat msi application/x-msmediaview mvb m13 m14 application/x-msmetafile wmf wmz emf emz application/x-msmoney mny application/x-mspublisher pub application/x-msschedule scd application/x-msterminal trm application/x-mswrite wri application/x-netcdf nc cdf application/x-nzb nzb application/x-pkcs12 p12 pfx application/x-pkcs7-certificates p7b spc application/x-pkcs7-certreqresp p7r application/x-rar-compressed rar application/x-research-info-systems ris application/x-sh sh application/x-shar shar application/x-shockwave-flash swf application/x-silverlight-app xap application/x-sql sql application/x-stuffit sit application/x-stuffitx sitx application/x-subrip srt application/x-sv4cpio sv4cpio application/x-sv4crc sv4crc application/x-t3vm-image t3 application/x-tads gam application/x-tar tar application/x-tcl tcl application/x-tex tex application/x-tex-tfm tfm application/x-texinfo texinfo texi application/x-tgif obj application/x-ustar ustar application/x-wais-source src application/x-x509-ca-cert der crt application/x-xfig fig application/x-xliff+xml xlf application/x-xpinstall xpi application/x-xz xz application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8 # application/x400-bp application/xaml+xml xaml # application/xcap-att+xml # application/xcap-caps+xml application/xcap-diff+xml xdf # application/xcap-el+xml # application/xcap-error+xml # application/xcap-ns+xml # application/xcon-conference-info-diff+xml # application/xcon-conference-info+xml application/xenc+xml xenc application/xhtml+xml xhtml xht # application/xhtml-voice+xml application/xml xml xsl application/xml-dtd dtd # application/xml-external-parsed-entity # application/xmpp+xml application/xop+xml xop application/xproc+xml xpl application/xslt+xml xslt application/xspf+xml xspf application/xv+xml mxml xhvml xvml xvm application/yang yang application/yin+xml yin application/zip zip # audio/1d-interleaved-parityfec # audio/32kadpcm # audio/3gpp # audio/3gpp2 # audio/ac3 audio/adpcm adp # audio/amr # audio/amr-wb # audio/amr-wb+ # audio/asc # audio/atrac-advanced-lossless # audio/atrac-x # audio/atrac3 audio/basic au snd # audio/bv16 # audio/bv32 # audio/clearmode # audio/cn # audio/dat12 # audio/dls # audio/dsr-es201108 # audio/dsr-es202050 # audio/dsr-es202211 # audio/dsr-es202212 # audio/dv # audio/dvi4 # audio/eac3 # audio/evrc # audio/evrc-qcp # audio/evrc0 # audio/evrc1 # audio/evrcb # audio/evrcb0 # audio/evrcb1 # audio/evrcwb # audio/evrcwb0 # audio/evrcwb1 # audio/example # audio/fwdred # audio/g719 # audio/g722 # audio/g7221 # audio/g723 # audio/g726-16 # audio/g726-24 # audio/g726-32 # audio/g726-40 # audio/g728 # audio/g729 # audio/g7291 # audio/g729d # audio/g729e # audio/gsm # audio/gsm-efr # audio/gsm-hr-08 # audio/ilbc # audio/ip-mr_v2.5 # audio/isac # audio/l16 # audio/l20 # audio/l24 # audio/l8 # audio/lpc audio/midi mid midi kar rmi # audio/mobile-xmf audio/mp4 mp4a # audio/mp4a-latm # audio/mpa # audio/mpa-robust audio/mpeg mpga mp2 mp2a mp3 m2a m3a # audio/mpeg4-generic # audio/musepack audio/ogg oga ogg spx # audio/opus # audio/parityfec # audio/pcma # audio/pcma-wb # audio/pcmu-wb # audio/pcmu # audio/prs.sid # audio/qcelp # audio/red # audio/rtp-enc-aescm128 # audio/rtp-midi # audio/rtx audio/s3m s3m audio/silk sil # audio/smv # audio/smv0 # audio/smv-qcp # audio/sp-midi # audio/speex # audio/t140c # audio/t38 # audio/telephone-event # audio/tone # audio/uemclip # audio/ulpfec # audio/vdvi # audio/vmr-wb # audio/vnd.3gpp.iufp # audio/vnd.4sb # audio/vnd.audiokoz # audio/vnd.celp # audio/vnd.cisco.nse # audio/vnd.cmles.radio-events # audio/vnd.cns.anp1 # audio/vnd.cns.inf1 audio/vnd.dece.audio uva uvva audio/vnd.digital-winds eol # audio/vnd.dlna.adts # audio/vnd.dolby.heaac.1 # audio/vnd.dolby.heaac.2 # audio/vnd.dolby.mlp # audio/vnd.dolby.mps # audio/vnd.dolby.pl2 # audio/vnd.dolby.pl2x # audio/vnd.dolby.pl2z # audio/vnd.dolby.pulse.1 audio/vnd.dra dra audio/vnd.dts dts audio/vnd.dts.hd dtshd # audio/vnd.dvb.file # audio/vnd.everad.plj # audio/vnd.hns.audio audio/vnd.lucent.voice lvp audio/vnd.ms-playready.media.pya pya # audio/vnd.nokia.mobile-xmf # audio/vnd.nortel.vbk audio/vnd.nuera.ecelp4800 ecelp4800 audio/vnd.nuera.ecelp7470 ecelp7470 audio/vnd.nuera.ecelp9600 ecelp9600 # audio/vnd.octel.sbc # audio/vnd.qcelp # audio/vnd.rhetorex.32kadpcm audio/vnd.rip rip # audio/vnd.sealedmedia.softseal.mpeg # audio/vnd.vmx.cvsd # audio/vorbis # audio/vorbis-config audio/webm weba audio/x-aac aac audio/x-aiff aif aiff aifc audio/x-caf caf audio/x-flac flac audio/x-matroska mka audio/x-mpegurl m3u audio/x-ms-wax wax audio/x-ms-wma wma audio/x-pn-realaudio ram ra audio/x-pn-realaudio-plugin rmp # audio/x-tta audio/x-wav wav audio/xm xm chemical/x-cdx cdx chemical/x-cif cif chemical/x-cmdf cmdf chemical/x-cml cml chemical/x-csml csml # chemical/x-pdb chemical/x-xyz xyz image/bmp bmp image/cgm cgm # image/example # image/fits image/g3fax g3 image/gif gif image/ief ief # image/jp2 image/jpeg jpeg jpg jpe # image/jpm # image/jpx image/ktx ktx # image/naplps image/png png image/prs.btif btif # image/prs.pti image/sgi sgi image/svg+xml svg svgz # image/t38 image/tiff tiff tif # image/tiff-fx image/vnd.adobe.photoshop psd # image/vnd.cns.inf2 image/vnd.dece.graphic uvi uvvi uvg uvvg image/vnd.dvb.subtitle sub image/vnd.djvu djvu djv image/vnd.dwg dwg image/vnd.dxf dxf image/vnd.fastbidsheet fbs image/vnd.fpx fpx image/vnd.fst fst image/vnd.fujixerox.edmics-mmr mmr image/vnd.fujixerox.edmics-rlc rlc # image/vnd.globalgraphics.pgb # image/vnd.microsoft.icon # image/vnd.mix image/vnd.ms-modi mdi image/vnd.ms-photo wdp image/vnd.net-fpx npx # image/vnd.radiance # image/vnd.sealed.png # image/vnd.sealedmedia.softseal.gif # image/vnd.sealedmedia.softseal.jpg # image/vnd.svf image/vnd.wap.wbmp wbmp image/vnd.xiff xif image/webp webp image/x-3ds 3ds image/x-cmu-raster ras image/x-cmx cmx image/x-freehand fh fhc fh4 fh5 fh7 image/x-icon ico image/x-mrsid-image sid image/x-pcx pcx image/x-pict pic pct image/x-portable-anymap pnm image/x-portable-bitmap pbm image/x-portable-graymap pgm image/x-portable-pixmap ppm image/x-rgb rgb image/x-tga tga image/x-xbitmap xbm image/x-xpixmap xpm image/x-xwindowdump xwd # message/cpim # message/delivery-status # message/disposition-notification # message/example # message/external-body # message/feedback-report # message/global # message/global-delivery-status # message/global-disposition-notification # message/global-headers # message/http # message/imdn+xml # message/news # message/partial message/rfc822 eml mime # message/s-http # message/sip # message/sipfrag # message/tracking-status # message/vnd.si.simp # model/example model/iges igs iges model/mesh msh mesh silo model/vnd.collada+xml dae model/vnd.dwf dwf # model/vnd.flatland.3dml model/vnd.gdl gdl # model/vnd.gs-gdl # model/vnd.gs.gdl model/vnd.gtw gtw # model/vnd.moml+xml model/vnd.mts mts # model/vnd.parasolid.transmit.binary # model/vnd.parasolid.transmit.text model/vnd.vtu vtu model/vrml wrl vrml model/x3d+binary x3db x3dbz model/x3d+vrml x3dv x3dvz model/x3d+xml x3d x3dz # multipart/alternative # multipart/appledouble # multipart/byteranges # multipart/digest # multipart/encrypted # multipart/example # multipart/form-data # multipart/header-set # multipart/mixed # multipart/parallel # multipart/related # multipart/report # multipart/signed # multipart/voice-message # text/1d-interleaved-parityfec text/cache-manifest appcache text/calendar ics ifb text/css css text/csv csv # text/directory # text/dns # text/ecmascript # text/enriched # text/example # text/fwdred text/html html htm # text/javascript text/n3 n3 # text/parityfec text/plain txt text conf def list log in # text/prs.fallenstein.rst text/prs.lines.tag dsc # text/vnd.radisys.msml-basic-layout # text/red # text/rfc822-headers text/richtext rtx # text/rtf # text/rtp-enc-aescm128 # text/rtx text/sgml sgml sgm # text/t140 text/tab-separated-values tsv text/troff t tr roff man me ms text/turtle ttl # text/ulpfec text/uri-list uri uris urls text/vcard vcard # text/vnd.abc text/vnd.curl curl text/vnd.curl.dcurl dcurl text/vnd.curl.scurl scurl text/vnd.curl.mcurl mcurl # text/vnd.dmclientscript text/vnd.dvb.subtitle sub # text/vnd.esmertec.theme-descriptor text/vnd.fly fly text/vnd.fmi.flexstor flx text/vnd.graphviz gv text/vnd.in3d.3dml 3dml text/vnd.in3d.spot spot # text/vnd.iptc.newsml # text/vnd.iptc.nitf # text/vnd.latex-z # text/vnd.motorola.reflex # text/vnd.ms-mediapackage # text/vnd.net2phone.commcenter.command # text/vnd.si.uricatalogue text/vnd.sun.j2me.app-descriptor jad # text/vnd.trolltech.linguist # text/vnd.wap.si # text/vnd.wap.sl text/vnd.wap.wml wml text/vnd.wap.wmlscript wmls text/x-asm s asm text/x-c c cc cxx cpp h hh dic text/x-fortran f for f77 f90 text/x-java-source java text/x-opml opml text/x-pascal p pas text/x-nfo nfo text/x-setext etx text/x-sfv sfv text/x-uuencode uu text/x-vcalendar vcs text/x-vcard vcf # text/xml # text/xml-external-parsed-entity # video/1d-interleaved-parityfec video/3gpp 3gp # video/3gpp-tt video/3gpp2 3g2 # video/bmpeg # video/bt656 # video/celb # video/dv # video/example video/h261 h261 video/h263 h263 # video/h263-1998 # video/h263-2000 video/h264 h264 # video/h264-rcdo # video/h264-svc video/jpeg jpgv # video/jpeg2000 video/jpm jpm jpgm video/mj2 mj2 mjp2 # video/mp1s # video/mp2p # video/mp2t video/mp4 mp4 mp4v mpg4 # video/mp4v-es video/mpeg mpeg mpg mpe m1v m2v # video/mpeg4-generic # video/mpv # video/nv video/ogg ogv # video/parityfec # video/pointer video/quicktime qt mov # video/raw # video/rtp-enc-aescm128 # video/rtx # video/smpte292m # video/ulpfec # video/vc1 # video/vnd.cctv video/vnd.dece.hd uvh uvvh video/vnd.dece.mobile uvm uvvm # video/vnd.dece.mp4 video/vnd.dece.pd uvp uvvp video/vnd.dece.sd uvs uvvs video/vnd.dece.video uvv uvvv # video/vnd.directv.mpeg # video/vnd.directv.mpeg-tts # video/vnd.dlna.mpeg-tts video/vnd.dvb.file dvb video/vnd.fvt fvt # video/vnd.hns.video # video/vnd.iptvforum.1dparityfec-1010 # video/vnd.iptvforum.1dparityfec-2005 # video/vnd.iptvforum.2dparityfec-1010 # video/vnd.iptvforum.2dparityfec-2005 # video/vnd.iptvforum.ttsavc # video/vnd.iptvforum.ttsmpeg2 # video/vnd.motorola.video # video/vnd.motorola.videop video/vnd.mpegurl mxu m4u video/vnd.ms-playready.media.pyv pyv # video/vnd.nokia.interleaved-multimedia # video/vnd.nokia.videovoip # video/vnd.objectvideo # video/vnd.sealed.mpeg1 # video/vnd.sealed.mpeg4 # video/vnd.sealed.swf # video/vnd.sealedmedia.softseal.mov video/vnd.uvvu.mp4 uvu uvvu video/vnd.vivo viv video/webm webm video/x-f4v f4v video/x-fli fli video/x-flv flv video/x-m4v m4v video/x-matroska mkv mk3d mks video/x-mng mng video/x-ms-asf asf asx video/x-ms-vob vob video/x-ms-wm wm video/x-ms-wmv wmv video/x-ms-wmx wmx video/x-ms-wvx wvx video/x-msvideo avi video/x-sgi-movie movie video/x-smv smv x-conference/x-cooltalk ice Horde_Mime-2.10.3/doc/Horde/Mime/mime_mapping/mime.types.horde0000664000175000017500000000325613055000403022161 0ustar janjan# This is a Horde-specific addition to the MIME types provided by the # mime.types file from the Apache webserver. All additions to the # mime.mapping.php file should be made here also or else they will be # lost when the mime.mapping.php file is regenerated. # MIME type Extension application/vnd.oasis.opendocument.database odb application/vnd.oasis.opendocument.text oot application/vnd.oasis.opendocument.text-master odm application/vnd.sun.xml.calc sxc application/vnd.sun.xml.calc.template stc application/vnd.sun.xml.draw sxd application/vnd.sun.xml.draw.template std application/vnd.sun.xml.writer.global sxg application/vnd.sun.xml.math sxm application/vnd.sun.xml.impress sxi application/vnd.sun.xml.impress.template sti application/vnd.sun.xml.writer sxw application/vnd.sun.xml.writer.template stw application/x-compress Z application/x-gzip gz application/x-gtar tgz application/x-httpd-php php application/x-httpd-php3 php3 application/x-ms-wmd wmd application/x-ms-wmz wmz application/x-perl pl pm audio/x-gsm gsm text/calendar vcs vfb text/diff diff patch text/html shtml text/plain po Horde_Mime-2.10.3/doc/Horde/Mime/mime_mapping/README0000664000175000017500000000012413055000403017713 0ustar janjanFiles in this directory are used to create the distributable mime.mapping.php file. Horde_Mime-2.10.3/doc/Horde/Mime/COPYING0000664000175000017500000005764613055000403015451 0ustar janjan GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Horde_Mime-2.10.3/doc/Horde/Mime/UPGRADING0000664000175000017500000002073413055000404015646 0ustar janjan====================== Upgrading Horde_Mime ====================== :Contact: dev@lists.horde.org .. contents:: Contents .. section-numbering:: This lists the API changes between releases of the package. Upgrading to 2.10 ================= - Horde_Mime_Part - isAttachment() This method has been added. Upgrading to 2.9 ================ - Horde_Mime_Part_Iterator This class has been added. Upgrading to 2.8 ================ - Horde_Mime_Part - $encodingTypes - $mimeTypes These static properties are deprecated. - Iteration The object can now be iterated through to access the subparts. partIterator() can be used to obtain a RecursiveIteratorIterator that will iterator through all descendants. The $parent property has been added; it will be set, and is only guaranteed to be accurate, during iteration. - addPart() This method is deprecated. Use array access to add a subpart (e.g. $part[] = $new_part). - alterPart() This method is deprecated. Use array access (with the MIME ID as the key) to alter a subpart. - clearContentTypeParameter() This method is deprecated. Use Horde_Mime_Part#setContentTypeParameter() instead with null as the second argument to delete a Content-Type parameter. - contentTypeMap() This method is deprecated. Use partIterator() to recursively iterate through the parts instead. - getPart() This method is deprecated. Use array access (with the MIME ID as the key) to obtain a subpart. - setContentTypeParameter() Passing null as the second argument will cause the Content-Type parameter identified by the first argument to be deleted. - setDispositionParameter() Passing null as the second argument will cause the Content-Disposition parameter identified by the first argument to be deleted. - setDescription() Passing null as the argument will cause the description to be deleted. - removePart() This method is deprecated. Use array access (with the MIME ID as the key) to remove a subpart. - Horde_Mime_Headers_ContentId - Horde_Mime_Headers_ContentLanguage - Horde_Mime_Headers_ContentParam_ContentDisposition - Horde_Mime_Headers_ContentParam_ContentType - Horde_Mime_Headers_ContentTransferEncoding - Horde_Mime_Headers_Mime These classes have been added. - Horde_Mime_Headers_Element - isDefault() This method has been added. - Horde_Mime_Headers_Extension_Mime This interface has been added. - Horde_Mime_Headers_ContentParam - setContentParamValue() This method has been added. Upgrading to 2.7 ================ - Horde_Mime_Headers_ContentDescription This class has been added. Upgrading to 2.6 ================ - Horde_Mime_Filter_Encoding This class has been added. - Horde_Mime - $decodeWindows1252 This property now defaults to true. (HTML 5 demands that ISO-8859-1 be treated as Windows-1252, so this is matching conventional usage.) Upgrading to 2.5 ================ - Horde_Mime - $brokenRFC2231 This static property is deprecated. Use the 'broken_rfc2231' parameter to Horde_Mime_Headers_ContentParam#encode() instead. - decodeParam() This method is deprecated. Use Horde_Mime_Headers_ContentParam#decode() instead. - encodeParam() This method is deprecated. Use Horde_Mime_Headers_ContentParam#encode() instead. - generateMessageId() This method is deprecated. Use Horde_Mime_Headers_MessageId::create() instead. - is8bit() The 2nd parameter ($charset) is no longer needed/used. - isChild() This method is deprecated. Use Horde_Mime_Id#isChild() instead. - mimeIdArithmetic() This method is deprecated. Use Horde_Mime_Id#idArithmetic() instead. - quotedPrintableEncode() This method is deprecated. Use PHP's quoted_printable_encode() method instead (or, if you need to control EOL and/or wrapping length, use Horde_Mime_QuotedPrintable::encode()). - uudecode() This method is deprecated. Use the Horde_Mime_Uudecode() class instead. - Horde_Mime_Headers Headers are now internally stored in a list of Horde_Mime_Headers_Element objects. - addHeader() Deprecate the 'decode' and 'params' optional parameters. To indicate distinct value and parameter data, use the Horde_Mime_Headers_ContentParam object to add the data. MIME decoding is now done automatically, based on the header name. - addHeaderOb() This method has been added. - addMessageIdHeader() This method is deprecated. Add a Horde_Mime_Headers_MessageId object via Horde_Mime_Headers#addHeaderOb() instead. - addReceivedHeader() This method is deprecated. Create an object using Horde_Mime_Headers_Received::createHordeHop() and add to the headers object via Horde_Mime_Headers#addHeaderOb(). - addUserAgentHeader() This method is deprecated. Add a Horde_Mime_Headers_UserAgent object via Horde_Mime_Headers#addHeaderOb() instead. - getEOL() This method is deprecated. - getUserAgent() This method is deprecated. Get the default user agent via strval(Horde_Mime_Headers_UserAgent::create()) instead. - listHeadersExist() This method is deprecated. Use Horde_ListHeaders#listHeadersExist() instead. - getOb() This method is deprecated. Directly obtain the header element that implements Horde_Mime_Headers_Element_Address and call getAddressList() on it. - getString() This method is deprecated. Directly obtain the header element and query its 'name' property instead. - replaceHeader() This method is deprecated. Use Horde_Mime_Headers#removeHeader() followed by Horde_Mime_Headers#addHeader[Ob]() instead. - setEOL() This method is deprecated. EOLs are only needed for Horde_Mime_Headers#toString(), where the 'canonical' parameter already exists for the same purpose. - setUserAgent() This method is deprecated. Set the user agent via Horde_Mime_Headers#addHeaderOb() instead. - Horde_Mime_ContentParam_Decode - Horde_Mime_Id - Horde_Mime_QuotedPrintable - Horde_Mime_Uudecode These classes were added. - Horde_Mime_Part - send() Added the 'broken_rfc2231' option. Upgrading to 2.4 ================ - Horde_Mime_Mail - getRaw() This method was added. Upgrading to 2.3 ================ - Horde_Mime_Headers - parseHeaders() The $text parameter now accepts both resources and Horde_Stream objects. Upgrading to 2.2 ================ - Horde_Mime - parseMessage() Added the 'no_body' parameter. Upgrading to 2.1 ================ - Horde_Mime - encodeParam() The 'escape' option has been removed. The MIME_PARAM_QUOTED constant has been added. - Horde_Mime_Related - cidReplace() The $text parameter can now be a Horde_Domhtml object. Upgrading to 2.0 ================ - Horde_Mime - decode() Removed the second parameter ($to_charset). Output is now in UTF-8. - decodeAddrString() This method has been removed. Equivalent functionality can now be found in the Horde_Mail package (version 2.0.0+). - decodeParam() Removed the third parameter ($charset). Output is now in UTF-8. - encode() The first parameter ($text) now requires a UTF-8 string. The second parameter ($charset) is now optional and indicates the charset to MIME encode to. - encodeAddress() This method has been removed. Equivalent functionality can now be found in the Horde_Mail package (version 2.0.0+). - encodeParam() The third parameter ($charset) has been removed and moved to the options. By default, the string is encoded in UTF-8. - Horde_Mime_Address This class has been removed. Equivalent functionality can now be found in the Horde_Mail package (version 2.0.0+). - Horde_Mime_Headers - addHeader() Removed the 'charset' and 'decode' parameters. Added the 'sanity_check' parameter. - getOb() Now returns null if the header does not exist. - replaceHeader() Removed the 'charset' and 'decode' parameters. Added the 'sanity_check' parameter. - setValue() - sanityCheck() These methods have been removed. Horde_Mime-2.10.3/doc/horde.yml0000664000175000017500000000026613055000404014275 0ustar janjan--- id: Mime name: Mime full: MIME library description: > Provides methods for dealing with Multipurpose Internet Mail Extensions (MIME) features (RFC 2045/2046/2047). list: dev Horde_Mime-2.10.3/lib/Horde/Mime/ContentParam/Decode.php0000664000175000017500000000675013055000404020675 0ustar janjan * * @category Horde * @copyright 2002-2015 Timo Sirainen * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ /** * Decode MIME content parameter data (RFC 2045; 2183; 2231). * * @author Timo Sirainen * @author Michael Slusarz * @category Horde * @copyright 2002-2015 Timo Sirainen * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ class Horde_Mime_ContentParam_Decode extends Horde_Mail_Rfc822 { /** * Decode content parameter data. * * @param string $data Parameter data. * * @return array List of parameter key/value combinations. */ public function decode($data) { $out = array(); $this->_data = $data; $this->_datalen = strlen($data); $this->_ptr = 0; while ($this->_curr() !== false) { $this->_rfc822SkipLwsp(); $this->_rfc822ParseMimeToken($param); if (is_null($param) || ($this->_curr() != '=')) { break; } ++$this->_ptr; $this->_rfc822SkipLwsp(); $value = ''; if ($this->_curr() == '"') { try { $this->_rfc822ParseQuotedString($value); } catch (Horde_Mail_Exception $e) { break; } } else { $this->_rfc822ParseMimeToken($value); if (is_null($value)) { break; } } $out[$param] = $value; $this->_rfc822SkipLwsp(); if ($this->_curr() != ';') { break; } ++$this->_ptr; } return $out; } /** * Determine if character is a non-escaped element in MIME parameter data * (See RFC 2045 [Appendix A]). * * @param string $c Character to test. * * @return boolean True if non-escaped character. */ public static function isAtextNonTspecial($c) { switch ($ord = ord($c)) { case 34: case 40: case 41: case 44: case 47: case 58: case 59: case 60: case 61: case 62: case 63: case 64: case 91: case 92: case 93: /* "(),/:;<=>?@[\] */ return false; default: /* CTLs, SPACE, DEL, non-ASCII */ return (($ord > 32) && ($ord < 127)); } } /** */ protected function _rfc822ParseMimeToken(&$str) { for ($i = $this->_ptr, $size = strlen($this->_data); $i < $size; ++$i) { if (!self::isAtextNonTspecial($this->_data[$i])) { break; } } if ($i === $this->_ptr) { $str = null; } else { $str = substr($this->_data, $this->_ptr, $i - $this->_ptr); $this->_ptr += ($i - $this->_ptr); $this->_rfc822SkipLwsp(); } } } Horde_Mime-2.10.3/lib/Horde/Mime/Filter/Encoding.php0000664000175000017500000000470513055000404020070 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.6.0 */ class Horde_Mime_Filter_Encoding extends php_user_filter { /** * Number of consecutive non-CR/LF characters. * * @var integer */ protected $_crlf = 0; /** * @see stream_filter_register() */ public function onCreate() { $this->params->body = false; return true; } /** * @see stream_filter_register() */ public function filter($in, $out, &$consumed, $closing) { while ($bucket = stream_bucket_make_writeable($in)) { if ($this->params->body !== 'binary') { $len = $bucket->datalen; $str = $bucket->data; for ($i = 0; $i < $len; ++$i) { $chr = ord($str[$i]); switch ($chr) { case 0: /* Only binary data can have NULLs. */ $this->params->body = 'binary'; break 2; case 10: // LF case 13: // CR $this->_crlf = 0; break; default: /* RFC 2045 [2.8]: 8bit data must be less than 998 * characters in length. Otherwise, we are looking at * binary. */ if (++$this->_crlf > 998) { $this->params->body = 'binary'; break 2; } else if ($chr > 127) { $this->params->body = '8bit'; } break; } } } $consumed += $bucket->datalen; stream_bucket_append($out, $bucket); } return PSFS_PASS_ON; } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/ContentParam/ContentDisposition.php0000664000175000017500000000440513055000404024717 0ustar janjan * @category Horde * @copyright 2015-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.8.0 */ class Horde_Mime_Headers_ContentParam_ContentDisposition extends Horde_Mime_Headers_ContentParam { /** */ public function __construct($name, $value) { parent::__construct('Content-Disposition', $value); } /** */ public function __get($name) { $val = parent::__get($name); switch ($name) { case 'full_value': $val = parent::__get($name); if (substr(ltrim($val), 0, 1) === ';') { $val = 'attachment' . $val; } break; } return $val; } /** */ public function setContentParamValue($data) { parent::setContentParamValue($data); if (strlen($val = $this->value)) { if (strcasecmp($val, 'attachment') === 0) { $val2 = 'attachment'; } elseif (strcasecmp($val, 'inline') === 0) { $val2 = 'inline'; } else { $val2 = ''; } if ($val !== $val2) { parent::setContentParamValue($val2); } } } /** */ public function isDefault() { return !($this->full_value); } /** */ public static function getHandles() { return array( 'content-disposition' ); } /* ArrayAccess methods */ /** */ public function offsetSet($offset, $value) { if (strcasecmp($offset, 'size') === 0) { // RFC 2183 [2.7] - size parameter $value = intval($this->_sanityCheck($value)); } parent::offsetSet($offset, $value); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/ContentParam/ContentType.php0000664000175000017500000001206113055000404023331 0ustar janjan * @category Horde * @copyright 2015-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.8.0 * * @property-read string $ptype The primary type. * @property-read string $stype The sub type. * @property-read string $type_charset The MIME type with the charset * parameter added (if this is a text/* * part). */ class Horde_Mime_Headers_ContentParam_ContentType extends Horde_Mime_Headers_ContentParam { const DEFAULT_CONTENT_TYPE = 'application/octet-stream'; /** * Creates a default Content-Type header, conforming to the MIME * specification as detailed in RFC 2045. * * @return Horde_Mime_Headers_ContentParam_ContentType Content-Type * header object. */ public static function create() { $ob = new stdClass; $ob->value = self::DEFAULT_CONTENT_TYPE; return new self(null, $ob); } /** */ public function __construct($name, $value) { parent::__construct('Content-Type', $value); } /** */ public function __get($name) { switch ($name) { case 'params': $params = new Horde_Support_CaseInsensitiveArray( parent::__get($name) ); foreach ($params as $key => $val) { if (!isset($this[$key])) { unset($params[$key]); } } return $params->getArrayCopy(); case 'ptype': $val = $this->value; return substr($val, 0, strpos($val, '/')); case 'stype': $val = $this->value; return substr($val, strpos($val, '/') + 1); case 'type_charset': $val = $this->value; foreach ($this->_escapeParams(array_filter(array('charset' => $this['charset']))) as $k2 => $v2) { $val .= '; ' . $k2 . '=' . $v2; } return $val; } return parent::__get($name); } /** */ public function setContentParamValue($data) { /* Set the value first, since it will handle any sanity checking. */ parent::setContentParamValue(Horde_String::lower($data)); $val = $this->value; if (strpos($val, '/') === false) { parent::setContentParamValue(self::DEFAULT_CONTENT_TYPE); } else { switch ($this->ptype) { case 'multipart': if (!isset($this['boundary'])) { $this['boundary'] = '=_' . new Horde_Support_Randomid(); } break; case 'application': case 'audio': case 'image': case 'message': case 'model': case 'text': case 'video': // No-op break; default: if (substr($val, 0, 2) !== 'x-') { /* Append 'x-' for any unknown primary MIME type. */ parent::setContentParamValue('x-' . $val); } break; } } } /** */ public function isDefault() { return ($this->full_value === 'text/plain'); } /** */ public static function getHandles() { return array( 'content-type' ); } /* ArrayAccess methods. */ /** */ public function offsetExists($offset) { if (!parent::offsetExists($offset)) { return false; } if (strcasecmp($offset, 'boundary') === 0) { return ($this->ptype === 'multipart'); } elseif (strcasecmp($offset, 'charset') === 0) { return (($this->ptype === 'text') && (parent::offsetGet($offset) !== 'us-ascii')); } return true; } /** */ public function offsetGet($offset) { return isset($this[$offset]) ? parent::offsetGet($offset) : null; } /** */ public function offsetSet($offset, $value) { /* Store character set as lower case value. */ if (strcasecmp($offset, 'charset') === 0) { $value = Horde_String::lower($value); } parent::offsetSet($offset, $value); } /** */ public function offsetUnset($offset) { if (($this->ptype !== 'multipart') || (strcasecmp($offset, 'boundary') !== 0)) { parent::offsetUnset($offset); } } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/Element/Address.php0000664000175000017500000000213713055000404021443 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ interface Horde_Mime_Headers_Element_Address { /** * Return the address list representation(s) for this header. * * @param boolean $first If true, return only the first element rather * than the entire list. * * @return mixed A Horde_Mail_Rfc822_List object (if $first is true) or * an array of those objects. */ public function getAddressList($first = false); } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/Element/Multiple.php0000664000175000017500000000266213055000404021654 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 * * @property-read array $full_value List of full header values (strings). * @property-read array $value List of header values (strings). */ class Horde_Mime_Headers_Element_Multiple extends Horde_Mime_Headers_Element { /** */ public function __get($name) { switch ($name) { case 'full_value': case 'value': return $this->_values; } return parent::__get($name); } /** */ protected function _setValue($value) { if ($value instanceof Horde_Mime_Headers_Element) { $value = $value->value; } foreach ((is_array($value) ? $value : array($value)) as $val) { $this->_values[] = $this->_sanityCheck(Horde_Mime::decode($val)); } } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/Element/Single.php0000664000175000017500000000425013055000404021275 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 * * @property-read string $full_value Full header value. * @property-read string $value Header value. */ class Horde_Mime_Headers_Element_Single extends Horde_Mime_Headers_Element { /** */ public function __get($name) { switch ($name) { case 'full_value': case 'value': return reset($this->_values); } return parent::__get($name); } /** */ public function __toString() { return $this->value; } /** */ protected function _setValue($value) { if ($value instanceof Horde_Mime_Headers_Element) { $value = $value->value; } elseif (is_array($value)) { $value = reset($value); } $this->_values = array( $this->_sanityCheck(Horde_Mime::decode($value)) ); } /** */ public static function getHandles() { return array( // Mail: RFC 3798 'disposition-notification-options', 'original-recipient', // Lists: RFC 2369 'list-help', 'list-unsubscribe', 'list-subscribe', 'list-owner', 'list-post', 'list-archive', // Lists: RFC 2919 'list-id', // Importance: See, e.g., RFC 4356 [2.1.3.3.1] 'importance', // OTHER: X-Priority // See: http://kb.mozillazine.org/Emulate_Microsoft_email_clients 'x-priority' ); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/Extension/Mime.php0000664000175000017500000000134013055000404021323 0ustar janjan * @category Horde * @copyright 2015-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.8.0 */ interface Horde_Mime_Headers_Extension_Mime { } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/Addresses.php0000664000175000017500000001072413055000404020403 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ class Horde_Mime_Headers_Addresses extends Horde_Mime_Headers_Element_Single implements Horde_Mime_Headers_Element_Address { /** * By default, if more than 1 address header is found, the addresses are * appended together into a single field. Set this value to false to * ignore all but the *last* header. * * @var boolean */ public $append_addr = true; /** */ public function __clone() { $this->_values = clone $this->_values; } /** */ public function __get($name) { switch ($name) { case 'full_value': case 'value': case 'value_single': return strval($this->_values); } return parent::__get($name); } /** */ public function getAddressList($first = false) { return $first ? $this->_values : array($this->_values); } /** * * @throws Horde_Mime_Exception */ protected function _setValue($value) { /* @todo Implement with traits */ $rfc822 = new Horde_Mail_Rfc822(); try { $addr_list = $rfc822->parseAddressList($value); } catch (Horde_Mail_Exception $e) { throw new Horde_Mime_Exception($e); } foreach ($addr_list as $ob) { if ($ob instanceof Horde_Mail_Rfc822_Group) { $ob->groupname = $this->_sanityCheck($ob->groupname); } else { $ob->personal = $this->_sanityCheck($ob->personal); } } switch (Horde_String::lower($this->name)) { case 'bcc': case 'cc': case 'from': case 'to': /* Catch malformed undisclosed-recipients entries. */ if ((count($addr_list) == 1) && preg_match("/^\s*undisclosed-recipients:?\s*$/i", $addr_list[0]->bare_address)) { $addr_list = new Horde_Mail_Rfc822_List( 'undisclosed-recipients:;' ); } break; } if ($this->append_addr && $this->_values) { $this->_values->add($addr_list); } else { $this->_values = $addr_list; } } /** */ public static function getHandles() { return array( // Mail: RFC 3798 'disposition-notification-to', // Mail: RFC 5322 (Address) 'from', 'to', 'cc', 'bcc', 'reply-to', 'sender' ); } /** * @param array $opts See doSendEncode(). */ protected function _sendEncode($opts) { return self::doSendEncode($this->getAddressList(), $opts); } /** * Do send encoding for addresses. * * Needed as a static function because it is used by both single and * multiple address headers. * * @todo Implement with traits. * * @param array $alist An array of Horde_Mail_Rfc822_List objects. * @param array $opts Additional options: * - charset: (string) Encodes the headers using this charset. * DEFAULT: UTF-8 * - defserver: (string) The default domain to append to mailboxes. * DEFAULT: No default name. */ public static function doSendEncode($alist, array $opts = array()) { $out = array(); foreach ($alist as $ob) { if (!empty($opts['defserver'])) { foreach ($ob->raw_addresses as $ob2) { if (is_null($ob2->host)) { $ob2->host = $opts['defserver']; } } } $out[] = $ob->writeAddress(array( 'encode' => empty($opts['charset']) ? null : $opts['charset'], 'idn' => true )); } return $out; } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/AddressesMulti.php0000664000175000017500000000511313055000404021412 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ class Horde_Mime_Headers_AddressesMulti extends Horde_Mime_Headers_Element_Multiple implements Horde_Mime_Headers_Element_Address { /** */ public function __clone() { $copy = array(); foreach ($this->_values as $val) { $copy[] = clone $val; } $this->_values = $copy; } /** */ public function __get($name) { switch ($name) { case 'full_value': case 'value': return array_map('strval', $this->_values); case 'value_single': return strval(reset($this->_values)); } return parent::__get($name); } /** */ public function getAddressList($first = false) { return $first ? reset($this->_values) : $this->_values; } /** */ protected function _setValue($value) { /* @todo Implement with traits */ $rfc822 = new Horde_Mail_Rfc822(); $addr_list = $rfc822->parseAddressList($value); foreach ($addr_list as $ob) { if ($ob instanceof Horde_Mail_Rfc822_Group) { $ob->groupname = $this->_sanityCheck($ob->groupname); } else { $ob->personal = $this->_sanityCheck($ob->personal); } } $this->_values[] = $addr_list; } /** */ public static function getHandles() { return array( // Mail: RFC 5322 (Address that can appear in multiple headers) 'resent-to', 'resent-cc', 'resent-bcc', 'resent-from' ); } /** * @param array $opts See Horde_Mime_Headers_Addresses#doSendEncode(). */ protected function _sendEncode($opts) { return Horde_Mime_Headers_Addresses::doSendEncode( $this->getAddressList(), $opts ); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/ContentDescription.php0000664000175000017500000000231413055000404022300 0ustar janjan * @category Horde * @copyright 2015-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.7.0 */ class Horde_Mime_Headers_ContentDescription extends Horde_Mime_Headers_Element_Single implements Horde_Mime_Headers_Extension_Mime { /** */ public function __construct($name, $value) { parent::__construct('Content-Description', $value); } /** */ protected function _sendEncode($opts) { return array(Horde_Mime::encode($this->value, $opts['charset'])); } /** */ public static function getHandles() { return array( // MIME: RFC 2045 'content-description' ); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/ContentId.php0000664000175000017500000000312213055000404020347 0ustar janjan * @category Horde * @copyright 2015-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.8.0 */ class Horde_Mime_Headers_ContentId extends Horde_Mime_Headers_Element_Single implements Horde_Mime_Headers_Extension_Mime { /** * Creates a Content-ID header conforming to RFC 2045 [7]. * * @return Horde_Mime_Headers_ContentId Content-ID header object. */ public static function create() { return new self( null, strval(new Horde_Support_Randomid()) . '@' . gethostname() ); } /** */ public function __construct($name, $value) { parent::__construct('Content-ID', $value); } /** */ protected function _setValue($value) { parent::_setValue($value); $val = $this->value; $cid = '<' . ltrim(rtrim($val, '>'), '<') . '>'; if ($cid !== $val) { parent::_setValue($cid); } } /** */ public static function getHandles() { return array( 'content-id' ); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/ContentLanguage.php0000664000175000017500000000370213055000404021542 0ustar janjan * @category Horde * @copyright 2015-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.8.0 * * @property-read array $langs The list of languages. */ class Horde_Mime_Headers_ContentLanguage extends Horde_Mime_Headers_Element_Single implements Horde_Mime_Headers_Extension_Mime { /** */ public function __construct($name, $value) { parent::__construct('Content-Language', $value); } /** */ public function __get($name) { switch ($name) { case 'full_value': case 'value': case 'value_single': return implode(',', $this->_values); case 'langs': return $this->_values; } return parent::__get($name); } /** * @param mixed $value Either a single language or an array of languages. */ protected function _setValue($value) { if ($value instanceof Horde_Mime_Headers_Element) { $value = $value->value; } if (!is_array($value)) { $value = array_map('trim', explode(',', $value)); } $this->_values = array(); foreach ($value as $val) { $this->_values[] = Horde_String::lower( $this->_sanityCheck(Horde_Mime::decode($val)) ); } } /** */ public static function getHandles() { return array( 'content-language' ); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/ContentParam.php0000664000175000017500000003037013055000404021060 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 * * @property-read array $params Content parameters. */ class Horde_Mime_Headers_ContentParam extends Horde_Mime_Headers_Element_Single implements ArrayAccess, Horde_Mime_Headers_Extension_Mime, Serializable { /** * Content parameters. * * @var Horde_Support_CaseInsensitiveArray */ protected $_params; /** */ public function __clone() { $this->_params = new Horde_Support_CaseInsensitiveArray( $this->_params->getArrayCopy() ); } /** */ public function __get($name) { switch ($name) { case 'full_value': $tmp = $this->value; foreach ($this->_escapeParams($this->params) as $key => $val) { $tmp .= '; ' . $key . '=' . $val; } return $tmp; case 'params': return $this->_params->getArrayCopy(); } return parent::__get($name); } /** * @param mixed $data Either an array (interpreted as a list of * parameters), a string (interpreted as a RFC * encoded parameter list), an object with two * properties: value and params, or a * Horde_Mime_Headers_ContentParam object. */ protected function _setValue($data) { if (!$this->_params) { $this->_params = new Horde_Support_CaseInsensitiveArray(); } if ($data instanceof Horde_Mime_Headers_ContentParam) { if (empty($this->_values)) { $this->setContentParamValue($data->value); } foreach ($data->params as $key => $val) { $this[$key] = $val; } } elseif (is_object($data)) { if (!empty($data->value)) { $this->setContentParamValue($data->value); } if (!empty($data->params)) { $this->decode($data->params); } } else { $this->decode($data); } } /** * @param array $opts See encode(). */ protected function _sendEncode($opts) { $out = $this->value; foreach ($this->encode($opts) as $key => $val) { $out .= '; ' . $key . '=' . $val; } return array($out); } /** */ public static function getHandles() { return array(); } /** * Encodes a MIME content parameter string pursuant to RFC 2183 & 2231 * (Content-Type and Content-Disposition headers). * * @param array $opts Options: * - broken_rfc2231: (boolean) Attempt to work around non-RFC * 2231-compliant MUAs by generating both a RFC * 2047-like parameter name and also the correct RFC * 2231 parameter * DEFAULT: false * - charset: (string) The charset to encode to. * DEFAULT: UTF-8 * - lang: (string) The language to use when encoding. * DEFAULT: None specified * * @return array The encoded parameter string (US-ASCII). */ public function encode(array $opts = array()) { $opts = array_merge(array( 'charset' => 'UTF-8', ), $opts); $out = array(); foreach ($this->params as $key => $val) { $out = array_merge($out, $this->_encode($key, $val, $opts)); } return $out; } /** * @see encode() */ protected function _encode($name, $val, $opts) { $curr = 0; $encode = $wrap = false; $out = array(); // 2 = '=', ';' $pre_len = strlen($name) + 2; /* Several possibilities: * - String is ASCII. Output as ASCII (duh). * - Language information has been provided. We MUST encode output * to include this information. * - String is non-ASCII, but can losslessly translate to ASCII. * Output as ASCII (most efficient). * - String is in non-ASCII, but doesn't losslessly translate to * ASCII. MUST encode output (duh). */ if (empty($opts['lang']) && !Horde_Mime::is8bit($val, 'UTF-8')) { $string = $val; } else { $cval = Horde_String::convertCharset($val, 'UTF-8', $opts['charset']); $string = Horde_String::lower($opts['charset']) . '\'' . (empty($opts['lang']) ? '' : Horde_String::lower($opts['lang'])) . '\'' . rawurlencode($cval); $encode = true; /* Account for trailing '*'. */ ++$pre_len; } if (($pre_len + strlen($string)) > 75) { /* Account for continuation '*'. */ ++$pre_len; $wrap = true; while ($string) { $chunk = 75 - $pre_len - strlen($curr); $pos = min($chunk, strlen($string) - 1); /* Don't split in the middle of an encoded char. */ if (($chunk == $pos) && ($pos > 2)) { for ($i = 0; $i <= 2; ++$i) { if ($string[$pos - $i] == '%') { $pos -= $i + 1; break; } } } $lines[] = substr($string, 0, $pos + 1); $string = substr($string, $pos + 1); ++$curr; } } else { $lines = array($string); } foreach ($lines as $i => $line) { $out[$name . (($wrap) ? ('*' . $i) : '') . (($encode) ? '*' : '')] = $line; } if (!empty($opts['broken_rfc2231']) && !isset($out[$name])) { $out = array_merge(array( $name => Horde_Mime::encode($val, $opts['charset']) ), $out); } /* Escape characters in params (See RFC 2045 [Appendix A]). * Must be quoted-string if one of these exists. */ return $this->_escapeParams($out); } /** * Escape the parameter array. * * @param array $params Parameter array. * * @return array Escaped parameter array. */ protected function _escapeParams($params) { foreach ($params as $k => $v) { foreach (str_split($v) as $c) { if (!Horde_Mime_ContentParam_Decode::isAtextNonTspecial($c)) { $params[$k] = '"' . addcslashes($v, '\\"') . '"'; break; } } } return $params; } /** * Set the content-parameter base value. * * @since 2.8.0 * * @param string $data Value. */ public function setContentParamValue($data) { $data = $this->_sanityCheck(trim($data)); if (($pos = strpos($data, ';')) !== false) { $data = substr($data, 0, $pos); } $this->_values = array($data); } /** * Decodes a MIME content parameter string pursuant to RFC 2183 & 2231 * (Content-Type and Content-Disposition headers). * * Stores value/parameter data in the current object. * * @param mixed $data Parameter data. Either an array or a string. */ public function decode($data) { $add = $convert = array(); if (is_array($data)) { $params = $data; } else { $parts = explode(';', $data, 2); if (isset($parts[0]) && (strpos($parts[0], '=') === false)) { $this->setContentParamValue($parts[0]); $param = isset($parts[1]) ? $parts[1] : null; } else { $param = $data; } if (empty($param)) { $params = array(); } else { $decode = new Horde_Mime_ContentParam_Decode(); $params = $decode->decode($param); } } $to_add = array(); foreach ($params as $name => $val) { /* Asterisk at end indicates encoded value. */ if (substr($name, -1) == '*') { $name = substr($name, 0, -1); $encoded = true; } else { $encoded = false; } /* This asterisk indicates continuation parameter. */ if ((($pos = strrpos($name, '*')) !== false) && is_numeric($order = substr($name, $pos + 1))) { $name = substr($name, 0, $pos); $to_add[Horde_String::lower($name)][$order] = $val; } else { $to_add[$name] = array($val); } if ($encoded) { $convert[$name] = true; } } foreach ($to_add as $key => $val) { ksort($val); $add[$key] = implode('', $val); } foreach (array_keys($convert) as $name) { $val = $add[$name]; $quote = strpos($val, "'"); if ($quote === false) { $add[$name] = urldecode($val); } else { $orig_charset = substr($val, 0, $quote); if (Horde_String::lower($orig_charset) == 'iso-8859-1') { $orig_charset = 'windows-1252'; } /* Ignore language. */ $quote = strpos($val, "'", $quote + 1); substr($val, $quote + 1); $add[$name] = Horde_String::convertCharset( urldecode(substr($val, $quote + 1)), $orig_charset, 'UTF-8' ); } } /* MIME parameters are supposed to be encoded via RFC 2231, but many * mailers do RFC 2045 encoding instead. However, if we see at least * one RFC 2231 encoding, then assume the sending mailer knew what * it was doing and didn't send any parameters RFC 2045 encoded. */ if (empty($convert)) { foreach ($add as $key => $val) { $add[$key] = Horde_Mime::decode($val); } } if (count($add)) { foreach ($add as $key => $val) { /* When parsing a content-param string, lowercase all * parameter names to normalize. Only maintain case of * parameters explicitly added by calling code. */ $this[Horde_String::lower($key)] = $val; } } elseif (is_string($data)) { $this->setContentParamValue($parts[0]); } } /* ArrayAccess methods */ /** */ public function offsetExists($offset) { return isset($this->_params[$offset]); } /** */ public function offsetGet($offset) { return $this->_params[$offset]; } /** */ public function offsetSet($offset, $value) { $this->_params[$offset] = $this->_sanityCheck($value); } /** */ public function offsetUnset($offset) { unset($this->_params[$offset]); } /* Serializable methods */ /** */ public function serialize() { $vars = array_filter(get_object_vars($this)); if (isset($vars['_params'])) { $vars['_params'] = $vars['_params']->getArrayCopy(); } return serialize($vars); } /** */ public function unserialize($data) { $data = unserialize($data); foreach ($data as $key => $val) { switch ($key) { case '_params': $this->_params = new Horde_Support_CaseInsensitiveArray($val); break; default: $this->$key = $val; break; } } } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/ContentTransferEncoding.php0000664000175000017500000000425313055000404023254 0ustar janjan * @category Horde * @copyright 2015-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.8.0 */ class Horde_Mime_Headers_ContentTransferEncoding extends Horde_Mime_Headers_Element_Single implements Horde_Mime_Headers_Extension_Mime { /** Default encoding (RFC 2045 [6.1]). */ const DEFAULT_ENCODING = '7bit'; /** Unknown encoding specifier. */ const UNKNOWN_ENCODING = 'x-unknown'; /** */ public function __construct($name, $value) { if (!strlen($value)) { $value = self::DEFAULT_ENCODING; } parent::__construct('Content-Transfer-Encoding', $value); } /** */ protected function _setValue($value) { parent::_setValue(trim($value)); $val = $this->value; $encoding = Horde_String::lower($val); switch ($encoding) { case '7bit': case '8bit': case 'base64': case 'binary': case 'quoted-printable': // Valid encodings break; default: /* RFC 2045 [6.3] - Valid non-standardized encodings must begin * with 'x-'. */ if (substr($encoding, 0, 2) !== 'x-') { $encoding = self::UNKNOWN_ENCODING; } break; } if ($encoding !== $val) { parent::_setValue($encoding); } } /** */ public function isDefault() { return ($this->value === self::DEFAULT_ENCODING); } /** */ public static function getHandles() { return array( // MIME: RFC 2045 'content-transfer-encoding' ); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/Date.php0000664000175000017500000000346013055000404017342 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ class Horde_Mime_Headers_Date extends Horde_Mime_Headers_Element_Single { /** * Generate a 'Date' header for the current time. * * @return Horde_Mime_Headers_Date Date header object. */ public static function create() { return new self(null, date('r')); } /** */ public function __construct($name, $value) { parent::__construct('Date', $value); } /** */ public static function getHandles() { return array( // Mail: RFC 5322 'date' ); } /** * Perform sanity checking on a header value. * * @param string $data The header data. * * @return string The cleaned header data. */ protected function _sanityCheck($data) { $date = parent::_sanityCheck($data); if (substr(rtrim($date), -5) === ' 0000') { $date = substr(trim($date), 0, strlen(trim($date)) - 5) . ' +0000'; } /* Check for malformed day-of-week parts */ if (!preg_match("/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun),/", $date)) { $date = trim(preg_replace("/^(\S*,)/", '', $date)); } return $date; } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/Deprecated.php0000664000175000017500000001623513055000404020531 0ustar janjan * @deprecated * @category Horde * @copyright 2014-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ class Horde_Mime_Headers_Deprecated { /** * Base headers object. * * @var Horde_Mime_Headers */ private $_headers; /** */ public function __construct(Horde_Mime_Headers $headers) { $this->_headers = $headers; } /** */ public function addMessageIdHeader() { $this->_headers->addHeaderOb(Horde_Mime_Headers_MessageId::create()); } /** */ public function addUserAgentHeader() { $this->_headers->addHeaderOb(Horde_Mime_Headers_UserAgent::create()); } /** */ public function getUserAgent() { return strval(Horde_Mime_Headers_UserAgent::create()); } /** */ public function setUserAgent($agent) { $this->_headers->addHeaderOb( new Horde_Mime_Headers_UserAgent(null, $agent) ); } /** */ public function addReceivedHeader(array $opts = array()) { $old_error = error_reporting(0); if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { /* This indicates the user is connecting through a proxy. */ $remote_path = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $remote_addr = $remote_path[0]; if (!empty($opts['dns'])) { $remote = $remote_addr; try { if ($response = $opts['dns']->query($remote_addr, 'PTR')) { foreach ($response->answer as $val) { if (isset($val->ptrdname)) { $remote = $val->ptrdname; break; } } } } catch (Net_DNS2_Exception $e) {} } else { $remote = gethostbyaddr($remote_addr); } } else { $remote_addr = $_SERVER['REMOTE_ADDR']; if (empty($_SERVER['REMOTE_HOST'])) { if (!empty($opts['dns'])) { $remote = $remote_addr; try { if ($response = $opts['dns']->query($remote_addr, 'PTR')) { foreach ($response->answer as $val) { if (isset($val->ptrdname)) { $remote = $val->ptrdname; break; } } } } catch (Net_DNS2_Exception $e) {} } else { $remote = gethostbyaddr($remote_addr); } } else { $remote = $_SERVER['REMOTE_HOST']; } } error_reporting($old_error); if (!empty($_SERVER['REMOTE_IDENT'])) { $remote_ident = $_SERVER['REMOTE_IDENT'] . '@' . $remote . ' '; } elseif ($remote != $_SERVER['REMOTE_ADDR']) { $remote_ident = $remote . ' '; } else { $remote_ident = ''; } if (!empty($opts['server'])) { $server_name = $opts['server']; } elseif (!empty($_SERVER['SERVER_NAME'])) { $server_name = $_SERVER['SERVER_NAME']; } elseif (!empty($_SERVER['HTTP_HOST'])) { $server_name = $_SERVER['HTTP_HOST']; } else { $server_name = 'unknown'; } $is_ssl = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off'; if ($remote == $remote_addr) { $remote = '[' . $remote . ']'; } $this->_headers->addHeaderOb(new Horde_Mime_Headers_Element_Multiple( 'Received', 'from ' . $remote . ' (' . $remote_ident . '[' . $remote_addr . ']) ' . 'by ' . $server_name . ' (Horde Framework) with HTTP' . ($is_ssl ? 'S' : '') . '; ' . date('r') )); } /** */ public function getOb($field) { return ($h = $this->_headers[$field]) ? $h->getAddressList(true) : null; } /** */ public function getValue($header, $type = Horde_Mime_Headers::VALUE_STRING) { if (!($ob = $this->_headers[$header])) { return null; } switch ($type) { case Horde_Mime_Headers::VALUE_BASE: $tmp = $ob->value; break; case Horde_Mime_Headers::VALUE_PARAMS: return array_change_key_case($ob->params, CASE_LOWER); case Horde_Mime_Headers::VALUE_STRING: $tmp = $ob->full_value; break; } return (is_array($tmp) && (count($tmp) === 1)) ? reset($tmp) : $tmp; } /** */ public function listHeaders() { $lhdrs = new Horde_ListHeaders(); return $lhdrs->headers(); } /** */ public function listHeadersExist() { $lhdrs = new Horde_ListHeaders(); return $lhdrs->listHeadersExist($this->_headers); } /** */ public function replaceHeader($header, $value, array $opts = array()) { $this->_headers->removeHeader($header); $this->_headers->addHeader($header, $value, $opts); } /** */ public function getString($header) { return (($hdr = $this->_headers[$header]) === null) ? null : $this->_headers[$header]->name; } /** */ public function addressFields() { return array( 'from', 'to', 'cc', 'bcc', 'reply-to', 'resent-to', 'resent-cc', 'resent-bcc', 'resent-from', 'sender' ); } /** */ public function singleFields($list = true) { $fields = array( 'to', 'from', 'cc', 'bcc', 'date', 'sender', 'reply-to', 'message-id', 'in-reply-to', 'references', 'subject', 'content-md5', 'mime-version', 'content-type', 'content-transfer-encoding', 'content-id', 'content-description', 'content-base', 'content-disposition', 'content-duration', 'content-location', 'content-features', 'content-language', 'content-alternative', 'importance', 'x-priority' ); $list_fields = array( 'list-help', 'list-unsubscribe', 'list-subscribe', 'list-owner', 'list-post', 'list-archive', 'list-id' ); return $list ? array_merge($fields, $list_fields) : $fields; } /** */ public function mimeParamFields() { return array('content-type', 'content-disposition'); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/Element.php0000664000175000017500000001061113055000404020052 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 * * @property-read string $name Header name. * @property-read string $value_single The first header value. */ abstract class Horde_Mime_Headers_Element implements IteratorAggregate { /** * Header name (UTF-8, although limited to US-ASCII subset by RFCs). * * @var string */ protected $_name; /** * Header values. * * @var array */ protected $_values = array(); /** * Constructor. * * @param string $name Header name. * @param mixed $value Header value(s). */ public function __construct($name, $value) { $this->_name = trim($name); if (strpos($this->_name, ' ') !== false) { throw new InvalidArgumentException('Invalid header name'); } $this->setValue($value); } /** */ public function __get($name) { switch ($name) { case 'name': return $this->_name; case 'value_single': return reset($this->_values); } } /** * Set the value of the header. * * @param mixed $value Header value(s). */ final public function setValue($value) { $this->_setValue($value); } /** * TODO */ abstract protected function _setValue($value); /** * Returns the encoded string value(s) needed when sending the header text * to a RFC compliant mail submission server. * * @param array $opts Additional options: * - charset: (string) Charset to encode to. * DEFAULT: UTF-8 * * @return array An array of string values. */ final public function sendEncode(array $opts = array()) { return $this->_sendEncode(array_merge(array( 'charset' => 'UTF-8' ), $opts)); } /** * TODO */ protected function _sendEncode($opts) { return $this->_values; } /** * Perform sanity checking on a header value. * * @param string $data The header data. * * @return string The cleaned header data. */ protected function _sanityCheck($data) { $charset_test = array( 'windows-1252', Horde_Mime_Headers::$defaultCharset ); if (!Horde_String::validUtf8($data)) { /* Appears to be a PHP error with the internal String structure * which prevents accurate manipulation of the string. Copying * the data to a new variable fixes things. */ $data = substr($data, 0); /* Assumption: broken charset in headers is generally either * UTF-8 or ISO-8859-1/Windows-1252. Test these charsets * first before using default charset. This may be a * Western-centric approach, but it's better than nothing. */ foreach ($charset_test as $charset) { $tmp = Horde_String::convertCharset($data, $charset, 'UTF-8'); if (Horde_String::validUtf8($tmp)) { return $tmp; } } } /* Ensure no null characters exist in header data. */ return str_replace("\0", '', $data); } /** * If true, indicates the contents of the header is the default value. * * @since 2.8.0 * * @return boolean True if this header is the default value. */ public function isDefault() { return false; } /* Static methods */ /** * Return list of explicit header names handled by this driver. * * @return array Header list. */ public static function getHandles() { return array(); } /* IteratorAggregate method */ /** */ public function getIterator() { return new ArrayIterator($this->_values); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/Identification.php0000664000175000017500000000223713055000404021417 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ class Horde_Mime_Headers_Identification extends Horde_Mime_Headers_Element_Single { /** * Get the identification object for the header value. * * @return Horde_Mail_Rfc822_Identification Identification object. */ public function getIdentificationOb() { return new Horde_Mail_Rfc822_Identification($this->value); } /** */ public static function getHandles() { return array( // Mail: RFC 5322 'in-reply-to', 'references' ); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/MessageId.php0000664000175000017500000000274313055000404020331 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ class Horde_Mime_Headers_MessageId extends Horde_Mime_Headers_Identification { /** * Creates a Message-ID header conforming to RFC 2822 [3.6.4] and the * standards outlined in 'draft-ietf-usefor-message-id-01.txt'. * * @param string $prefix A unique prefix to use. * * @return Horde_Mime_Headers_MessageId Message-ID header object. */ public static function create($prefix = 'Horde') { return new self( null, '<' . strval(new Horde_Support_Guid(array('prefix' => $prefix))) . '>' ); } /** */ public function __construct($name, $value) { parent::__construct('Message-ID', $value); } /** */ public static function getHandles() { return array( // Mail: RFC 5322 'message-id' ); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/Mime.php0000664000175000017500000000234613055000404017356 0ustar janjan * @category Horde * @copyright 2015-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.8.0 */ class Horde_Mime_Headers_Mime extends Horde_Mime_Headers_Element_Single implements Horde_Mime_Headers_Extension_Mime { /** */ public static function getHandles() { return array( // MIME: RFC 1864 'content-md5', // MIME: RFC 2110 'content-base', // MIME: RFC 2424 'content-duration', // MIME: RFC 2557 'content-location', // MIME: RFC 2912 [3] 'content-features', // MIME: RFC 3297 'content-alternative' ); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/MimeVersion.php0000664000175000017500000000250313055000404020717 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ class Horde_Mime_Headers_MimeVersion extends Horde_Mime_Headers_Element_Single implements Horde_Mime_Headers_Extension_Mime { /** * Creates a MIME-Version header, conforming to the MIME specification as * detailed in RFC 2045. * * @return Horde_Mime_Headers_MimeVersion MIME-Version header object. */ public static function create() { return new self(null, '1.0'); } /** */ public function __construct($name, $value) { parent::__construct('MIME-Version', $value); } /** */ public static function getHandles() { return array( // MIME: RFC 2045 'mime-version' ); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/Received.php0000664000175000017500000000172713055000404020217 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ class Horde_Mime_Headers_Received extends Horde_Mime_Headers_Element_Multiple { /** */ public function __construct($name, $value) { parent::__construct('Received', $value); } /** */ public static function getHandles() { return array( // Mail: RFC 5322 'received' ); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/Subject.php0000664000175000017500000000215513055000404020064 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ class Horde_Mime_Headers_Subject extends Horde_Mime_Headers_Element_Single { /** */ public function __construct($name, $value) { parent::__construct('Subject', $value); } /** */ protected function _sendEncode($opts) { return array(Horde_Mime::encode($this->value, $opts['charset'])); } /** */ public static function getHandles() { return array( // Mail: RFC 5322 'subject' ); } } Horde_Mime-2.10.3/lib/Horde/Mime/Headers/UserAgent.php0000664000175000017500000000243013055000404020356 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ class Horde_Mime_Headers_UserAgent extends Horde_Mime_Headers_Element_Single { /** * Creates a default system User-Agent header. * * @return Horde_Mime_Headers_Single_UserAgent User-Agent header object. */ public static function create($prefix = 'Horde') { return new self( null, 'Horde Application Framework 5' ); } /** */ public function __construct($name, $value) { parent::__construct('User-Agent', $value); } /** */ public static function getHandles() { return array( // Mail: RFC 5322 'user-agent' ); } } Horde_Mime-2.10.3/lib/Horde/Mime/Part/Upgrade/V1.php0000664000175000017500000000560313055000404017676 0ustar janjan * @category Horde * @copyright 2015-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.8.0 */ class Horde_Mime_Part_Upgrade_V1 { /** * Converted data. * * @var array */ public $data = null; /** * Constructor. * * @param array $data V1 data. */ public function __construct($data) { // Version number array_shift($data); $d = array(); $type = array_shift($data); $subtype = array_shift($data); $ct = Horde_Mime_Headers_ContentParam_ContentType::create(); $d[4] = new Horde_Mime_Headers(); $d[4]->addHeaderOb($ct); $ct->setContentParamValue($type . '/' . $subtype); $d[9] = array_shift($data); if ($lang = array_shift($data)) { $d[4]->addHeaderOb( new Horde_Mime_Headers_ContentLanguage('', $lang) ); } if ($cd = array_shift($data)) { $hdr = new Horde_Mime_Headers_ContentDescription(null, ''); $d[4]->addHeaderOb($hdr); $hdr->setValue($cd); } $cd = new Horde_Mime_Headers_ContentParam_ContentDisposition(null, ''); $d[4]->addHeaderOb($cd); $cd->setContentParamValue(array_shift($data)); foreach (array_shift($data) as $key => $val) { $cd[$key] = $val; } foreach (array_shift($data) as $key => $val) { $ct[$key] = $val; } $d[7] = array_shift($data); $d[6] = array_shift($data); $d[2] = array_shift($data); $d[5] = array_shift($data); if ($boundary = array_shift($data)) { $ct['boundary'] = $boundary; } $d[1] = array_shift($data); if ($cid = array_shift($data)) { $hdr = new Horde_Mime_Headers_ContentId(null, $cid); $d[4]->addHeaderOb($hdr); } if ($cd = array_shift($data)) { $hdr = new Horde_Mime_Headers_Element_Single('Content-Duration', ''); $d[4]->addHeaderOb($hdr); $hdr->setValue($cd); } $d[8] = 0; if (array_shift($data)) { $d[8] |= STATUS_REINDEX; } if (array_shift($data)) { $d[8] |= STATUS_BASEPART; } $d[3] = array_shift($data); if (count($data)) { $d[10] = reset($data); } $this->data = $d; } } Horde_Mime-2.10.3/lib/Horde/Mime/Part/Iterator.php0000664000175000017500000000550313055000404017611 0ustar janjan * @category Horde * @copyright 2015-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.9.0 */ class Horde_Mime_Part_Iterator implements Countable, Iterator { /** * Include the base when iterating? * * @var boolean */ protected $_includeBase; /** * Base part. * * @var Horde_Mime_Part */ protected $_part; /** * State data. * * @var object */ protected $_state; /** * Constructor. */ public function __construct(Horde_Mime_Part $part, $base = false) { $this->_includeBase = (bool)$base; $this->_part = $part; } /* Countable methods. */ /** * Returns the number of message parts. * * @return integer Number of message parts. */ public function count() { return count(iterator_to_array($this)); } /* RecursiveIterator methods. */ /** */ public function current() { return $this->valid() ? $this->_state->current : null; } /** */ public function key() { return ($curr = $this->current()) ? $curr->getMimeId() : null; } /** */ public function next() { if (!isset($this->_state)) { return; } $out = $this->_state->current->getPartByIndex($this->_state->index++); if ($out) { $this->_state->recurse[] = array( $this->_state->current, $this->_state->index ); $this->_state->current = $out; $this->_state->index = 0; } elseif ($tmp = array_pop($this->_state->recurse)) { $this->_state->current = $tmp[0]; $this->_state->index = $tmp[1]; $this->next(); } else { unset($this->_state); } } /** */ public function rewind() { $this->_state = new stdClass; $this->_state->current = $this->_part; $this->_state->index = 0; $this->_state->recurse = array(); if (!$this->_includeBase) { $this->next(); } } /** */ public function valid() { return !empty($this->_state); } } Horde_Mime-2.10.3/lib/Horde/Mime/Exception.php0000664000175000017500000000122513055000404017045 0ustar janjan * @category Horde * @copyright 2009-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ class Horde_Mime_Exception extends Horde_Exception_Wrapped { } Horde_Mime-2.10.3/lib/Horde/Mime/Headers.php0000664000175000017500000003520213055000404016464 0ustar janjan * @category Horde * @copyright 2002-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ class Horde_Mime_Headers implements ArrayAccess, IteratorAggregate, Serializable { /* Serialized version. */ const VERSION = 3; /** * The default charset to use when parsing text parts with no charset * information. * * @todo Make this a non-static property or pass as parameter to static * methods in Horde 6. * @var string */ public static $defaultCharset = 'us-ascii'; /** * Cached handler information for Header Element objects. * * @var array */ protected static $_handlers = array(); /** * The internal headers array. * * @var Horde_Support_CaseInsensitiveArray */ protected $_headers; /** * Constructor. */ public function __construct() { $this->_headers = new Horde_Support_CaseInsensitiveArray(); } /** */ public function __clone() { $copy = new Horde_Support_CaseInsensitiveArray(); foreach ($this->_headers as $key => $val) { $copy[$key] = clone $val; } $this->_headers = $copy; } /** * Returns the headers in array format. * * @param array $opts Optional parameters: *
     *   - broken_rfc2231: (boolean) Attempt to work around non-RFC
     *                     2231-compliant MUAs by generating both a RFC
     *                     2047-like parameter name and also the correct RFC
     *                     2231 parameter
     *                     DEFAULT: false
     *   - canonical: (boolean) Use canonical (RFC 822/2045) CRLF EOLs?
     *                DEFAULT: Uses "\n"
     *   - charset: (string) Encodes the headers using this charset. If empty,
     *              encodes using UTF-8.
     *              DEFAULT: No encoding.
     *   - defserver: (string) The default domain to append to mailboxes.
     *                DEFAULT: No default name.
     *   - lang: (string) The language to use when encoding.
     *           DEFAULT: None specified
     *   - nowrap: (integer) Don't wrap the headers.
     *             DEFAULT: Headers are wrapped.
     * 
* * @return array The headers in array format. Keys are header names, but * case sensitivity cannot be guaranteed. Values are * header values. */ public function toArray(array $opts = array()) { $charset = array_key_exists('charset', $opts) ? (empty($opts['charset']) ? 'UTF-8' : $opts['charset']) : null; $eol = empty($opts['canonical']) ? $this->_eol : "\r\n"; $ret = array(); foreach ($this->_headers as $ob) { $sopts = array( 'charset' => $charset ); if (($ob instanceof Horde_Mime_Headers_Addresses) || ($ob instanceof Horde_Mime_Headers_AddressesMulti)) { if (!empty($opts['defserver'])) { $sopts['defserver'] = $opts['defserver']; } } elseif ($ob instanceof Horde_Mime_Headers_ContentParam) { $sopts['broken_rfc2231'] = !empty($opts['broken_rfc2231']); if (!empty($opts['lang'])) { $sopts['lang'] = $opts['lang']; } } $tmp = array(); foreach ($ob->sendEncode(array_filter($sopts)) as $val) { if (empty($opts['nowrap'])) { /* Remove any existing linebreaks and wrap the line. */ $htext = $ob->name . ': '; $val = ltrim( substr( wordwrap( $htext . strtr(trim($val), array("\r" => '', "\n" => '')), 76, $eol . ' ' ), strlen($htext) ) ); } $tmp[] = $val; } $ret[$ob->name] = (count($tmp) == 1) ? reset($tmp) : $tmp; } return $ret; } /** * Returns all headers concatenated into a single string. * * @param array $opts See toArray(). * * @return string The headers in string format. */ public function toString(array $opts = array()) { $eol = empty($opts['canonical']) ? $this->_eol : "\r\n"; $text = ''; foreach ($this->toArray($opts) as $key => $val) { foreach ((is_array($val) ? $val : array($val)) as $entry) { $text .= $key . ': ' . $entry . $eol; } } return $text . $eol; } /** * Add/append/replace a header. * * @param string $header The header name. * @param string $value The header value (UTF-8). * @param array $opts DEPRECATED */ public function addHeader($header, $value, array $opts = array()) { /* Existing header? Add to that object. */ $header = trim($header); if ($hdr = $this[$header]) { $hdr->setValue($value); return; } $classname = $this->_getHeaderClassName($header); try { $ob = new $classname($header, $value); } catch (InvalidArgumentException $e) { /* Ignore an invalid header. */ return; } catch (Horde_Mime_Exception $e) { return; } switch ($classname) { case 'Horde_Mime_Headers_ContentParam_ContentDisposition': case 'Horde_Mime_Headers_ContentParam_ContentType': /* BC */ if (!empty($opts['params'])) { foreach ($opts['params'] as $key => $val) { $ob[$key] = $val; } } break; } $this->_headers[$ob->name] = $ob; } /** * Add a Horde_Mime_Headers_Element object to the current header list. * * @since 2.5.0 * * @param Horde_Mime_Headers_Element $ob Header object to add. * @param boolean $check Check that the header and object * type match? * * @throws InvalidArgumentException */ public function addHeaderOb(Horde_Mime_Headers_Element $ob, $check = false) { if ($check) { $cname = $this->_getHeaderClassName($ob->name); if (!($ob instanceof $cname)) { throw new InvalidArgumentException(sprintf( 'Object is not correct class: %s', $cname )); } } /* Existing header? Add to that object. */ if ($hdr = $this[$ob->name]) { $hdr->setValue($ob); } else { $this->_headers[$ob->name] = $ob; } } /** * Return the header class to use for a header name. * * @param string $header The header name. * * @return string The Horde_Mime_Headers_* class to use. */ protected function _getHeaderClassName($header) { if (empty(self::$_handlers)) { $search = array( 'Horde_Mime_Headers_Element_Single', 'Horde_Mime_Headers_AddressesMulti', 'Horde_Mime_Headers_Addresses', 'Horde_Mime_Headers_ContentDescription', 'Horde_Mime_Headers_ContentId', 'Horde_Mime_Headers_ContentLanguage', 'Horde_Mime_Headers_ContentParam_ContentDisposition', 'Horde_Mime_Headers_ContentParam_ContentType', 'Horde_Mime_Headers_ContentTransferEncoding', 'Horde_Mime_Headers_Date', 'Horde_Mime_Headers_Identification', 'Horde_Mime_Headers_MessageId', 'Horde_Mime_Headers_Mime', 'Horde_Mime_Headers_MimeVersion', 'Horde_Mime_Headers_Received', 'Horde_Mime_Headers_Subject', 'Horde_Mime_Headers_UserAgent' ); foreach ($search as $val) { foreach ($val::getHandles() as $hdr) { self::$_handlers[$hdr] = $val; } } } $header = Horde_String::lower($header); return isset(self::$_handlers[$header]) ? self::$_handlers[$header] : 'Horde_Mime_Headers_Element_Multiple'; } /** * Get a header from the header array. * * @param string $header The header name. * * @return Horde_Mime_Headers_Element Element object, or null if not * found. */ public function getHeader($header) { return $this[$header]; } /** * Remove a header from the header array. * * @param string $header The header name. */ public function removeHeader($header) { unset($this[$header]); } /* Static methods. */ /** * Builds a Horde_Mime_Headers object from header text. * * @param mixed $text A text string (or, as of 2.3.0, a Horde_Stream * object or stream resource) containing the headers. * * @return Horde_Mime_Headers A new Horde_Mime_Headers object. */ public static function parseHeaders($text) { $curr = null; $headers = new Horde_Mime_Headers(); $hdr_list = array(); if ($text instanceof Horde_Stream) { $stream = $text; $stream->rewind(); } else { $stream = new Horde_Stream_Temp(); $stream->add($text, true); } while (!$stream->eof()) { if (!($val = rtrim($stream->getToChar("\n", false), "\r"))) { break; } if ($curr && (($val[0] == ' ') || ($val[0] == "\t"))) { $curr->text .= ' ' . ltrim($val); } else { $pos = strpos($val, ':'); $curr = new stdClass; $curr->header = substr($val, 0, $pos); $curr->text = ltrim(substr($val, $pos + 1)); $hdr_list[] = $curr; } } foreach ($hdr_list as $val) { /* When parsing, only keep the FIRST header seen for single value * text-only headers, since newer headers generally are appended * to the top of the message. */ if (!($ob = $headers[$val->header]) || !($ob instanceof Horde_Mime_Headers_Element_Single) || ($ob instanceof Horde_Mime_Headers_Addresses)) { $headers->addHeader($val->header, rtrim($val->text)); } } if (!($text instanceof Horde_Stream)) { $stream->close(); } return $headers; } /* Serializable methods. */ /** * Serialization. * * @return string Serialized data. */ public function serialize() { $data = array( // Serialized data ID. self::VERSION, $this->_headers->getArrayCopy(), // TODO: BC $this->_eol ); return serialize($data); } /** * Unserialization. * * @param string $data Serialized data. * * @throws Exception */ public function unserialize($data) { $data = @unserialize($data); if (!is_array($data) || !isset($data[0]) || ($data[0] != self::VERSION)) { throw new Horde_Mime_Exception('Cache version change'); } $this->_headers = new Horde_Support_CaseInsensitiveArray($data[1]); // TODO: BC $this->_eol = $data[2]; } /* ArrayAccess methods. */ /** * Does header exist? * * @since 2.5.0 * * @param string $header Header name. * * @return boolean True if header exists. */ public function offsetExists($offset) { return isset($this->_headers[trim($offset)]); } /** * Return header element object. * * @since 2.5.0 * * @param string $header Header name. * * @return Horde_Mime_Headers_Element Element object, or null if not * found. */ public function offsetGet($offset) { return $this->_headers[trim($offset)]; } /** * Store a header element object. * * @since 2.5.0 * * @param string $offset Not used. * @param Horde_Mime_Headers_Element $elt Header element. */ public function offsetSet($offset, $value) { $this->addHeaderOb($value); } /** * Remove a header element object. * * @since 2.5.0 * * @param string $offset Header name. */ public function offsetUnset($offset) { unset($this->_headers[trim($offset)]); } /* IteratorAggregate function */ /** * @since 2.5.0 */ public function getIterator() { return new ArrayIterator($this->_headers); } /* Deprecated functions */ /** * Handle deprecated methods. */ public function __call($name, $arguments) { $d = new Horde_Mime_Headers_Deprecated($this); return call_user_func_array(array($d, $name), $arguments); } /** * Handle deprecated static methods. */ public static function __callStatic($name, $arguments) { $d = new Horde_Mime_Headers_Deprecated(); return call_user_func_array(array($d, $name), $arguments); } /** * @deprecated */ protected $_eol = "\n"; /** * @deprecated */ public function setEOL($eol) { $this->_eol = $eol; } /** * @deprecated */ public function getEOL() { return $this->_eol; } /* Constants for getValue(). @deprecated */ const VALUE_STRING = 1; const VALUE_BASE = 2; const VALUE_PARAMS = 3; } Horde_Mime-2.10.3/lib/Horde/Mime/Id.php0000664000175000017500000001050113055000404015440 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ class Horde_Mime_Id { /* Constants for idArithmetic() method. */ const ID_DOWN = 1; const ID_NEXT = 2; const ID_PREV = 3; const ID_UP = 4; /** * MIME ID. * * @var string */ public $id; /** * Constructor. * * @param string $id MIME ID. */ public function __construct($id) { $this->id = $id; } /** */ public function __toString() { return $this->id; } /** * Performs MIME ID "arithmetic". * * @param string $action One of: * - ID_DOWN: ID of child. Note: ID_DOWN will first traverse to "$id.0" * if given an ID *NOT* of the form "$id.0". If given an ID of * the form "$id.0", ID_DOWN will traverse to "$id.1". This * behavior can be avoided if 'no_rfc822' option is set. * - ID_NEXT: ID of next sibling. * - ID_PREV: ID of previous sibling. * - ID_UP: ID of parent. Note: ID_UP will first traverse to "$id.0" if * given an ID *NOT* of the form "$id.0". If given an ID of the * form "$id.0", ID_UP will traverse to "$id". This behavior can * be avoided if 'no_rfc822' option is set. * @param array $options Additional options: * - count: (integer) How many levels to traverse. * DEFAULT: 1 * - no_rfc822: (boolean) Don't traverse RFC 822 sub-levels. * DEFAULT: false * * @return mixed The resulting ID string, or null if that ID can not * exist. */ public function idArithmetic($action, array $options = array()) { return $this->_idArithmetic($this->id, $action, array_merge(array( 'count' => 1 ), $options)); } /** * @see idArithmetic() */ protected function _idArithmetic($id, $action, $options) { $pos = strrpos($id, '.'); $end = ($pos === false) ? $id : substr($id, $pos + 1); switch ($action) { case self::ID_DOWN: if ($end == '0') { $id = ($pos === false) ? 1 : substr_replace($id, '1', $pos + 1); } else { $id .= empty($options['no_rfc822']) ? '.0' : '.1'; } break; case self::ID_NEXT: ++$end; $id = ($pos === false) ? $end : substr_replace($id, $end, $pos + 1); break; case self::ID_PREV: if (($end == '0') || (empty($options['no_rfc822']) && ($end == '1'))) { $id = null; } elseif ($pos === false) { $id = --$end; } else { $id = substr_replace($id, --$end, $pos + 1); } break; case self::ID_UP: if ($pos === false) { $id = ($end == '0') ? null : '0'; } elseif (!empty($options['no_rfc822']) || ($end == '0')) { $id = substr($id, 0, $pos); } else { $id = substr_replace($id, '0', $pos + 1); } break; } return (!is_null($id) && --$options['count']) ? $this->_idArithmetic($id, $action, $options) : $id; } /** * Determines if a given MIME ID lives underneath a base ID. * * @param string $id The MIME ID to query. * * @return boolean Whether $id lives under the base ID ($this->id). */ public function isChild($id) { $base = (substr($this->id, -2) == '.0') ? substr($this->id, 0, -1) : rtrim($this->id, '.') . '.'; return ((($base == 0) && ($id != 0)) || (strpos(strval($id), strval($base)) === 0)); } } Horde_Mime-2.10.3/lib/Horde/Mime/Magic.php0000664000175000017500000001634413055000404016137 0ustar janjan * @author Michael Slusarz * @category Horde * @copyright 1999-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ class Horde_Mime_Magic { /** * The MIME extension map. * * @var array */ protected static $_map = null; /** * Returns a copy of the MIME extension map. * * @return array The MIME extension map. */ protected static function _getMimeExtensionMap() { if (is_null(self::$_map)) { require __DIR__ . '/mime.mapping.php'; self::$_map = $mime_extension_map; } return self::$_map; } /** * Attempt to convert a file extension to a MIME type, based * on the global Horde and application specific config files. * * If we cannot map the file extension to a specific type, then * we fall back to a custom MIME handler 'x-extension/$ext', which * can be used as a normal MIME type internally throughout Horde. * * @param string $ext The file extension to be mapped to a MIME type. * * @return string The MIME type of the file extension. */ public static function extToMime($ext) { if (empty($ext)) { return 'application/octet-stream'; } $ext = Horde_String::lower($ext); $map = self::_getMimeExtensionMap(); $pos = 0; while (!isset($map[$ext])) { if (($pos = strpos($ext, '.')) === false) { break; } $ext = substr($ext, $pos + 1); } return isset($map[$ext]) ? $map[$ext] : 'x-extension/' . $ext; } /** * Attempt to convert a filename to a MIME type, based on the global Horde * and application specific config files. * * @param string $filename The filename to be mapped to a MIME type. * @param boolean $unknown How should unknown extensions be handled? If * true, will return 'x-extension/*' types. If * false, will return 'application/octet-stream'. * * @return string The MIME type of the filename. */ public static function filenameToMime($filename, $unknown = true) { $pos = strlen($filename) + 1; $type = ''; $map = self::_getMimeExtensionMap(); for ($i = 0; $i <= $map['__MAXPERIOD__']; ++$i) { $npos = strrpos(substr($filename, 0, $pos - 1), '.'); if ($npos === false) { break; } $pos = $npos + 1; } $type = ($pos === false) ? '' : self::extToMime(substr($filename, $pos)); return (empty($type) || (!$unknown && (strpos($type, 'x-extension') !== false))) ? 'application/octet-stream' : $type; } /** * Attempt to convert a MIME type to a file extension, based * on the global Horde and application specific config files. * * If we cannot map the type to a file extension, we return false. * * @param string $type The MIME type to be mapped to a file extension. * * @return string The file extension of the MIME type. */ public static function mimeToExt($type) { if (empty($type)) { return false; } if (($key = array_search($type, self::_getMimeExtensionMap())) === false) { list($major, $minor) = explode('/', $type); if ($major == 'x-extension') { return $minor; } if (strpos($minor, 'x-') === 0) { return substr($minor, 2); } return false; } return $key; } /** * Attempt to determine the MIME type of an unknown file. * * @param string $path The path to the file to analyze. * @param string $magic_db Path to the mime magic database. * @param array $opts Additional options: * - nostrip: (boolean) Don't strip parameter information from MIME * type string. * DEFAULT: false * * @return mixed The MIME type of the file. Returns false if the file * type can not be determined. */ public static function analyzeFile($path, $magic_db = null, $opts = array()) { if (Horde_Util::extensionExists('fileinfo')) { $res = empty($magic_db) ? finfo_open(FILEINFO_MIME) : finfo_open(FILEINFO_MIME, $magic_db); if ($res) { $type = trim(finfo_file($res, $path)); finfo_close($res); /* Remove any additional information. */ if (empty($opts['nostrip'])) { foreach (array(';', ',', '\\0') as $separator) { if (($pos = strpos($type, $separator)) !== false) { $type = rtrim(substr($type, 0, $pos)); } } if (preg_match('|^[a-z0-9]+/[.-a-z0-9]+$|i', $type)) { return $type; } } else { return $type; } } } return false; } /** * Attempt to determine the MIME type of an unknown byte stream. * * @param string $data The file data to analyze. * @param string $magic_db Path to the mime magic database. * @param array $opts Additional options: * - nostrip: (boolean) Don't strip parameter information from MIME * type string. * DEFAULT: false * * @return mixed The MIME type of the file. Returns false if the file * type can not be determined. */ public static function analyzeData($data, $magic_db = null, $opts = array()) { /* If the PHP Mimetype extension is available, use that. */ if (Horde_Util::extensionExists('fileinfo')) { $res = empty($magic_db) ? @finfo_open(FILEINFO_MIME) : @finfo_open(FILEINFO_MIME, $magic_db); if (!$res) { return false; } $type = trim(finfo_buffer($res, $data)); finfo_close($res); /* Remove any additional information. */ if (empty($opts['nostrip'])) { if (($pos = strpos($type, ';')) !== false) { $type = rtrim(substr($type, 0, $pos)); } if (($pos = strpos($type, ',')) !== false) { $type = rtrim(substr($type, 0, $pos)); } } return $type; } return false; } } Horde_Mime-2.10.3/lib/Horde/Mime/Mail.php0000664000175000017500000003621213055000404015775 0ustar janjan * @category Horde * @copyright 2007-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ class Horde_Mime_Mail { /** * The message headers. * * @var Horde_Mime_Headers */ protected $_headers; /** * The base MIME part. * * @var Horde_Mime_Part */ protected $_base; /** * The main body part. * * @var Horde_Mime_Part */ protected $_body; /** * The main HTML body part. * * @var Horde_Mime_Part */ protected $_htmlBody; /** * The message recipients. * * @var Horde_Mail_Rfc822_List */ protected $_recipients; /** * Bcc recipients. * * @var string */ protected $_bcc; /** * All MIME parts except the main body part. * * @var array */ protected $_parts = array(); /** * The Mail driver name. * * @link http://pear.php.net/Mail * @var string */ protected $_mailer_driver = 'smtp'; /** * The charset to use for the message. * * @var string */ protected $_charset = 'UTF-8'; /** * The Mail driver parameters. * * @link http://pear.php.net/Mail * @var array */ protected $_mailer_params = array(); /** * Constructor. * * @param array $params A hash with basic message information. 'charset' * is the character set of the message. 'body' is * the message body. All other parameters are * assumed to be message headers. * * @throws Horde_Mime_Exception */ public function __construct($params = array()) { /* Set SERVER_NAME. */ if (!isset($_SERVER['SERVER_NAME'])) { $_SERVER['SERVER_NAME'] = php_uname('n'); } $this->_headers = new Horde_Mime_Headers(); if (isset($params['charset'])) { $this->_charset = $params['charset']; unset($params['charset']); } if (isset($params['body'])) { $this->setBody($params['body'], $this->_charset); unset($params['body']); } $this->addHeaders($params); $this->clearRecipients(); } /** * Adds several message headers at once. * * @param array $header Hash with header names as keys and header * contents as values. * * @throws Horde_Mime_Exception */ public function addHeaders($headers = array()) { foreach ($headers as $header => $value) { $this->addHeader($header, $value); } } /** * Adds a message header. * * @param string $header The header name. * @param string $value The header value. * @param boolean $overwrite If true, an existing header of the same name * is being overwritten; if false, multiple * headers are added; if null, the correct * behaviour is automatically chosen depending * on the header name. * * @throws Horde_Mime_Exception */ public function addHeader($header, $value, $overwrite = null) { $lc_header = Horde_String::lower($header); if (is_null($overwrite) && in_array($lc_header, $this->_headers->singleFields(true))) { $overwrite = true; } if ($overwrite) { $this->_headers->removeHeader($header); } if ($lc_header === 'bcc') { $this->_bcc = $value; } else { $this->_headers->addHeader($header, $value); } } /** * Add a Horde_Mime_Headers_Element object to the current header list. * * @since 2.5.0 * * @param Horde_Mime_Headers_Element $ob Header object to add. * * @throws InvalidArgumentException */ public function addHeaderOb(Horde_Mime_Headers_Element $ob) { $this->_headers->addHeaderOb($ob, true); } /** * Removes a message header. * * @param string $header The header name. */ public function removeHeader($header) { if (Horde_String::lower($header) === 'bcc') { unset($this->_bcc); } else { $this->_headers->removeHeader($header); } } /** * Sets the message body text. * * @param string $body The message content. * @param string $charset The character set of the message. * @param boolean|integer $wrap If true, wrap the message at column 76; * If an integer wrap the message at that * column. Don't use wrapping if sending * flowed messages. */ public function setBody($body, $charset = null, $wrap = false) { if (!$charset) { $charset = $this->_charset; } $body = Horde_String::convertCharset($body, 'UTF-8', $charset); if ($wrap) { $body = Horde_String::wrap($body, $wrap === true ? 76 : $wrap); } $this->_body = new Horde_Mime_Part(); $this->_body->setType('text/plain'); $this->_body->setCharset($charset); $this->_body->setContents($body); $this->_base = null; } /** * Sets the HTML message body text. * * @param string $body The message content. * @param string $charset The character set of the message. * @param boolean $alternative If true, a multipart/alternative message is * created and the text/plain part is * generated automatically. If false, a * text/html message is generated. */ public function setHtmlBody($body, $charset = null, $alternative = true) { if (!$charset) { $charset = $this->_charset; } $this->_htmlBody = new Horde_Mime_Part(); $this->_htmlBody->setType('text/html'); $this->_htmlBody->setCharset($charset); $this->_htmlBody->setContents($body); if ($alternative) { $this->setBody(Horde_Text_Filter::filter($body, 'Html2text', array('charset' => $charset, 'wrap' => false)), $charset); } $this->_base = null; } /** * Adds a message part. * * @param string $mime_type The content type of the part. * @param string $content The content of the part. * @param string $charset The character set of the part. * @param string $disposition The content disposition of the part. * * @return integer The part number. */ public function addPart($mime_type, $content, $charset = 'us-ascii', $disposition = null) { $part = new Horde_Mime_Part(); $part->setType($mime_type); $part->setCharset($charset); $part->setDisposition($disposition); $part->setContents($content); return $this->addMimePart($part); } /** * Adds a MIME message part. * * @param Horde_Mime_Part $part A Horde_Mime_Part object. * * @return integer The part number. */ public function addMimePart($part) { $this->_parts[] = $part; return count($this->_parts) - 1; } /** * Sets the base MIME part. * * If the base part is set, any text bodies will be ignored when building * the message. * * @param Horde_Mime_Part $part A Horde_Mime_Part object. */ public function setBasePart($part) { $this->_base = $part; } /** * Adds an attachment. * * @param string $file The path to the file. * @param string $name The file name to use for the attachment. * @param string $type The content type of the file. * @param string $charset The character set of the part (only relevant for * text parts. * * @return integer The part number. */ public function addAttachment($file, $name = null, $type = null, $charset = 'us-ascii') { if (empty($name)) { $name = basename($file); } if (empty($type)) { $type = Horde_Mime_Magic::filenameToMime($file, false); } $num = $this->addPart($type, file_get_contents($file), $charset, 'attachment'); $this->_parts[$num]->setName($name); return $num; } /** * Removes a message part. * * @param integer $part The part number. */ public function removePart($part) { if (isset($this->_parts[$part])) { unset($this->_parts[$part]); } } /** * Removes all (additional) message parts but leaves the body parts * untouched. */ public function clearParts() { $this->_parts = array(); } /** * Adds message recipients. * * Recipients specified by To:, Cc:, or Bcc: headers are added * automatically. * * @param string|array List of recipients, either as a comma separated * list or as an array of email addresses. * * @throws Horde_Mime_Exception */ public function addRecipients($recipients) { $this->_recipients->add($recipients); } /** * Removes message recipients. * * @param string|array List of recipients, either as a comma separated * list or as an array of email addresses. * * @throws Horde_Mime_Exception */ public function removeRecipients($recipients) { $this->_recipients->remove($recipients); } /** * Removes all message recipients. */ public function clearRecipients() { $this->_recipients = new Horde_Mail_Rfc822_List(); } /** * Sends this message. * * @param Mail $mailer A Mail object. * @param boolean $resend If true, the message id and date are re-used; * If false, they will be updated. * @param boolean $flowed Send message in flowed text format. * * @throws Horde_Mime_Exception */ public function send($mailer, $resend = false, $flowed = true) { /* Add mandatory headers if missing. */ if (!$resend || !isset($this->_headers['Message-ID'])) { $this->_headers->addHeaderOb( Horde_Mime_Headers_MessageId::create() ); } if (!isset($this->_headers['User-Agent'])) { $this->_headers->addHeaderOb( Horde_Mime_Headers_UserAgent::create() ); } if (!$resend || !isset($this->_headers['Date'])) { $this->_headers->addHeaderOb(Horde_Mime_Headers_Date::create()); } if (isset($this->_base)) { $basepart = $this->_base; } else { /* Send in flowed format. */ if ($flowed && !empty($this->_body)) { $flowed = new Horde_Text_Flowed($this->_body->getContents(), $this->_body->getCharset()); $flowed->setDelSp(true); $this->_body->setContentTypeParameter('format', 'flowed'); $this->_body->setContentTypeParameter('DelSp', 'Yes'); $this->_body->setContents($flowed->toFlowed()); } /* Build mime message. */ $body = new Horde_Mime_Part(); if (!empty($this->_body) && !empty($this->_htmlBody)) { $body->setType('multipart/alternative'); $this->_body->setDescription(Horde_Mime_Translation::t("Plaintext Version of Message")); $body[] = $this->_body; $this->_htmlBody->setDescription(Horde_Mime_Translation::t("HTML Version of Message")); $body[] = $this->_htmlBody; } elseif (!empty($this->_htmlBody)) { $body = $this->_htmlBody; } elseif (!empty($this->_body)) { $body = $this->_body; } if (count($this->_parts)) { $basepart = new Horde_Mime_Part(); $basepart->setType('multipart/mixed'); $basepart->isBasePart(true); if ($body) { $basepart[] = $body; } foreach ($this->_parts as $mime_part) { $basepart[] = $mime_part; } } else { $basepart = $body; $basepart->isBasePart(true); } } $basepart->setHeaderCharset($this->_charset); /* Build recipients. */ $recipients = clone $this->_recipients; foreach (array('to', 'cc') as $header) { if ($h = $this->_headers[$header]) { $recipients->add($h->getAddressList()); } } if ($this->_bcc) { $recipients->add($this->_bcc); } /* Trick Horde_Mime_Part into re-generating the message headers. */ $this->_headers->removeHeader('MIME-Version'); /* Send message. */ $recipients->unique(); $basepart->send($recipients->writeAddress(), $this->_headers, $mailer); /* Remember the basepart */ $this->_base = $basepart; } /** * Get the raw email data sent by this object. * * @param boolean $stream If true, return a stream resource, otherwise * a string is returned. * * @return stream|string The raw email data. * @since 2.4.0 */ public function getRaw($stream = true) { if ($stream) { $hdr = new Horde_Stream(); $hdr->add($this->_headers->toString(), true); return Horde_Stream_Wrapper_Combine::getStream( array($hdr->stream, $this->getBasePart()->toString( array('stream' => true, 'encode' => Horde_Mime_Part::ENCODE_7BIT | Horde_Mime_Part::ENCODE_8BIT | Horde_Mime_Part::ENCODE_BINARY)) ) ); } return $this->_headers->toString() . $this->getBasePart()->toString(); } /** * Return the base MIME part. * * @return Horde_Mime_Part */ public function getBasePart() { if (empty($this->_base)) { throw new Horde_Mail_Exception('No base part set.'); } return $this->_base; } } Horde_Mime-2.10.3/lib/Horde/Mime/Mdn.php0000664000175000017500000002350413055000404015631 0ustar janjan * @category Horde * @copyright 2004-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ class Horde_Mime_Mdn { /* RFC 3798 header for requesting a MDN. */ const MDN_HEADER = 'Disposition-Notification-To'; /** * The Horde_Mime_Headers object. * * @var Horde_Mime_Headers */ protected $_headers; /** * The text of the original message. * * @var string */ protected $_msgtext = false; /** * Constructor. * * @param Horde_Mime_Headers $mime_headers A headers object. */ public function __construct(Horde_Mime_Headers $headers) { $this->_headers = $headers; } /** * Returns the address(es) to return the MDN to. * * @return string The address(es) to send the MDN to. Returns null if no * MDN is requested. */ public function getMdnReturnAddr() { /* RFC 3798 [2.1] requires the Disposition-Notification-To header * for an MDN to be created. */ return ($hdr = $this->_headers[self::MDN_HEADER]) ? strval($hdr) : null; } /** * Is user input required to send the MDN? * Explicit confirmation is needed in some cases to prevent mail loops * and the use of MDNs for mail bombing. * * @return boolean Is explicit user input required to send the MDN? */ public function userConfirmationNeeded() { $return_path = $this->_headers['Return-Path']; /* RFC 3798 [2.1]: Explicit confirmation is needed if there is no * Return-Path in the header. Also, "if the message contains more * than one Return-Path header, the implementation may [] treat the * situation as a failure of the comparison." */ if (!$return_path || (count($return_path->value) > 1)) { return true; } /* RFC 3798 [2.1]: Explicit confirmation is needed if there is more * than one distinct address in the Disposition-Notification-To * header. */ $addr_ob = ($hdr = $this->_headers[self::MDN_HEADER]) ? $hdr->getAddressList(true) : array(); switch (count($addr_ob)) { case 0: return false; case 1: // No-op break; default: return true; } /* RFC 3798 [2.1] states that "MDNs SHOULD NOT be sent automatically * if the address in the Disposition-Notification-To header differs * from the address in the Return-Path header." This comparison is * case-sensitive for the mailbox part and case-insensitive for the * host part. */ $ret_ob = new Horde_Mail_Rfc822_Address($return_path->value); return (!$ret_ob->valid || !$addr_ob->match($ret_ob)); } /** * When generating the MDN, should we return the enitre text of the * original message? The default is no - we only return the headers of * the original message. If the text is passed in via this method, we * will return the entire message. * * @param string $text The text of the original message. */ public function originalMessageText($text) { $this->_msgtext = $text; } /** * Generate the MDN according to the specifications listed in RFC * 3798 [3]. * * @param boolean $action Was this MDN type a result of a manual * action on part of the user? * @param boolean $sending Was this MDN sent as a result of a manual * action on part of the user? * @param string $type The type of action performed by the user. * Per RFC 3798 [3.2.6.2] the following types are * valid: * - deleted * - displayed * @param string $name The name of the local server. * @param Horde_Mail_Transport $mailer Mail transport object. * @param array $opts Additional options: * - charset: (string) Default charset. * DEFAULT: NONE * - from_addr: (string) From address. * DEFAULT: NONE * @param array $mod The list of modifications. Per RFC 3798 * [3.2.6.3] the following modifications are * valid: * - error * @param array $err If $mod is 'error', the additional * information to provide. Key is the type of * modification, value is the text. */ public function generate($action, $sending, $type, $name, $mailer, array $opts = array(), array $mod = array(), array $err = array()) { $opts = array_merge(array( 'charset' => null, 'from_addr' => null ), $opts); if (!($hdr = $this->_headers[self::MDN_HEADER])) { throw new RuntimeException( 'Need at least one address to send MDN to.' ); } $to = $hdr->getAddressList(true); $ua = Horde_Mime_Headers_UserAgent::create(); if ($orig_recip = $this->_headers['Original-Recipient']) { $orig_recip = $orig_recip->value_single; } /* Set up the mail headers. */ $msg_headers = new Horde_Mime_Headers(); $msg_headers->addHeaderOb(Horde_Mime_Headers_MessageId::create()); $msg_headers->addHeaderOb($ua); /* RFC 3834 [5.2] */ $msg_headers->addHeader('Auto-Submitted', 'auto-replied'); $msg_headers->addHeaderOb(Horde_Mime_Headers_Date::create()); if ($opts['from_addr']) { $msg_headers->addHeader('From', $opts['from_addr']); } $msg_headers->addHeader('To', $to); $msg_headers->addHeader('Subject', Horde_Mime_Translation::t("Disposition Notification")); /* MDNs are a subtype of 'multipart/report'. */ $msg = new Horde_Mime_Part(); $msg->setType('multipart/report'); $msg->setContentTypeParameter('report-type', 'disposition-notification'); /* The first part is a human readable message. */ $part_one = new Horde_Mime_Part(); $part_one->setType('text/plain'); $part_one->setCharset($opts['charset']); if ($type == 'displayed') { $contents = sprintf( Horde_Mime_Translation::t("The message sent on %s to %s with subject \"%s\" has been displayed.\n\nThis is no guarantee that the message has been read or understood."), $this->_headers['Date'], $this->_headers['To'], $this->_headers['Subject'] ); $flowed = new Horde_Text_Flowed($contents, $opts['charset']); $flowed->setDelSp(true); $part_one->setContentTypeParameter('format', 'flowed'); $part_one->setContentTypeParameter('DelSp', 'Yes'); $part_one->setContents($flowed->toFlowed()); } // TODO: Messages for other notification types. $msg[] = $part_one; /* The second part is a machine-parseable description. */ $part_two = new Horde_Mime_Part(); $part_two->setType('message/disposition-notification'); $part_two_h = new Horde_Mime_Headers(); $part_two_h->addHeader('Reporting-UA', $name . '; ' . $ua); if (!empty($orig_recip)) { $part_two_h->addHeader('Original-Recipient', 'rfc822;' . $orig_recip); } if ($opts['from_addr']) { $part_two_h->addHeader('Final-Recipient', 'rfc822;' . $opts['from_addr']); } if ($msg_id = $this->_headers['Message-ID']) { $part_two_h->addHeader('Original-Message-ID', strval($msg_id)); } /* Create the Disposition field now (RFC 3798 [3.2.6]). */ $dispo = (($action) ? 'manual-action' : 'automatic-action') . '/' . (($sending) ? 'MDN-sent-manually' : 'MDN-sent-automatically') . '; ' . $type; if (!empty($mod)) { $dispo .= '/' . implode(', ', $mod); } $part_two_h->addHeader('Disposition', $dispo); if (in_array('error', $mod) && isset($err['error'])) { $part_two_h->addHeader('Error', $err['error']); } $part_two->setContents(trim($part_two_h->toString()) . "\n"); $msg[] = $part_two; /* The third part is the text of the original message. RFC 3798 [3] * allows us to return only a portion of the entire message - this * is left up to the user. */ $part_three = new Horde_Mime_Part(); $part_three->setType('message/rfc822'); $part_three_text = array(trim($this->_headers->toString()) . "\n"); if (!empty($this->_msgtext)) { $part_three_text[] = "\n" . $this->_msgtext; } $part_three->setContents($part_three_text); $msg[] = $part_three; return $msg->send($to, $msg_headers, $mailer); } /** * Add a MDN (read receipt) request header. * * @param mixed $to The address(es) the receipt should be mailed to. */ public function addMdnRequestHeaders($to) { /* This is the RFC 3798 way of requesting a receipt. */ $this->_headers->addHeader(self::MDN_HEADER, $to); } } Horde_Mime-2.10.3/lib/Horde/Mime/mime.mapping.php0000664000175000017500000022476513055000404017510 0ustar janjan' where is the unknown file extension. * * Generated: 12/04/14 00:15:12 by slusarz on bigworm.curecanti.org * * @category Horde * @package Mime */ $mime_extension_map = array( '__MAXPERIOD__' => '1', '3dml' => 'text/vnd.in3d.3dml', '3ds' => 'image/x-3ds', '3g2' => 'video/3gpp2', '3ga' => 'video/3gpp', '3gp' => 'video/3gpp', '3gp2' => 'video/3gpp2', '3gpp' => 'video/3gpp', '3gpp2' => 'video/3gpp2', '7z' => 'application/x-7z-compressed', 'C' => 'text/x-c++src', 'Z' => 'application/x-compress', 'a' => 'application/x-archive', 'aab' => 'application/x-authorware-bin', 'aac' => 'audio/x-aac', 'aam' => 'application/x-authorware-map', 'aas' => 'application/x-authorware-seg', 'abw' => 'application/x-abiword', 'abw.crashed' => 'application/x-abiword', 'abw.gz' => 'application/x-abiword', 'ac' => 'application/pkix-attr-cert', 'ac3' => 'audio/ac3', 'acc' => 'application/vnd.americandynamics.acc', 'ace' => 'application/x-ace-compressed', 'acu' => 'application/vnd.acucobol', 'acutc' => 'application/vnd.acucorp', 'adb' => 'text/x-adasrc', 'adp' => 'audio/adpcm', 'ads' => 'text/x-adasrc', 'aep' => 'application/vnd.audiograph', 'afm' => 'application/x-font-type1', 'afp' => 'application/vnd.ibm.modcap', 'ag' => 'image/x-applix-graphics', 'ahead' => 'application/vnd.ahead.space', 'ai' => 'application/postscript', 'aif' => 'audio/x-aiff', 'aifc' => 'audio/x-aiff', 'aiff' => 'audio/x-aiff', 'aiffc' => 'audio/x-aifc', 'air' => 'application/vnd.adobe.air-application-installer-package+zip', 'ait' => 'application/vnd.dvb.ait', 'al' => 'application/x-perl', 'alz' => 'application/x-alz', 'ami' => 'application/vnd.amiga.ami', 'amr' => 'audio/AMR', 'amz' => 'audio/x-amzxml', 'ani' => 'application/x-navi-animation', 'anx' => 'application/annodex', 'ape' => 'audio/x-ape', 'apk' => 'application/vnd.android.package-archive', 'appcache' => 'text/cache-manifest', 'application' => 'application/x-ms-application', 'apr' => 'application/vnd.lotus-approach', 'ar' => 'application/x-archive', 'arc' => 'application/x-freearc', 'arj' => 'application/x-arj', 'arw' => 'image/x-sony-arw', 'as' => 'application/x-applix-spreadsheet', 'asc' => 'application/pgp-signature', 'asf' => 'video/x-ms-asf', 'asm' => 'text/x-asm', 'aso' => 'application/vnd.accpac.simply.aso', 'asp' => 'application/x-asp', 'ass' => 'text/x-ssa', 'asx' => 'video/x-ms-asf', 'atc' => 'application/vnd.acucorp', 'atom' => 'application/atom+xml', 'atomcat' => 'application/atomcat+xml', 'atomsvc' => 'application/atomsvc+xml', 'atx' => 'application/vnd.antix.game-component', 'au' => 'audio/basic', 'avf' => 'video/x-msvideo', 'avi' => 'video/x-msvideo', 'aw' => 'application/applixware', 'awb' => 'audio/AMR-WB', 'awk' => 'application/x-awk', 'axa' => 'audio/annodex', 'axv' => 'video/annodex', 'azf' => 'application/vnd.airzip.filesecure.azf', 'azs' => 'application/vnd.airzip.filesecure.azs', 'azw' => 'application/vnd.amazon.ebook', 'bak' => 'application/x-trash', 'bat' => 'application/x-msdownload', 'bcpio' => 'application/x-bcpio', 'bdf' => 'application/x-font-bdf', 'bdm' => 'application/vnd.syncml.dm+wbxml', 'bdmv' => 'video/mp2t', 'bed' => 'application/vnd.realvnc.bed', 'bh2' => 'application/vnd.fujitsu.oasysprs', 'bib' => 'text/x-bibtex', 'bin' => 'application/octet-stream', 'blb' => 'application/x-blorb', 'blend' => 'application/x-blender', 'blender' => 'application/x-blender', 'blorb' => 'application/x-blorb', 'bmi' => 'application/vnd.bmi', 'bmp' => 'image/bmp', 'book' => 'application/vnd.framemaker', 'box' => 'application/vnd.previewsystems.box', 'boz' => 'application/x-bzip2', 'bpk' => 'application/octet-stream', 'btif' => 'image/prs.btif', 'bz' => 'application/x-bzip', 'bz2' => 'application/x-bzip2', 'c' => 'text/x-c', 'c++' => 'text/x-c++src', 'c11amc' => 'application/vnd.cluetrust.cartomobile-config', 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg', 'c4d' => 'application/vnd.clonk.c4group', 'c4f' => 'application/vnd.clonk.c4group', 'c4g' => 'application/vnd.clonk.c4group', 'c4p' => 'application/vnd.clonk.c4group', 'c4u' => 'application/vnd.clonk.c4group', 'cab' => 'application/vnd.ms-cab-compressed', 'caf' => 'audio/x-caf', 'cap' => 'application/vnd.tcpdump.pcap', 'car' => 'application/vnd.curl.car', 'cat' => 'application/vnd.ms-pki.seccat', 'cb7' => 'application/x-cbr', 'cba' => 'application/x-cbr', 'cbl' => 'text/x-cobol', 'cbr' => 'application/x-cbr', 'cbt' => 'application/x-cbr', 'cbz' => 'application/x-cbr', 'cc' => 'text/x-c', 'ccmx' => 'application/x-ccmx', 'cct' => 'application/x-director', 'ccxml' => 'application/ccxml+xml', 'cdbcmsg' => 'application/vnd.contact.cmsg', 'cdf' => 'application/x-netcdf', 'cdkey' => 'application/vnd.mediastation.cdkey', 'cdmia' => 'application/cdmi-capability', 'cdmic' => 'application/cdmi-container', 'cdmid' => 'application/cdmi-domain', 'cdmio' => 'application/cdmi-object', 'cdmiq' => 'application/cdmi-queue', 'cdr' => 'application/vnd.corel-draw', 'cdx' => 'chemical/x-cdx', 'cdxml' => 'application/vnd.chemdraw+xml', 'cdy' => 'application/vnd.cinderella', 'cer' => 'application/pkix-cert', 'cert' => 'application/x-x509-ca-cert', 'cfs' => 'application/x-cfs-compressed', 'cgm' => 'image/cgm', 'chat' => 'application/x-chat', 'chm' => 'application/vnd.ms-htmlhelp', 'chrt' => 'application/vnd.kde.kchart', 'cif' => 'chemical/x-cif', 'cii' => 'application/vnd.anser-web-certificate-issue-initiation', 'cil' => 'application/vnd.ms-artgalry', 'cla' => 'application/vnd.claymore', 'class' => 'application/java-vm', 'clkk' => 'application/vnd.crick.clicker.keyboard', 'clkp' => 'application/vnd.crick.clicker.palette', 'clkt' => 'application/vnd.crick.clicker.template', 'clkw' => 'application/vnd.crick.clicker.wordbank', 'clkx' => 'application/vnd.crick.clicker', 'clp' => 'application/x-msclip', 'clpi' => 'video/mp2t', 'cls' => 'text/x-tex', 'cmake' => 'text/x-cmake', 'cmc' => 'application/vnd.cosmocaller', 'cmdf' => 'chemical/x-cmdf', 'cml' => 'chemical/x-cml', 'cmp' => 'application/vnd.yellowriver-custom-menu', 'cmx' => 'image/x-cmx', 'cob' => 'text/x-cobol', 'cod' => 'application/vnd.rim.cod', 'com' => 'application/x-msdownload', 'conf' => 'text/plain', 'cpi' => 'video/mp2t', 'cpio' => 'application/x-cpio', 'cpio.gz' => 'application/x-cpio-compressed', 'cpp' => 'text/x-c', 'cpt' => 'application/mac-compactpro', 'cr2' => 'image/x-canon-cr2', 'crd' => 'application/x-mscardfile', 'crl' => 'application/pkix-crl', 'crt' => 'application/x-x509-ca-cert', 'crw' => 'image/x-canon-crw', 'cryptonote' => 'application/vnd.rig.cryptonote', 'cs' => 'text/x-csharp', 'csh' => 'application/x-csh', 'csml' => 'chemical/x-csml', 'csp' => 'application/vnd.commonspace', 'css' => 'text/css', 'cst' => 'application/x-director', 'csv' => 'text/csv', 'cu' => 'application/cu-seeme', 'cue' => 'application/x-cue', 'cur' => 'image/x-win-bitmap', 'curl' => 'text/vnd.curl', 'cww' => 'application/prs.cww', 'cxt' => 'application/x-director', 'cxx' => 'text/x-c', 'd' => 'text/x-dsrc', 'dae' => 'model/vnd.collada+xml', 'daf' => 'application/vnd.mobius.daf', 'dar' => 'application/x-dar', 'dart' => 'application/vnd.dart', 'dataless' => 'application/vnd.fdsn.seed', 'davmount' => 'application/davmount+xml', 'dbf' => 'application/x-dbf', 'dbk' => 'application/docbook+xml', 'dc' => 'application/x-dc-rom', 'dcl' => 'text/x-dcl', 'dcm' => 'application/dicom', 'dcr' => 'application/x-director', 'dcurl' => 'text/vnd.curl.dcurl', 'dd2' => 'application/vnd.oma.dd2+xml', 'ddd' => 'application/vnd.fujixerox.ddd', 'dds' => 'image/x-dds', 'deb' => 'application/x-debian-package', 'def' => 'text/plain', 'deploy' => 'application/octet-stream', 'der' => 'application/x-x509-ca-cert', 'desktop' => 'application/x-desktop', 'dfac' => 'application/vnd.dreamfactory', 'dgc' => 'application/x-dgc-compressed', 'di' => 'text/x-dsrc', 'dia' => 'application/x-dia-diagram', 'dic' => 'text/x-c', 'diff' => 'text/diff', 'dir' => 'application/x-director', 'dis' => 'application/vnd.mobius.dis', 'dist' => 'application/octet-stream', 'distz' => 'application/octet-stream', 'divx' => 'video/x-msvideo', 'djv' => 'image/vnd.djvu', 'djvu' => 'image/vnd.djvu', 'dll' => 'application/x-msdownload', 'dmg' => 'application/x-apple-diskimage', 'dmp' => 'application/vnd.tcpdump.pcap', 'dms' => 'application/octet-stream', 'dna' => 'application/vnd.dna', 'dng' => 'image/x-adobe-dng', 'doc' => 'application/msword', 'docbook' => 'application/x-docbook+xml', 'docm' => 'application/vnd.ms-word.document.macroenabled.12', 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'dot' => 'application/msword', 'dotm' => 'application/vnd.ms-word.template.macroenabled.12', 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', 'dp' => 'application/vnd.osgi.dp', 'dpg' => 'application/vnd.dpgraph', 'dra' => 'audio/vnd.dra', 'dsc' => 'text/prs.lines.tag', 'dsl' => 'text/x-dsl', 'dssc' => 'application/dssc+der', 'dtb' => 'application/x-dtbook+xml', 'dtd' => 'application/xml-dtd', 'dts' => 'audio/vnd.dts', 'dtshd' => 'audio/vnd.dts.hd', 'dtx' => 'text/x-tex', 'dump' => 'application/octet-stream', 'dv' => 'video/dv', 'dvb' => 'video/vnd.dvb.file', 'dvi' => 'application/x-dvi', 'dvi.bz2' => 'application/x-bzdvi', 'dvi.gz' => 'application/x-gzdvi', 'dwf' => 'model/vnd.dwf', 'dwg' => 'image/vnd.dwg', 'dxf' => 'image/vnd.dxf', 'dxp' => 'application/vnd.spotfire.dxp', 'dxr' => 'application/x-director', 'e' => 'text/x-eiffel', 'ecelp4800' => 'audio/vnd.nuera.ecelp4800', 'ecelp7470' => 'audio/vnd.nuera.ecelp7470', 'ecelp9600' => 'audio/vnd.nuera.ecelp9600', 'ecma' => 'application/ecmascript', 'edm' => 'application/vnd.novadigm.edm', 'edx' => 'application/vnd.novadigm.edx', 'efif' => 'application/vnd.picsel', 'egon' => 'application/x-egon', 'ei6' => 'application/vnd.pg.osasli', 'eif' => 'text/x-eiffel', 'el' => 'text/x-emacs-lisp', 'elc' => 'application/octet-stream', 'emf' => 'application/x-msmetafile', 'eml' => 'message/rfc822', 'emma' => 'application/emma+xml', 'emp' => 'application/vnd.emusic-emusic_package', 'emz' => 'application/x-msmetafile', 'ent' => 'application/xml-external-parsed-entity', 'eol' => 'audio/vnd.digital-winds', 'eot' => 'application/vnd.ms-fontobject', 'eps' => 'application/postscript', 'eps.bz2' => 'image/x-bzeps', 'eps.gz' => 'image/x-gzeps', 'epsf' => 'image/x-eps', 'epsf.bz2' => 'image/x-bzeps', 'epsf.gz' => 'image/x-gzeps', 'epsi' => 'image/x-eps', 'epsi.bz2' => 'image/x-bzeps', 'epsi.gz' => 'image/x-gzeps', 'epub' => 'application/epub+zip', 'erl' => 'text/x-erlang', 'es' => 'application/ecmascript', 'es3' => 'application/vnd.eszigno3+xml', 'esa' => 'application/vnd.osgi.subsystem', 'esf' => 'application/vnd.epson.esf', 'et3' => 'application/vnd.eszigno3+xml', 'etheme' => 'application/x-e-theme', 'etx' => 'text/x-setext', 'eva' => 'application/x-eva', 'evy' => 'application/x-envoy', 'exe' => 'application/x-msdownload', 'exi' => 'application/exi', 'exr' => 'image/x-exr', 'ext' => 'application/vnd.novadigm.ext', 'ez' => 'application/andrew-inset', 'ez2' => 'application/vnd.ezpix-album', 'ez3' => 'application/vnd.ezpix-package', 'f' => 'text/x-fortran', 'f4a' => 'audio/mp4', 'f4b' => 'audio/x-m4b', 'f4v' => 'video/x-f4v', 'f77' => 'text/x-fortran', 'f90' => 'text/x-fortran', 'f95' => 'text/x-fortran', 'fb2' => 'application/x-fictionbook+xml', 'fb2.zip' => 'application/x-zip-compressed-fb2', 'fbs' => 'image/vnd.fastbidsheet', 'fcdt' => 'application/vnd.adobe.formscentral.fcdt', 'fcs' => 'application/vnd.isac.fcs', 'fdf' => 'application/vnd.fdf', 'fe_launch' => 'application/vnd.denovo.fcselayout-link', 'fg5' => 'application/vnd.fujitsu.oasysgp', 'fgd' => 'application/x-director', 'fh' => 'image/x-freehand', 'fh4' => 'image/x-freehand', 'fh5' => 'image/x-freehand', 'fh7' => 'image/x-freehand', 'fhc' => 'image/x-freehand', 'fig' => 'application/x-xfig', 'fits' => 'image/fits', 'fl' => 'application/x-fluid', 'flac' => 'audio/x-flac', 'flc' => 'video/x-flic', 'fli' => 'video/x-fli', 'flo' => 'application/vnd.micrografx.flo', 'flv' => 'video/x-flv', 'flw' => 'application/vnd.kde.kivio', 'flx' => 'text/vnd.fmi.flexstor', 'fly' => 'text/vnd.fly', 'fm' => 'application/vnd.framemaker', 'fnc' => 'application/vnd.frogans.fnc', 'fo' => 'text/x-xslfo', 'fodg' => 'application/vnd.oasis.opendocument.graphics-flat-xml', 'fodp' => 'application/vnd.oasis.opendocument.presentation-flat-xml', 'fods' => 'application/vnd.oasis.opendocument.spreadsheet-flat-xml', 'fodt' => 'application/vnd.oasis.opendocument.text-flat-xml', 'for' => 'text/x-fortran', 'fpx' => 'image/vnd.fpx', 'frame' => 'application/vnd.framemaker', 'fsc' => 'application/vnd.fsc.weblaunch', 'fst' => 'image/vnd.fst', 'ftc' => 'application/vnd.fluxtime.clip', 'fti' => 'application/vnd.anser-web-funds-transfer-initiation', 'fvt' => 'video/vnd.fvt', 'fxm' => 'video/x-javafx', 'fxp' => 'application/vnd.adobe.fxp', 'fxpl' => 'application/vnd.adobe.fxp', 'fzs' => 'application/vnd.fuzzysheet', 'g2w' => 'application/vnd.geoplan', 'g3' => 'image/g3fax', 'g3w' => 'application/vnd.geospace', 'gac' => 'application/vnd.groove-account', 'gam' => 'application/x-tads', 'gb' => 'application/x-gameboy-rom', 'gba' => 'application/x-gba-rom', 'gbr' => 'application/rpki-ghostbusters', 'gca' => 'application/x-gca-compressed', 'gcrd' => 'text/vcard', 'gdl' => 'model/vnd.gdl', 'ged' => 'application/x-gedcom', 'gedcom' => 'application/x-gedcom', 'gem' => 'application/x-tar', 'gen' => 'application/x-genesis-rom', 'geo' => 'application/vnd.dynageo', 'gex' => 'application/vnd.geometry-explorer', 'gf' => 'application/x-tex-gf', 'gg' => 'application/x-sms-rom', 'ggb' => 'application/vnd.geogebra.file', 'ggt' => 'application/vnd.geogebra.tool', 'ghf' => 'application/vnd.groove-help', 'gif' => 'image/gif', 'gim' => 'application/vnd.groove-identity-message', 'glade' => 'application/x-glade', 'gml' => 'application/gml+xml', 'gmo' => 'application/x-gettext-translation', 'gmx' => 'application/vnd.gmx', 'gnc' => 'application/x-gnucash', 'gnd' => 'application/gnunet-directory', 'gnucash' => 'application/x-gnucash', 'gnumeric' => 'application/x-gnumeric', 'gnuplot' => 'application/x-gnuplot', 'go' => 'text/x-go', 'gp' => 'application/x-gnuplot', 'gpg' => 'application/pgp-encrypted', 'gph' => 'application/vnd.flographit', 'gplt' => 'application/x-gnuplot', 'gpx' => 'application/gpx+xml', 'gqf' => 'application/vnd.grafeq', 'gqs' => 'application/vnd.grafeq', 'gra' => 'application/x-graphite', 'gram' => 'application/srgs', 'gramps' => 'application/x-gramps-xml', 'gre' => 'application/vnd.geometry-explorer', 'grv' => 'application/vnd.groove-injector', 'grxml' => 'application/srgs+xml', 'gsf' => 'application/x-font-ghostscript', 'gsm' => 'audio/x-gsm', 'gtar' => 'application/x-gtar', 'gtm' => 'application/vnd.groove-tool-message', 'gtw' => 'model/vnd.gtw', 'gv' => 'text/vnd.graphviz', 'gvp' => 'text/x-google-video-pointer', 'gxf' => 'application/gxf', 'gxt' => 'application/vnd.geonext', 'gz' => 'application/x-gzip', 'h' => 'text/x-c', 'h++' => 'text/x-c++hdr', 'h261' => 'video/h261', 'h263' => 'video/h263', 'h264' => 'video/h264', 'h4' => 'application/x-hdf', 'h5' => 'application/x-hdf', 'hal' => 'application/vnd.hal+xml', 'hbci' => 'application/vnd.hbci', 'hdf' => 'application/x-hdf', 'hdf4' => 'application/x-hdf', 'hdf5' => 'application/x-hdf', 'hh' => 'text/x-c', 'hlp' => 'application/winhlp', 'hp' => 'text/x-c++hdr', 'hpgl' => 'application/vnd.hp-hpgl', 'hpid' => 'application/vnd.hp-hpid', 'hpp' => 'text/x-c++hdr', 'hps' => 'application/vnd.hp-hps', 'hqx' => 'application/mac-binhex40', 'hs' => 'text/x-haskell', 'htke' => 'application/vnd.kenameaapp', 'htm' => 'text/html', 'html' => 'text/html', 'hvd' => 'application/vnd.yamaha.hv-dic', 'hvp' => 'application/vnd.yamaha.hv-voice', 'hvs' => 'application/vnd.yamaha.hv-script', 'hwp' => 'application/x-hwp', 'hwt' => 'application/x-hwt', 'hxx' => 'text/x-c++hdr', 'i2g' => 'application/vnd.intergeo', 'ica' => 'application/x-ica', 'icb' => 'image/x-tga', 'icc' => 'application/vnd.iccprofile', 'ice' => 'x-conference/x-cooltalk', 'icm' => 'application/vnd.iccprofile', 'icns' => 'image/x-icns', 'ico' => 'image/x-icon', 'ics' => 'text/calendar', 'idl' => 'text/x-idl', 'ief' => 'image/ief', 'ifb' => 'text/calendar', 'iff' => 'image/x-ilbm', 'ifm' => 'application/vnd.shana.informed.formdata', 'iges' => 'model/iges', 'igl' => 'application/vnd.igloader', 'igm' => 'application/vnd.insors.igm', 'igs' => 'model/iges', 'igx' => 'application/vnd.micrografx.igx', 'iif' => 'application/vnd.shana.informed.interchange', 'ilbm' => 'image/x-ilbm', 'ime' => 'text/x-iMelody', 'img' => 'application/x-raw-disk-image', 'img.xz' => 'application/x-raw-disk-image-xz-compressed', 'imp' => 'application/vnd.accpac.simply.imp', 'ims' => 'application/vnd.ms-ims', 'imy' => 'text/x-iMelody', 'in' => 'text/plain', 'ink' => 'application/inkml+xml', 'inkml' => 'application/inkml+xml', 'ins' => 'text/x-tex', 'install' => 'application/x-install-instructions', 'iota' => 'application/vnd.astraea-software.iota', 'ipfix' => 'application/ipfix', 'ipk' => 'application/vnd.shana.informed.package', 'iptables' => 'text/x-iptables', 'irm' => 'application/vnd.ibm.rights-management', 'irp' => 'application/vnd.irepository.package+xml', 'iso' => 'application/x-iso9660-image', 'iso9660' => 'application/x-cd-image', 'it' => 'audio/x-it', 'it87' => 'application/x-it87', 'itp' => 'application/vnd.shana.informed.formtemplate', 'ivp' => 'application/vnd.immervision-ivp', 'ivu' => 'application/vnd.immervision-ivu', 'jad' => 'text/vnd.sun.j2me.app-descriptor', 'jam' => 'application/vnd.jam', 'jar' => 'application/java-archive', 'java' => 'text/x-java-source', 'jceks' => 'application/x-java-jce-keystore', 'jisp' => 'application/vnd.jisp', 'jks' => 'application/x-java-keystore', 'jlt' => 'application/vnd.hp-jlyt', 'jng' => 'image/x-jng', 'jnlp' => 'application/x-java-jnlp-file', 'joda' => 'application/vnd.joost.joda-archive', 'jp2' => 'image/jp2', 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'jpf' => 'image/jp2', 'jpe' => 'image/jpeg', 'jpgm' => 'video/jpm', 'jpgv' => 'video/jpeg', 'jpm' => 'video/jpm', 'jpr' => 'application/x-jbuilder-project', 'jpx' => 'application/x-jbuilder-project', 'js' => 'application/javascript', 'jsm' => 'application/javascript', 'json' => 'application/json', 'jsonml' => 'application/jsonml+json', 'k25' => 'image/x-kodak-k25', 'kar' => 'audio/midi', 'karbon' => 'application/vnd.kde.karbon', 'kdc' => 'image/x-kodak-kdc', 'kdelnk' => 'application/x-desktop', 'kexi' => 'application/x-kexiproject-sqlite2', 'kexic' => 'application/x-kexi-connectiondata', 'kexis' => 'application/x-kexiproject-shortcut', 'key' => 'application/x-iwork-keynote-sffkey', 'kfo' => 'application/vnd.kde.kformula', 'kia' => 'application/vnd.kidspiration', 'kil' => 'application/x-killustrator', 'kino' => 'application/smil', 'kml' => 'application/vnd.google-earth.kml+xml', 'kmz' => 'application/vnd.google-earth.kmz', 'kne' => 'application/vnd.kinar', 'knp' => 'application/vnd.kinar', 'kon' => 'application/vnd.kde.kontour', 'kpm' => 'application/x-kpovmodeler', 'kpr' => 'application/vnd.kde.kpresenter', 'kpt' => 'application/vnd.kde.kpresenter', 'kpxx' => 'application/vnd.ds-keypoint', 'kra' => 'application/x-krita', 'ks' => 'application/x-java-keystore', 'ksp' => 'application/vnd.kde.kspread', 'ktr' => 'application/vnd.kahootz', 'ktx' => 'image/ktx', 'ktz' => 'application/vnd.kahootz', 'kud' => 'application/x-kugar', 'kwd' => 'application/vnd.kde.kword', 'kwt' => 'application/vnd.kde.kword', 'la' => 'application/x-shared-library-la', 'lasxml' => 'application/vnd.las.las+xml', 'latex' => 'application/x-latex', 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop', 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml', 'lbm' => 'image/x-ilbm', 'ldif' => 'text/x-ldif', 'les' => 'application/vnd.hhe.lesson-player', 'lha' => 'application/x-lzh-compressed', 'lhs' => 'text/x-literate-haskell', 'lhz' => 'application/x-lhz', 'link66' => 'application/vnd.route66.link66+xml', 'list' => 'text/plain', 'list3820' => 'application/vnd.ibm.modcap', 'listafp' => 'application/vnd.ibm.modcap', 'lnk' => 'application/x-ms-shortcut', 'log' => 'text/plain', 'lostxml' => 'application/lost+xml', 'lrf' => 'application/octet-stream', 'lrm' => 'application/vnd.ms-lrm', 'lrz' => 'application/x-lrzip', 'ltf' => 'application/vnd.frogans.ltf', 'ltx' => 'text/x-tex', 'lua' => 'text/x-lua', 'lvp' => 'audio/vnd.lucent.voice', 'lwo' => 'image/x-lwo', 'lwob' => 'image/x-lwo', 'lwp' => 'application/vnd.lotus-wordpro', 'lws' => 'image/x-lws', 'ly' => 'text/x-lilypond', 'lyx' => 'application/x-lyx', 'lz' => 'application/x-lzip', 'lz4' => 'application/x-lz4', 'lzh' => 'application/x-lzh-compressed', 'lzma' => 'application/x-lzma', 'lzo' => 'application/x-lzop', 'm' => 'text/x-objcsrc', 'm13' => 'application/x-msmediaview', 'm14' => 'application/x-msmediaview', 'm15' => 'audio/x-mod', 'm1u' => 'video/vnd.mpegurl', 'm1v' => 'video/mpeg', 'm21' => 'application/mp21', 'm2a' => 'audio/mpeg', 'm2t' => 'video/mp2t', 'm2ts' => 'video/mp2t', 'm2v' => 'video/mpeg', 'm3a' => 'audio/mpeg', 'm3u' => 'audio/x-mpegurl', 'm3u8' => 'application/vnd.apple.mpegurl', 'm4' => 'application/x-m4', 'm4a' => 'audio/mp4', 'm4b' => 'audio/x-m4b', 'm4u' => 'video/vnd.mpegurl', 'm4v' => 'video/x-m4v', 'ma' => 'application/mathematica', 'mab' => 'application/x-markaby', 'mads' => 'application/mads+xml', 'mag' => 'application/vnd.ecowin.chart', 'mak' => 'text/x-makefile', 'maker' => 'application/vnd.framemaker', 'man' => 'text/troff', 'manifest' => 'text/cache-manifest', 'mar' => 'application/octet-stream', 'markdown' => 'text/x-markdown', 'mathml' => 'application/mathml+xml', 'mb' => 'application/mathematica', 'mbk' => 'application/vnd.mobius.mbk', 'mbox' => 'application/mbox', 'mc1' => 'application/vnd.medcalcdata', 'mcd' => 'application/vnd.mcd', 'mcurl' => 'text/vnd.curl.mcurl', 'md' => 'text/x-markdown', 'mdb' => 'application/x-msaccess', 'mdi' => 'image/vnd.ms-modi', 'me' => 'text/troff', 'med' => 'audio/x-mod', 'mesh' => 'model/mesh', 'meta4' => 'application/metalink4+xml', 'metalink' => 'application/metalink+xml', 'mets' => 'application/mets+xml', 'mfm' => 'application/vnd.mfmp', 'mft' => 'application/rpki-manifest', 'mgp' => 'application/vnd.osgeo.mapguide.package', 'mgz' => 'application/vnd.proteus.magazine', 'mht' => 'application/x-mimearchive', 'mhtml' => 'application/x-mimearchive', 'mid' => 'audio/midi', 'midi' => 'audio/midi', 'mie' => 'application/x-mie', 'mif' => 'application/vnd.mif', 'mime' => 'message/rfc822', 'minipsf' => 'audio/x-minipsf', 'mj2' => 'video/mj2', 'mjp2' => 'video/mj2', 'mk' => 'text/x-makefile', 'mk3d' => 'video/x-matroska', 'mka' => 'audio/x-matroska', 'mkd' => 'text/x-markdown', 'mks' => 'video/x-matroska', 'mkv' => 'video/x-matroska', 'ml' => 'text/x-ocaml', 'mli' => 'text/x-ocaml', 'mlp' => 'application/vnd.dolby.mlp', 'mm' => 'text/x-troff-mm', 'mmd' => 'application/vnd.chipnuts.karaoke-mmd', 'mmf' => 'application/vnd.smaf', 'mml' => 'application/mathml+xml', 'mmr' => 'image/vnd.fujixerox.edmics-mmr', 'mng' => 'video/x-mng', 'mny' => 'application/x-msmoney', 'mo' => 'application/x-gettext-translation', 'mo3' => 'audio/x-mo3', 'mobi' => 'application/x-mobipocket-ebook', 'moc' => 'text/x-moc', 'mod' => 'audio/x-mod', 'mods' => 'application/mods+xml', 'mof' => 'text/x-mof', 'moov' => 'video/quicktime', 'mov' => 'video/quicktime', 'movie' => 'video/x-sgi-movie', 'mp+' => 'audio/x-musepack', 'mp2' => 'audio/mpeg', 'mp21' => 'application/mp21', 'mp2a' => 'audio/mpeg', 'mp3' => 'audio/mpeg', 'mp4' => 'video/mp4', 'mp4a' => 'audio/mp4', 'mp4s' => 'application/mp4', 'mp4v' => 'video/mp4', 'mpc' => 'application/vnd.mophun.certificate', 'mpe' => 'video/mpeg', 'mpeg' => 'video/mpeg', 'mpg' => 'video/mpeg', 'mpg4' => 'video/mp4', 'mpga' => 'audio/mpeg', 'mpkg' => 'application/vnd.apple.installer+xml', 'mpl' => 'video/mp2t', 'mpls' => 'video/mp2t', 'mpm' => 'application/vnd.blueice.multipass', 'mpn' => 'application/vnd.mophun.application', 'mpp' => 'application/vnd.ms-project', 'mpt' => 'application/vnd.ms-project', 'mpy' => 'application/vnd.ibm.minipay', 'mqy' => 'application/vnd.mobius.mqy', 'mrc' => 'application/marc', 'mrcx' => 'application/marcxml+xml', 'mrl' => 'text/x-mrml', 'mrml' => 'text/x-mrml', 'mrw' => 'image/x-minolta-mrw', 'ms' => 'text/troff', 'mscml' => 'application/mediaservercontrol+xml', 'mseed' => 'application/vnd.fdsn.mseed', 'mseq' => 'application/vnd.mseq', 'msf' => 'application/vnd.epson.msf', 'msh' => 'model/mesh', 'msi' => 'application/x-msdownload', 'msl' => 'application/vnd.mobius.msl', 'msod' => 'image/x-msod', 'msty' => 'application/vnd.muvee.style', 'msx' => 'application/x-msx-rom', 'mtm' => 'audio/x-mod', 'mts' => 'model/vnd.mts', 'mup' => 'text/x-mup', 'mus' => 'application/vnd.musician', 'musicxml' => 'application/vnd.recordare.musicxml+xml', 'mvb' => 'application/x-msmediaview', 'mwf' => 'application/vnd.mfer', 'mxf' => 'application/mxf', 'mxl' => 'application/vnd.recordare.musicxml', 'mxml' => 'application/xv+xml', 'mxs' => 'application/vnd.triscape.mxs', 'mxu' => 'video/vnd.mpegurl', 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install', 'n3' => 'text/n3', 'n64' => 'application/x-n64-rom', 'nb' => 'application/mathematica', 'nbp' => 'application/vnd.wolfram.player', 'nc' => 'application/x-netcdf', 'ncx' => 'application/x-dtbncx+xml', 'nds' => 'application/x-nintendo-ds-rom', 'nef' => 'image/x-nikon-nef', 'nes' => 'application/x-nes-rom', 'nfo' => 'text/x-nfo', 'ngdat' => 'application/vnd.nokia.n-gage.data', 'nitf' => 'application/vnd.nitf', 'nlu' => 'application/vnd.neurolanguage.nlu', 'nml' => 'application/vnd.enliven', 'nnd' => 'application/vnd.noblenet-directory', 'nns' => 'application/vnd.noblenet-sealer', 'nnw' => 'application/vnd.noblenet-web', 'not' => 'text/x-mup', 'npx' => 'image/vnd.net-fpx', 'nsc' => 'application/x-conference', 'nsf' => 'application/vnd.lotus-notes', 'nsv' => 'video/x-nsv', 'ntf' => 'application/vnd.nitf', 'nzb' => 'application/x-nzb', 'o' => 'application/x-object', 'oa2' => 'application/vnd.fujitsu.oasys2', 'oa3' => 'application/vnd.fujitsu.oasys3', 'oas' => 'application/vnd.fujitsu.oasys', 'obd' => 'application/x-msbinder', 'obj' => 'application/x-tgif', 'ocl' => 'text/x-ocl', 'oda' => 'application/oda', 'odb' => 'application/vnd.oasis.opendocument.database', 'odc' => 'application/vnd.oasis.opendocument.chart', 'odf' => 'application/vnd.oasis.opendocument.formula', 'odft' => 'application/vnd.oasis.opendocument.formula-template', 'odg' => 'application/vnd.oasis.opendocument.graphics', 'odi' => 'application/vnd.oasis.opendocument.image', 'odm' => 'application/vnd.oasis.opendocument.text-master', 'odp' => 'application/vnd.oasis.opendocument.presentation', 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', 'odt' => 'application/vnd.oasis.opendocument.text', 'oga' => 'audio/ogg', 'ogg' => 'audio/ogg', 'ogm' => 'video/x-ogm+ogg', 'ogv' => 'video/ogg', 'ogx' => 'application/ogg', 'old' => 'application/x-trash', 'oleo' => 'application/x-oleo', 'omdoc' => 'application/omdoc+xml', 'onepkg' => 'application/onenote', 'onetmp' => 'application/onenote', 'onetoc' => 'application/onenote', 'onetoc2' => 'application/onenote', 'ooc' => 'text/x-ooc', 'oot' => 'application/vnd.oasis.opendocument.text', 'opf' => 'application/oebps-package+xml', 'opml' => 'text/x-opml', 'oprc' => 'application/vnd.palm', 'opus' => 'audio/ogg', 'ora' => 'image/openraster', 'orf' => 'image/x-olympus-orf', 'org' => 'application/vnd.lotus-organizer', 'osf' => 'application/vnd.yamaha.openscoreformat', 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml', 'otc' => 'application/vnd.oasis.opendocument.chart-template', 'otf' => 'application/x-font-otf', 'otg' => 'application/vnd.oasis.opendocument.graphics-template', 'oth' => 'application/vnd.oasis.opendocument.text-web', 'oti' => 'application/vnd.oasis.opendocument.image-template', 'otp' => 'application/vnd.oasis.opendocument.presentation-template', 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', 'ott' => 'application/vnd.oasis.opendocument.text-template', 'owl' => 'application/rdf+xml', 'oxps' => 'application/oxps', 'oxt' => 'application/vnd.openofficeorg.extension', 'p' => 'text/x-pascal', 'p10' => 'application/pkcs10', 'p12' => 'application/x-pkcs12', 'p7b' => 'application/x-pkcs7-certificates', 'p7c' => 'application/pkcs7-mime', 'p7m' => 'application/pkcs7-mime', 'p7r' => 'application/x-pkcs7-certreqresp', 'p7s' => 'application/pkcs7-signature', 'p8' => 'application/pkcs8', 'pack' => 'application/x-java-pack200', 'pak' => 'application/x-pak', 'par2' => 'application/x-par2', 'pas' => 'text/x-pascal', 'patch' => 'text/diff', 'paw' => 'application/vnd.pawaafile', 'pbd' => 'application/vnd.powerbuilder6', 'pbm' => 'image/x-portable-bitmap', 'pcap' => 'application/vnd.tcpdump.pcap', 'pcd' => 'image/x-photo-cd', 'pce' => 'application/x-pc-engine-rom', 'pcf' => 'application/x-font-pcf', 'pcf.gz' => 'application/x-font-pcf', 'pcf.z' => 'application/x-font-pcf', 'pcl' => 'application/vnd.hp-pcl', 'pclxl' => 'application/vnd.hp-pclxl', 'pct' => 'image/x-pict', 'pcurl' => 'application/vnd.curl.pcurl', 'pcx' => 'image/x-pcx', 'pdb' => 'application/vnd.palm', 'pdc' => 'application/x-aportisdoc', 'pdf' => 'application/pdf', 'pdf.bz2' => 'application/x-bzpdf', 'pdf.gz' => 'application/x-gzpdf', 'pdf.xz' => 'application/x-xzpdf', 'pef' => 'image/x-pentax-pef', 'pem' => 'application/x-x509-ca-cert', 'perl' => 'application/x-perl', 'pfa' => 'application/x-font-type1', 'pfb' => 'application/x-font-type1', 'pfm' => 'application/x-font-type1', 'pfr' => 'application/font-tdpfr', 'pfx' => 'application/x-pkcs12', 'pgm' => 'image/x-portable-graymap', 'pgn' => 'application/x-chess-pgn', 'pgp' => 'application/pgp-encrypted', 'php' => 'application/x-httpd-php', 'php3' => 'application/x-httpd-php3', 'php4' => 'application/x-php', 'php5' => 'application/x-php', 'phps' => 'application/x-php', 'pic' => 'image/x-pict', 'pict' => 'image/x-pict', 'pict1' => 'image/x-pict', 'pict2' => 'image/x-pict', 'pk' => 'application/x-tex-pk', 'pkg' => 'application/octet-stream', 'pki' => 'application/pkixcmp', 'pkipath' => 'application/pkix-pkipath', 'pkr' => 'application/pgp-keys', 'pl' => 'application/x-perl', 'pla' => 'audio/x-iriver-pla', 'plb' => 'application/vnd.3gpp.pic-bw-large', 'plc' => 'application/vnd.mobius.plc', 'plf' => 'application/vnd.pocketlearn', 'pln' => 'application/x-planperfect', 'pls' => 'application/pls+xml', 'pm' => 'application/x-perl', 'pml' => 'application/vnd.ctc-posml', 'png' => 'image/png', 'pnm' => 'image/x-portable-anymap', 'pntg' => 'image/x-macpaint', 'po' => 'text/plain', 'pod' => 'application/x-perl', 'por' => 'application/x-spss-por', 'portpkg' => 'application/vnd.macports.portpkg', 'pot' => 'application/vnd.ms-powerpoint', 'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12', 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', 'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12', 'ppd' => 'application/vnd.cups-ppd', 'ppm' => 'image/x-portable-pixmap', 'pps' => 'application/vnd.ms-powerpoint', 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', 'ppt' => 'application/vnd.ms-powerpoint', 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12', 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'ppz' => 'application/vnd.ms-powerpoint', 'pqa' => 'application/vnd.palm', 'prc' => 'application/x-mobipocket-ebook', 'pre' => 'application/vnd.lotus-freelance', 'prf' => 'application/pics-rules', 'ps' => 'application/postscript', 'ps.bz2' => 'application/x-bzpostscript', 'ps.gz' => 'application/x-gzpostscript', 'psb' => 'application/vnd.3gpp.pic-bw-small', 'psd' => 'image/vnd.adobe.photoshop', 'psf' => 'application/x-font-linux-psf', 'psf.gz' => 'application/x-gz-font-linux-psf', 'psflib' => 'audio/x-psflib', 'psid' => 'audio/prs.sid', 'pskcxml' => 'application/pskc+xml', 'psw' => 'application/x-pocket-word', 'ptid' => 'application/vnd.pvi.ptid1', 'pub' => 'application/x-mspublisher', 'pvb' => 'application/vnd.3gpp.pic-bw-var', 'pw' => 'application/x-pw', 'pwn' => 'application/vnd.3m.post-it-notes', 'py' => 'text/x-python', 'pya' => 'audio/vnd.ms-playready.media.pya', 'pyc' => 'application/x-python-bytecode', 'pyo' => 'application/x-python-bytecode', 'pyv' => 'video/vnd.ms-playready.media.pyv', 'pyx' => 'text/x-python', 'qam' => 'application/vnd.epson.quickanime', 'qbo' => 'application/vnd.intu.qbo', 'qfx' => 'application/vnd.intu.qfx', 'qif' => 'application/x-qw', 'qml' => 'text/x-qml', 'qps' => 'application/vnd.publishare-delta-tree', 'qt' => 'video/quicktime', 'qti' => 'application/x-qtiplot', 'qti.gz' => 'application/x-qtiplot', 'qtif' => 'image/x-quicktime', 'qtl' => 'application/x-quicktime-media-link', 'qtvr' => 'video/quicktime', 'qwd' => 'application/vnd.quark.quarkxpress', 'qwt' => 'application/vnd.quark.quarkxpress', 'qxb' => 'application/vnd.quark.quarkxpress', 'qxd' => 'application/vnd.quark.quarkxpress', 'qxl' => 'application/vnd.quark.quarkxpress', 'qxt' => 'application/vnd.quark.quarkxpress', 'ra' => 'audio/x-pn-realaudio', 'raf' => 'image/x-fuji-raf', 'ram' => 'audio/x-pn-realaudio', 'rar' => 'application/x-rar-compressed', 'ras' => 'image/x-cmu-raster', 'raw' => 'image/x-panasonic-raw', 'raw-disk-image' => 'application/x-raw-disk-image', 'raw-disk-image.xz' => 'application/x-raw-disk-image-xz-compressed', 'rax' => 'audio/vnd.rn-realaudio', 'rb' => 'application/x-ruby', 'rcprofile' => 'application/vnd.ipunplugged.rcprofile', 'rdf' => 'application/rdf+xml', 'rdfs' => 'application/rdf+xml', 'rdz' => 'application/vnd.data-vision.rdz', 'reg' => 'text/x-ms-regedit', 'rej' => 'text/x-reject', 'rep' => 'application/vnd.businessobjects', 'res' => 'application/x-dtbresource+xml', 'rgb' => 'image/x-rgb', 'rif' => 'application/reginfo+xml', 'rip' => 'audio/vnd.rip', 'ris' => 'application/x-research-info-systems', 'rl' => 'application/resource-lists+xml', 'rlc' => 'image/vnd.fujixerox.edmics-rlc', 'rld' => 'application/resource-lists-diff+xml', 'rle' => 'image/rle', 'rm' => 'application/vnd.rn-realmedia', 'rmi' => 'audio/midi', 'rmj' => 'application/vnd.rn-realmedia', 'rmm' => 'application/vnd.rn-realmedia', 'rmp' => 'audio/x-pn-realaudio-plugin', 'rms' => 'application/vnd.jcp.javame.midlet-rms', 'rmvb' => 'application/vnd.rn-realmedia-vbr', 'rmx' => 'application/vnd.rn-realmedia', 'rnc' => 'application/relax-ng-compact-syntax', 'rng' => 'application/xml', 'roa' => 'application/rpki-roa', 'roff' => 'text/troff', 'rp' => 'image/vnd.rn-realpix', 'rp9' => 'application/vnd.cloanto.rp9', 'rpm' => 'application/x-rpm', 'rpss' => 'application/vnd.nokia.radio-presets', 'rpst' => 'application/vnd.nokia.radio-preset', 'rq' => 'application/sparql-query', 'rs' => 'application/rls-services+xml', 'rsd' => 'application/rsd+xml', 'rss' => 'application/rss+xml', 'rt' => 'text/vnd.rn-realtext', 'rtf' => 'application/rtf', 'rtx' => 'text/richtext', 'rv' => 'video/vnd.rn-realvideo', 'rvx' => 'video/vnd.rn-realvideo', 'rw2' => 'image/x-panasonic-raw2', 's' => 'text/x-asm', 's3m' => 'audio/s3m', 'saf' => 'application/vnd.yamaha.smaf-audio', 'sam' => 'application/x-amipro', 'sami' => 'application/x-sami', 'sav' => 'application/x-spss-sav', 'sbml' => 'application/sbml+xml', 'sc' => 'application/vnd.ibm.secure-container', 'scala' => 'text/x-scala', 'scd' => 'application/x-msschedule', 'scm' => 'application/vnd.lotus-screencam', 'scq' => 'application/scvp-cv-request', 'scs' => 'application/scvp-cv-response', 'scurl' => 'text/vnd.curl.scurl', 'sda' => 'application/vnd.stardivision.draw', 'sdc' => 'application/vnd.stardivision.calc', 'sdd' => 'application/vnd.stardivision.impress', 'sdkd' => 'application/vnd.solent.sdkm+xml', 'sdkm' => 'application/vnd.solent.sdkm+xml', 'sdp' => 'application/sdp', 'sds' => 'application/vnd.stardivision.chart', 'sdw' => 'application/vnd.stardivision.writer', 'see' => 'application/vnd.seemail', 'seed' => 'application/vnd.fdsn.seed', 'sema' => 'application/vnd.sema', 'semd' => 'application/vnd.semd', 'semf' => 'application/vnd.semf', 'ser' => 'application/java-serialized-object', 'setpay' => 'application/set-payment-initiation', 'setreg' => 'application/set-registration-initiation', 'sfc' => 'application/vnd.nintendo.snes.rom', 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data', 'sfs' => 'application/vnd.spotfire.sfs', 'sfv' => 'text/x-sfv', 'sgf' => 'application/x-go-sgf', 'sgi' => 'image/sgi', 'sgl' => 'application/vnd.stardivision.writer-global', 'sgm' => 'text/sgml', 'sgml' => 'text/sgml', 'sh' => 'application/x-sh', 'shape' => 'application/x-dia-shape', 'shar' => 'application/x-shar', 'shf' => 'application/shf+xml', 'shn' => 'application/x-shorten', 'shtml' => 'text/html', 'siag' => 'application/x-siag', 'sid' => 'image/x-mrsid-image', 'sig' => 'application/pgp-signature', 'sik' => 'application/x-trash', 'sil' => 'audio/silk', 'silo' => 'model/mesh', 'sis' => 'application/vnd.symbian.install', 'sisx' => 'application/vnd.symbian.install', 'sit' => 'application/x-stuffit', 'sitx' => 'application/x-stuffitx', 'siv' => 'application/sieve', 'sk' => 'image/x-skencil', 'sk1' => 'image/x-skencil', 'skd' => 'application/vnd.koan', 'skm' => 'application/vnd.koan', 'skp' => 'application/vnd.koan', 'skr' => 'application/pgp-keys', 'skt' => 'application/vnd.koan', 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12', 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', 'slk' => 'text/spreadsheet', 'slt' => 'application/vnd.epson.salt', 'sm' => 'application/vnd.stepmania.stepchart', 'smaf' => 'application/x-smaf', 'smc' => 'application/vnd.nintendo.snes.rom', 'smd' => 'application/vnd.stardivision.mail', 'smf' => 'application/vnd.stardivision.math', 'smi' => 'application/smil+xml', 'smil' => 'application/smil+xml', 'sml' => 'application/smil', 'sms' => 'application/x-sms-rom', 'smv' => 'video/x-smv', 'smzip' => 'application/vnd.stepmania.package', 'snd' => 'audio/basic', 'snf' => 'application/x-font-snf', 'so' => 'application/octet-stream', 'spc' => 'application/x-pkcs7-certificates', 'spd' => 'application/x-font-speedo', 'spec' => 'text/x-rpm-spec', 'spf' => 'application/vnd.yamaha.smaf-phrase', 'spl' => 'application/x-futuresplash', 'spm' => 'application/x-source-rpm', 'spot' => 'text/vnd.in3d.spot', 'spp' => 'application/scvp-vp-response', 'spq' => 'application/scvp-vp-request', 'spx' => 'audio/ogg', 'sql' => 'application/x-sql', 'sr2' => 'image/x-sony-sr2', 'src' => 'application/x-wais-source', 'src.rpm' => 'application/x-source-rpm', 'srf' => 'image/x-sony-srf', 'srt' => 'application/x-subrip', 'sru' => 'application/sru+xml', 'srx' => 'application/sparql-results+xml', 'ss' => 'text/x-scheme', 'ssa' => 'text/x-ssa', 'ssdl' => 'application/ssdl+xml', 'sse' => 'application/vnd.kodak-descriptor', 'ssf' => 'application/vnd.epson.ssf', 'ssml' => 'application/ssml+xml', 'st' => 'application/vnd.sailingtracker.track', 'stc' => 'application/vnd.sun.xml.calc.template', 'std' => 'application/vnd.sun.xml.draw.template', 'stf' => 'application/vnd.wt.stf', 'sti' => 'application/vnd.sun.xml.impress.template', 'stk' => 'application/hyperstudio', 'stl' => 'application/vnd.ms-pki.stl', 'stm' => 'audio/x-stm', 'str' => 'application/vnd.pg.format', 'stw' => 'application/vnd.sun.xml.writer.template', 'sty' => 'text/x-tex', 'sub' => 'text/vnd.dvb.subtitle', 'sun' => 'image/x-sun-raster', 'sus' => 'application/vnd.sus-calendar', 'susp' => 'application/vnd.sus-calendar', 'sv' => 'text/x-svsrc', 'sv4cpio' => 'application/x-sv4cpio', 'sv4crc' => 'application/x-sv4crc', 'svc' => 'application/vnd.dvb.service', 'svd' => 'application/vnd.svd', 'svg' => 'image/svg+xml', 'svgz' => 'image/svg+xml', 'svh' => 'text/x-svhdr', 'swa' => 'application/x-director', 'swf' => 'application/x-shockwave-flash', 'swi' => 'application/vnd.aristanetworks.swi', 'swm' => 'application/x-ms-wim', 'sxc' => 'application/vnd.sun.xml.calc', 'sxd' => 'application/vnd.sun.xml.draw', 'sxg' => 'application/vnd.sun.xml.writer.global', 'sxi' => 'application/vnd.sun.xml.impress', 'sxm' => 'application/vnd.sun.xml.math', 'sxw' => 'application/vnd.sun.xml.writer', 'sylk' => 'text/spreadsheet', 't' => 'text/troff', 't2t' => 'text/x-txt2tags', 't3' => 'application/x-t3vm-image', 'taglet' => 'application/vnd.mynfc', 'tao' => 'application/vnd.tao.intent-module-archive', 'tar' => 'application/x-tar', 'tar.bz' => 'application/x-bzip-compressed-tar', 'tar.bz2' => 'application/x-bzip-compressed-tar', 'tar.gz' => 'application/x-compressed-tar', 'tar.lrz' => 'application/x-lrzip-compressed-tar', 'tar.lzma' => 'application/x-lzma-compressed-tar', 'tar.lzo' => 'application/x-tzo', 'tar.xz' => 'application/x-xz-compressed-tar', 'tar.z' => 'application/x-tarz', 'taz' => 'application/x-tarz', 'tb2' => 'application/x-bzip-compressed-tar', 'tbz' => 'application/x-bzip-compressed-tar', 'tbz2' => 'application/x-bzip-compressed-tar', 'tcap' => 'application/vnd.3gpp2.tcap', 'tcl' => 'application/x-tcl', 'teacher' => 'application/vnd.smart.teacher', 'tei' => 'application/tei+xml', 'teicorpus' => 'application/tei+xml', 'tex' => 'application/x-tex', 'texi' => 'application/x-texinfo', 'texinfo' => 'application/x-texinfo', 'text' => 'text/plain', 'tfi' => 'application/thraud+xml', 'tfm' => 'application/x-tex-tfm', 'tga' => 'image/x-tga', 'tgz' => 'application/x-gtar', 'theme' => 'application/x-theme', 'themepack' => 'application/x-windows-themepack', 'thmx' => 'application/vnd.ms-officetheme', 'tif' => 'image/tiff', 'tiff' => 'image/tiff', 'tk' => 'text/x-tcl', 'tlrz' => 'application/x-lrzip-compressed-tar', 'tlz' => 'application/x-lzma-compressed-tar', 'tmo' => 'application/vnd.tmobile-livetv', 'tnef' => 'application/vnd.ms-tnef', 'tnf' => 'application/vnd.ms-tnef', 'toc' => 'application/x-cdrdao-toc', 'torrent' => 'application/x-bittorrent', 'tpic' => 'image/x-tga', 'tpl' => 'application/vnd.groove-tool-template', 'tpt' => 'application/vnd.trid.tpt', 'tr' => 'text/troff', 'tra' => 'application/vnd.trueapp', 'trig' => 'application/x-trig', 'trm' => 'application/x-msterminal', 'ts' => 'text/vnd.trolltech.linguist', 'tsd' => 'application/timestamped-data', 'tsv' => 'text/tab-separated-values', 'tta' => 'audio/x-tta', 'ttc' => 'application/x-font-ttf', 'ttf' => 'application/x-font-ttf', 'ttl' => 'text/turtle', 'ttx' => 'application/x-font-ttx', 'twd' => 'application/vnd.simtech-mindmapper', 'twds' => 'application/vnd.simtech-mindmapper', 'txd' => 'application/vnd.genomatix.tuxedo', 'txf' => 'application/vnd.mobius.txf', 'txt' => 'text/plain', 'txz' => 'application/x-xz-compressed-tar', 'tzo' => 'application/x-tzo', 'u32' => 'application/x-authorware-bin', 'udeb' => 'application/x-debian-package', 'ufd' => 'application/vnd.ufdl', 'ufdl' => 'application/vnd.ufdl', 'ufraw' => 'application/x-ufraw', 'ui' => 'application/x-designer', 'uil' => 'text/x-uil', 'ult' => 'audio/x-mod', 'ulx' => 'application/x-glulx', 'umj' => 'application/vnd.umajin', 'uni' => 'audio/x-mod', 'unityweb' => 'application/vnd.unity', 'uoml' => 'application/vnd.uoml+xml', 'uri' => 'text/uri-list', 'uris' => 'text/uri-list', 'url' => 'application/x-mswinurl', 'urls' => 'text/uri-list', 'ustar' => 'application/x-ustar', 'utz' => 'application/vnd.uiq.theme', 'uu' => 'text/x-uuencode', 'uue' => 'text/x-uuencode', 'uva' => 'audio/vnd.dece.audio', 'uvd' => 'application/vnd.dece.data', 'uvf' => 'application/vnd.dece.data', 'uvg' => 'image/vnd.dece.graphic', 'uvh' => 'video/vnd.dece.hd', 'uvi' => 'image/vnd.dece.graphic', 'uvm' => 'video/vnd.dece.mobile', 'uvp' => 'video/vnd.dece.pd', 'uvs' => 'video/vnd.dece.sd', 'uvt' => 'application/vnd.dece.ttml+xml', 'uvu' => 'video/vnd.uvvu.mp4', 'uvv' => 'video/vnd.dece.video', 'uvva' => 'audio/vnd.dece.audio', 'uvvd' => 'application/vnd.dece.data', 'uvvf' => 'application/vnd.dece.data', 'uvvg' => 'image/vnd.dece.graphic', 'uvvh' => 'video/vnd.dece.hd', 'uvvi' => 'image/vnd.dece.graphic', 'uvvm' => 'video/vnd.dece.mobile', 'uvvp' => 'video/vnd.dece.pd', 'uvvs' => 'video/vnd.dece.sd', 'uvvt' => 'application/vnd.dece.ttml+xml', 'uvvu' => 'video/vnd.uvvu.mp4', 'uvvv' => 'video/vnd.dece.video', 'uvvx' => 'application/vnd.dece.unspecified', 'uvvz' => 'application/vnd.dece.zip', 'uvx' => 'application/vnd.dece.unspecified', 'uvz' => 'application/vnd.dece.zip', 'v' => 'text/x-verilog', 'vala' => 'text/x-vala', 'vapi' => 'text/x-vala', 'vcard' => 'text/vcard', 'vcd' => 'application/x-cdlink', 'vcf' => 'text/x-vcard', 'vcg' => 'application/vnd.groove-vcard', 'vcs' => 'text/calendar', 'vct' => 'text/vcard', 'vcx' => 'application/vnd.vcx', 'vda' => 'image/x-tga', 'vfb' => 'text/calendar', 'vhd' => 'text/x-vhdl', 'vhdl' => 'text/x-vhdl', 'vis' => 'application/vnd.visionary', 'viv' => 'video/vnd.vivo', 'vivo' => 'video/vivo', 'vlc' => 'audio/x-mpegurl', 'vob' => 'video/x-ms-vob', 'voc' => 'audio/x-voc', 'vor' => 'application/vnd.stardivision.writer', 'vox' => 'application/x-authorware-bin', 'vrm' => 'model/vrml', 'vrml' => 'model/vrml', 'vsd' => 'application/vnd.visio', 'vsf' => 'application/vnd.vsf', 'vss' => 'application/vnd.visio', 'vst' => 'application/vnd.visio', 'vsw' => 'application/vnd.visio', 'vtt' => 'text/vtt', 'vtu' => 'model/vnd.vtu', 'vxml' => 'application/voicexml+xml', 'w3d' => 'application/x-director', 'wad' => 'application/x-doom', 'wav' => 'audio/x-wav', 'wax' => 'audio/x-ms-wax', 'wb1' => 'application/x-quattropro', 'wb2' => 'application/x-quattropro', 'wb3' => 'application/x-quattropro', 'wbmp' => 'image/vnd.wap.wbmp', 'wbs' => 'application/vnd.criticaltools.wbs+xml', 'wbxml' => 'application/vnd.wap.wbxml', 'wcm' => 'application/vnd.ms-works', 'wdb' => 'application/vnd.ms-works', 'wdp' => 'image/vnd.ms-photo', 'weba' => 'audio/webm', 'webm' => 'video/webm', 'webp' => 'image/webp', 'wg' => 'application/vnd.pmi.widget', 'wgt' => 'application/widget', 'wim' => 'application/x-ms-wim', 'wk1' => 'application/vnd.lotus-1-2-3', 'wk3' => 'application/vnd.lotus-1-2-3', 'wk4' => 'application/vnd.lotus-1-2-3', 'wks' => 'application/vnd.ms-works', 'wm' => 'video/x-ms-wm', 'wma' => 'audio/x-ms-wma', 'wmd' => 'application/x-ms-wmd', 'wmf' => 'application/x-msmetafile', 'wml' => 'text/vnd.wap.wml', 'wmlc' => 'application/vnd.wap.wmlc', 'wmls' => 'text/vnd.wap.wmlscript', 'wmlsc' => 'application/vnd.wap.wmlscriptc', 'wmv' => 'video/x-ms-wmv', 'wmx' => 'video/x-ms-wmx', 'wmz' => 'application/x-ms-wmz', 'woff' => 'application/font-woff', 'wp' => 'application/vnd.wordperfect', 'wp4' => 'application/vnd.wordperfect', 'wp5' => 'application/vnd.wordperfect', 'wp6' => 'application/vnd.wordperfect', 'wpd' => 'application/vnd.wordperfect', 'wpg' => 'application/x-wpg', 'wpl' => 'application/vnd.ms-wpl', 'wpp' => 'application/vnd.wordperfect', 'wps' => 'application/vnd.ms-works', 'wqd' => 'application/vnd.wqd', 'wri' => 'application/x-mswrite', 'wrl' => 'model/vrml', 'wsdl' => 'application/wsdl+xml', 'wsgi' => 'text/x-python', 'wspolicy' => 'application/wspolicy+xml', 'wtb' => 'application/vnd.webturbo', 'wv' => 'audio/x-wavpack', 'wvc' => 'audio/x-wavpack-correction', 'wvp' => 'audio/x-wavpack', 'wvx' => 'video/x-ms-wvx', 'wwf' => 'application/x-wwf', 'x32' => 'application/x-authorware-bin', 'x3d' => 'model/x3d+xml', 'x3db' => 'model/x3d+binary', 'x3dbz' => 'model/x3d+binary', 'x3dv' => 'model/x3d+vrml', 'x3dvz' => 'model/x3d+vrml', 'x3dz' => 'model/x3d+xml', 'x3f' => 'image/x-sigma-x3f', 'xac' => 'application/x-gnucash', 'xaml' => 'application/xaml+xml', 'xap' => 'application/x-silverlight-app', 'xar' => 'application/vnd.xara', 'xbap' => 'application/x-ms-xbap', 'xbd' => 'application/vnd.fujixerox.docuworks.binder', 'xbel' => 'application/x-xbel', 'xbl' => 'application/xml', 'xbm' => 'image/x-xbitmap', 'xcf' => 'image/x-xcf', 'xcf.bz2' => 'image/x-compressed-xcf', 'xcf.gz' => 'image/x-compressed-xcf', 'xdf' => 'application/xcap-diff+xml', 'xdm' => 'application/vnd.syncml.dm+xml', 'xdp' => 'application/vnd.adobe.xdp+xml', 'xdssc' => 'application/dssc+xml', 'xdw' => 'application/vnd.fujixerox.docuworks', 'xenc' => 'application/xenc+xml', 'xer' => 'application/patch-ops-error+xml', 'xfdf' => 'application/vnd.adobe.xfdf', 'xfdl' => 'application/vnd.xfdl', 'xht' => 'application/xhtml+xml', 'xhtml' => 'application/xhtml+xml', 'xhvml' => 'application/xv+xml', 'xi' => 'audio/x-xi', 'xif' => 'image/vnd.xiff', 'xla' => 'application/vnd.ms-excel', 'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12', 'xlc' => 'application/vnd.ms-excel', 'xld' => 'application/vnd.ms-excel', 'xlf' => 'application/x-xliff+xml', 'xliff' => 'application/x-xliff', 'xll' => 'application/vnd.ms-excel', 'xlm' => 'application/vnd.ms-excel', 'xlr' => 'application/vnd.ms-works', 'xls' => 'application/vnd.ms-excel', 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12', 'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12', 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'xlt' => 'application/vnd.ms-excel', 'xltm' => 'application/vnd.ms-excel.template.macroenabled.12', 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', 'xlw' => 'application/vnd.ms-excel', 'xm' => 'audio/xm', 'xmf' => 'audio/x-xmf', 'xmi' => 'text/x-xmi', 'xml' => 'application/xml', 'xo' => 'application/vnd.olpc-sugar', 'xop' => 'application/xop+xml', 'xpi' => 'application/x-xpinstall', 'xpl' => 'application/xproc+xml', 'xpm' => 'image/x-xpixmap', 'xpr' => 'application/vnd.is-xpr', 'xps' => 'application/vnd.ms-xpsdocument', 'xpw' => 'application/vnd.intercon.formnet', 'xpx' => 'application/vnd.intercon.formnet', 'xsd' => 'application/xml', 'xsl' => 'application/xml', 'xslfo' => 'text/x-xslfo', 'xslt' => 'application/xslt+xml', 'xsm' => 'application/vnd.syncml+xml', 'xspf' => 'application/xspf+xml', 'xul' => 'application/vnd.mozilla.xul+xml', 'xvm' => 'application/xv+xml', 'xvml' => 'application/xv+xml', 'xwd' => 'image/x-xwindowdump', 'xyz' => 'chemical/x-xyz', 'xz' => 'application/x-xz', 'yaml' => 'application/x-yaml', 'yang' => 'application/yang', 'yin' => 'application/yin+xml', 'yml' => 'application/x-yaml', 'z' => 'application/x-compress', 'z1' => 'application/x-zmachine', 'z2' => 'application/x-zmachine', 'z3' => 'application/x-zmachine', 'z4' => 'application/x-zmachine', 'z5' => 'application/x-zmachine', 'z6' => 'application/x-zmachine', 'z7' => 'application/x-zmachine', 'z8' => 'application/x-zmachine', 'zabw' => 'application/x-abiword', 'zaz' => 'application/vnd.zzazz.deck+xml', 'zip' => 'application/zip', 'zir' => 'application/vnd.zul', 'zirz' => 'application/vnd.zul', 'zmm' => 'application/vnd.handheld-entertainment+xml', 'zoo' => 'application/x-zoo', 'zsav' => 'application/x-spss-sav', '123' => 'application/vnd.lotus-1-2-3', '602' => 'application/x-t602', '669' => 'audio/x-mod' );Horde_Mime-2.10.3/lib/Horde/Mime/Part.php0000664000175000017500000022607713055000404016033 0ustar janjan * @author Michael Slusarz * @category Horde * @copyright 1999-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ class Horde_Mime_Part implements ArrayAccess, Countable, RecursiveIterator, Serializable { /* Serialized version. */ const VERSION = 2; /* The character(s) used internally for EOLs. */ const EOL = "\n"; /* The character string designated by RFC 2045 to designate EOLs in MIME * messages. */ const RFC_EOL = "\r\n"; /* The default encoding. */ const DEFAULT_ENCODING = 'binary'; /* Constants indicating the valid transfer encoding allowed. */ const ENCODE_7BIT = 1; const ENCODE_8BIT = 2; const ENCODE_BINARY = 4; /* MIME nesting limit. */ const NESTING_LIMIT = 100; /* Status mask value: Need to reindex the current part. */ const STATUS_REINDEX = 1; /* Status mask value: This is the base MIME part. */ const STATUS_BASEPART = 2; /** * The default charset to use when parsing text parts with no charset * information. * * @todo Make this a non-static property or pass as parameter to static * methods in Horde 6. * * @var string */ public static $defaultCharset = 'us-ascii'; /** * The memory limit for use with the PHP temp stream. * * @var integer */ public static $memoryLimit = 2097152; /** * Parent object. Value only accurate when iterating. * * @since 2.8.0 * * @var Horde_Mime_Part */ public $parent = null; /** * Default value for this Part's size. * * @var integer */ protected $_bytes; /** * The body of the part. Always stored in binary format. * * @var resource */ protected $_contents; /** * The sequence to use as EOL for this part. * * The default is currently to output the EOL sequence internally as * just "\n" instead of the canonical "\r\n" required in RFC 822 & 2045. * To be RFC complaint, the full EOL combination should be used * when sending a message. * * @var string */ protected $_eol = self::EOL; /** * The MIME headers for this part. * * @var Horde_Mime_Headers */ protected $_headers; /** * The charset to output the headers in. * * @var string */ protected $_hdrCharset = null; /** * Metadata. * * @var array */ protected $_metadata = array(); /** * The MIME ID of this part. * * @var string */ protected $_mimeid = null; /** * The subparts of this part. * * @var array */ protected $_parts = array(); /** * Status mask for this part. * * @var integer */ protected $_status = 0; /** * Temporary array. * * @var array */ protected $_temp = array(); /** * The desired transfer encoding of this part. * * @var string */ protected $_transferEncoding = self::DEFAULT_ENCODING; /** * Flag to detect if a message failed to send at least once. * * @var boolean */ protected $_failed = false; /** * Constructor. */ public function __construct() { $this->_headers = new Horde_Mime_Headers(); /* Mandatory MIME headers. */ $this->_headers->addHeaderOb( new Horde_Mime_Headers_ContentParam_ContentDisposition(null, '') ); $ct = Horde_Mime_Headers_ContentParam_ContentType::create(); $ct['charset'] = self::$defaultCharset; $this->_headers->addHeaderOb($ct); } /** * Function to run on clone. */ public function __clone() { foreach ($this->_parts as $k => $v) { $this->_parts[$k] = clone $v; } $this->_headers = clone $this->_headers; if (!empty($this->_contents)) { $this->_contents = $this->_writeStream($this->_contents); } } /** * Set the content-disposition of this part. * * @param string $disposition The content-disposition to set ('inline', * 'attachment', or an empty value). */ public function setDisposition($disposition = null) { $this->_headers['content-disposition']->setContentParamValue( strval($disposition) ); } /** * Get the content-disposition of this part. * * @return string The part's content-disposition. An empty string means * no desired disposition has been set for this part. */ public function getDisposition() { return $this->_headers['content-disposition']->value; } /** * Add a disposition parameter to this part. * * @param string $label The disposition parameter label. * @param string $data The disposition parameter data. If null, removes * the parameter (@since 2.8.0). */ public function setDispositionParameter($label, $data) { $cd = $this->_headers['content-disposition']; if (is_null($data)) { unset($cd[$label]); } elseif (strlen($data)) { $cd[$label] = $data; if (strcasecmp($label, 'size') === 0) { // RFC 2183 [2.7] - size parameter $this->_bytes = $cd[$label]; } elseif ((strcasecmp($label, 'filename') === 0) && !strlen($cd->value)) { /* Set part to attachment if not already explicitly set to * 'inline'. */ $cd->setContentParamValue('attachment'); } } } /** * Get a disposition parameter from this part. * * @param string $label The disposition parameter label. * * @return string The data requested. * Returns null if $label is not set. */ public function getDispositionParameter($label) { $cd = $this->_headers['content-disposition']; return $cd[$label]; } /** * Get all parameters from the Content-Disposition header. * * @return array An array of all the parameters * Returns the empty array if no parameters set. */ public function getAllDispositionParameters() { return $this->_headers['content-disposition']->params; } /** * Set the name of this part. * * @param string $name The name to set. */ public function setName($name) { $this->setDispositionParameter('filename', $name); $this->setContentTypeParameter('name', $name); } /** * Get the name of this part. * * @param boolean $default If the name parameter doesn't exist, should we * use the default name from the description * parameter? * * @return string The name of the part. */ public function getName($default = false) { if (!($name = $this->getDispositionParameter('filename')) && !($name = $this->getContentTypeParameter('name')) && $default) { $name = preg_replace('|\W|', '_', $this->getDescription(false)); } return $name; } /** * Set the body contents of this part. * * @param mixed $contents The part body. Either a string or a stream * resource, or an array containing both. * @param array $options Additional options: * - encoding: (string) The encoding of $contents. * DEFAULT: Current transfer encoding value. * - usestream: (boolean) If $contents is a stream, should we directly * use that stream? * DEFAULT: $contents copied to a new stream. */ public function setContents($contents, $options = array()) { if (is_resource($contents) && ($contents === $this->_contents)) { return; } if (empty($options['encoding'])) { $options['encoding'] = $this->_transferEncoding; } $fp = (empty($options['usestream']) || !is_resource($contents)) ? $this->_writeStream($contents) : $contents; /* Properly close the existing stream. */ $this->clearContents(); $this->setTransferEncoding($options['encoding']); $this->_contents = $this->_transferDecode($fp, $options['encoding']); } /** * Add to the body contents of this part. * * @param mixed $contents The part body. Either a string or a stream * resource, or an array containing both. * - encoding: (string) The encoding of $contents. * DEFAULT: Current transfer encoding value. * - usestream: (boolean) If $contents is a stream, should we directly * use that stream? * DEFAULT: $contents copied to a new stream. */ public function appendContents($contents, $options = array()) { if (empty($this->_contents)) { $this->setContents($contents, $options); } else { $fp = (empty($options['usestream']) || !is_resource($contents)) ? $this->_writeStream($contents) : $contents; $this->_writeStream((empty($options['encoding']) || ($options['encoding'] == $this->_transferEncoding)) ? $fp : $this->_transferDecode($fp, $options['encoding']), array('fp' => $this->_contents)); unset($this->_temp['sendTransferEncoding']); } } /** * Clears the body contents of this part. */ public function clearContents() { if (!empty($this->_contents)) { fclose($this->_contents); $this->_contents = null; unset($this->_temp['sendTransferEncoding']); } } /** * Return the body of the part. * * @param array $options Additional options: * - canonical: (boolean) Returns the contents in strict RFC 822 & * 2045 output - namely, all newlines end with the * canonical sequence. * DEFAULT: No * - stream: (boolean) Return the body as a stream resource. * DEFAULT: No * * @return mixed The body text (string) of the part, null if there is no * contents, and a stream resource if 'stream' is true. */ public function getContents($options = array()) { return empty($options['canonical']) ? (empty($options['stream']) ? $this->_readStream($this->_contents) : $this->_contents) : $this->replaceEOL($this->_contents, self::RFC_EOL, !empty($options['stream'])); } /** * Decodes the contents of the part to binary encoding. * * @param resource $fp A stream containing the data to decode. * @param string $encoding The original file encoding. * * @return resource A new file resource with the decoded data. */ protected function _transferDecode($fp, $encoding) { /* If the contents are empty, return now. */ fseek($fp, 0, SEEK_END); if (ftell($fp)) { switch ($encoding) { case 'base64': try { return $this->_writeStream($fp, array( 'error' => true, 'filter' => array( 'convert.base64-decode' => array() ) )); } catch (ErrorException $e) {} rewind($fp); return $this->_writeStream(base64_decode(stream_get_contents($fp))); case 'quoted-printable': try { return $this->_writeStream($fp, array( 'error' => true, 'filter' => array( 'convert.quoted-printable-decode' => array() ) )); } catch (ErrorException $e) {} // Workaround for Horde Bug #8747 rewind($fp); return $this->_writeStream(quoted_printable_decode(stream_get_contents($fp))); case 'uuencode': case 'x-uuencode': case 'x-uue': /* Support for uuencoded encoding - although not required by * RFCs, some mailers may still encode this way. */ $res = Horde_Mime::uudecode($this->_readStream($fp)); return $this->_writeStream($res[0]['data']); } } return $fp; } /** * Encodes the contents of the part as necessary for transport. * * @param resource $fp A stream containing the data to encode. * @param string $encoding The encoding to use. * * @return resource A new file resource with the encoded data. */ protected function _transferEncode($fp, $encoding) { $this->_temp['transferEncodeClose'] = true; switch ($encoding) { case 'base64': /* Base64 Encoding: See RFC 2045, section 6.8 */ return $this->_writeStream($fp, array( 'filter' => array( 'convert.base64-encode' => array( 'line-break-chars' => $this->getEOL(), 'line-length' => 76 ) ) )); case 'quoted-printable': // PHP Bug 65776 - Must normalize the EOL characters. stream_filter_register('horde_eol', 'Horde_Stream_Filter_Eol'); $stream = new Horde_Stream_Existing(array( 'stream' => $fp )); $stream->stream = $this->_writeStream($stream->stream, array( 'filter' => array( 'horde_eol' => array('eol' => $stream->getEOL() ) ))); /* Quoted-Printable Encoding: See RFC 2045, section 6.7 */ return $this->_writeStream($fp, array( 'filter' => array( 'convert.quoted-printable-encode' => array_filter(array( 'line-break-chars' => $stream->getEOL(), 'line-length' => 76 )) ) )); default: $this->_temp['transferEncodeClose'] = false; return $fp; } } /** * Set the MIME type of this part. * * @param string $type The MIME type to set (ex.: text/plain). */ public function setType($type) { /* RFC 2045: Any entity with unrecognized encoding must be treated * as if it has a Content-Type of "application/octet-stream" * regardless of what the Content-Type field actually says. */ if (!is_null($this->_transferEncoding)) { $this->_headers['content-type']->setContentParamValue($type); } } /** * Get the full MIME Content-Type of this part. * * @param boolean $charset Append character set information to the end * of the content type if this is a text/* part? *` * @return string The MIME type of this part. */ public function getType($charset = false) { $ct = $this->_headers['content-type']; return $charset ? $ct->type_charset : $ct->value; } /** * If the subtype of a MIME part is unrecognized by an application, the * default type should be used instead (See RFC 2046). This method * returns the default subtype for a particular primary MIME type. * * @return string The default MIME type of this part (ex.: text/plain). */ public function getDefaultType() { switch ($this->getPrimaryType()) { case 'text': /* RFC 2046 (4.1.4): text parts default to text/plain. */ return 'text/plain'; case 'multipart': /* RFC 2046 (5.1.3): multipart parts default to multipart/mixed. */ return 'multipart/mixed'; default: /* RFC 2046 (4.2, 4.3, 4.4, 4.5.3, 5.2.4): all others default to application/octet-stream. */ return 'application/octet-stream'; } } /** * Get the primary type of this part. * * @return string The primary MIME type of this part. */ public function getPrimaryType() { return $this->_headers['content-type']->ptype; } /** * Get the subtype of this part. * * @return string The MIME subtype of this part. */ public function getSubType() { return $this->_headers['content-type']->stype; } /** * Set the character set of this part. * * @param string $charset The character set of this part. */ public function setCharset($charset) { $this->setContentTypeParameter('charset', $charset); } /** * Get the character set to use for this part. * * @return string The character set of this part (lowercase). Returns * null if there is no character set. */ public function getCharset() { return $this->getContentTypeParameter('charset') ?: (($this->getPrimaryType() === 'text') ? 'us-ascii' : null); } /** * Set the character set to use when outputting MIME headers. * * @param string $charset The character set. */ public function setHeaderCharset($charset) { $this->_hdrCharset = $charset; } /** * Get the character set to use when outputting MIME headers. * * @return string The character set. If no preferred character set has * been set, returns null. */ public function getHeaderCharset() { return is_null($this->_hdrCharset) ? $this->getCharset() : $this->_hdrCharset; } /** * Set the language(s) of this part. * * @param mixed $lang A language string, or an array of language * strings. */ public function setLanguage($lang) { $this->_headers->addHeaderOb( new Horde_Mime_Headers_ContentLanguage('', $lang) ); } /** * Get the language(s) of this part. * * @param array The list of languages. */ public function getLanguage() { return $this->_headers['content-language']->langs; } /** * Set the content duration of the data contained in this part (see RFC * 3803). * * @param integer $duration The duration of the data, in seconds. If * null, clears the duration information. */ public function setDuration($duration) { if (is_null($duration)) { unset($this->_headers['content-duration']); } else { if (!($hdr = $this->_headers['content-duration'])) { $hdr = new Horde_Mime_Headers_Element_Single( 'Content-Duration', '' ); $this->_headers->addHeaderOb($hdr); } $hdr->setValue($duration); } } /** * Get the content duration of the data contained in this part (see RFC * 3803). * * @return integer The duration of the data, in seconds. Returns null if * there is no duration information. */ public function getDuration() { return ($hdr = $this->_headers['content-duration']) ? intval($hdr->value) : null; } /** * Set the description of this part. * * @param string $description The description of this part. If null, * deletes the description (@since 2.8.0). */ public function setDescription($description) { if (is_null($description)) { unset($this->_headers['content-description']); } else { if (!($hdr = $this->_headers['content-description'])) { $hdr = new Horde_Mime_Headers_ContentDescription(null, ''); $this->_headers->addHeaderOb($hdr); } $hdr->setValue($description); } } /** * Get the description of this part. * * @param boolean $default If the description parameter doesn't exist, * should we use the name of the part? * * @return string The description of this part. */ public function getDescription($default = false) { if (($ob = $this->_headers['content-description']) && strlen($ob->value)) { return $ob->value; } return $default ? $this->getName() : ''; } /** * Set the transfer encoding to use for this part. * * Only needed in the following circumstances: * 1.) Indicate what the transfer encoding is if the data has not yet been * set in the object (can only be set if there presently are not * any contents). * 2.) Force the encoding to a certain type on a toString() call (if * 'send' is true). * * @param string $encoding The transfer encoding to use. * @param array $options Additional options: * - send: (boolean) If true, use $encoding as the sending encoding. * DEFAULT: $encoding is used to change the base encoding. */ public function setTransferEncoding($encoding, $options = array()) { if (empty($encoding) || (empty($options['send']) && !empty($this->_contents))) { return; } switch ($encoding = Horde_String::lower($encoding)) { case '7bit': case '8bit': case 'base64': case 'binary': case 'quoted-printable': // Non-RFC types, but old mailers may still use case 'uuencode': case 'x-uuencode': case 'x-uue': if (empty($options['send'])) { $this->_transferEncoding = $encoding; } else { $this->_temp['sendEncoding'] = $encoding; } break; default: if (empty($options['send'])) { /* RFC 2045: Any entity with unrecognized encoding must be * treated as if it has a Content-Type of * "application/octet-stream" regardless of what the * Content-Type field actually says. */ $this->setType('application/octet-stream'); $this->_transferEncoding = null; } break; } } /** * Get a list of all MIME subparts. * * @return array An array of the Horde_Mime_Part subparts. */ public function getParts() { return $this->_parts; } /** * Add/remove a content type parameter to this part. * * @param string $label The content-type parameter label. * @param string $data The content-type parameter data. If null, removes * the parameter (@since 2.8.0). */ public function setContentTypeParameter($label, $data) { $ct = $this->_headers['content-type']; if (is_null($data)) { unset($ct[$label]); } elseif (strlen($data)) { $ct[$label] = $data; } } /** * Get a content type parameter from this part. * * @param string $label The content type parameter label. * * @return string The data requested. * Returns null if $label is not set. */ public function getContentTypeParameter($label) { $ct = $this->_headers['content-type']; return $ct[$label]; } /** * Get all parameters from the Content-Type header. * * @return array An array of all the parameters * Returns the empty array if no parameters set. */ public function getAllContentTypeParameters() { return $this->_headers['content-type']->params; } /** * Sets a new string to use for EOLs. * * @param string $eol The string to use for EOLs. */ public function setEOL($eol) { $this->_eol = $eol; } /** * Get the string to use for EOLs. * * @return string The string to use for EOLs. */ public function getEOL() { return $this->_eol; } /** * Returns a Horde_Mime_Header object containing all MIME headers needed * for the part. * * @param array $options Additional options: * - encode: (integer) A mask of allowable encodings. * DEFAULT: Auto-determined * - headers: (Horde_Mime_Headers) The object to add the MIME headers * to. * DEFAULT: Add headers to a new object * * @return Horde_Mime_Headers A Horde_Mime_Headers object. */ public function addMimeHeaders($options = array()) { if (empty($options['headers'])) { $headers = new Horde_Mime_Headers(); } else { $headers = $options['headers']; $headers->removeHeader('Content-Disposition'); $headers->removeHeader('Content-Transfer-Encoding'); } /* Add the mandatory Content-Type header. */ $ct = $this->_headers['content-type']; $headers->addHeaderOb($ct); /* Add the language(s), if set. (RFC 3282 [2]) */ if ($hdr = $this->_headers['content-language']) { $headers->addHeaderOb($hdr); } /* Get the description, if any. */ if ($hdr = $this->_headers['content-description']) { $headers->addHeaderOb($hdr); } /* Set the duration, if it exists. (RFC 3803) */ if ($hdr = $this->_headers['content-duration']) { $headers->addHeaderOb($hdr); } /* Per RFC 2046[4], this MUST appear in the base message headers. */ if ($this->_status & self::STATUS_BASEPART) { $headers->addHeaderOb(Horde_Mime_Headers_MimeVersion::create()); } /* message/* parts require no additional header information. */ if ($ct->ptype === 'message') { return $headers; } /* RFC 2183 [2] indicates that default is no requested disposition - * the receiving MUA is responsible for display choice. */ $cd = $this->_headers['content-disposition']; if (!$cd->isDefault()) { $headers->addHeaderOb($cd); } /* Add transfer encoding information. RFC 2045 [6.1] indicates that * default is 7bit. No need to send the header in this case. */ $cte = new Horde_Mime_Headers_ContentTransferEncoding( null, $this->_getTransferEncoding( empty($options['encode']) ? null : $options['encode'] ) ); if (!$cte->isDefault()) { $headers->addHeaderOb($cte); } /* Add content ID information. */ if ($hdr = $this->_headers['content-id']) { $headers->addHeaderOb($hdr); } return $headers; } /** * Return the entire part in MIME format. * * @param array $options Additional options: * - canonical: (boolean) Returns the encoded part in strict RFC 822 & * 2045 output - namely, all newlines end with the * canonical sequence. * DEFAULT: false * - defserver: (string) The default server to use when creating the * header string. * DEFAULT: none * - encode: (integer) A mask of allowable encodings. * DEFAULT: self::ENCODE_7BIT * - headers: (mixed) Include the MIME headers? If true, create a new * headers object. If a Horde_Mime_Headers object, add MIME * headers to this object. If a string, use the string * verbatim. * DEFAULT: true * - id: (string) Return only this MIME ID part. * DEFAULT: Returns the base part. * - stream: (boolean) Return a stream resource. * DEFAULT: false * * @return mixed The MIME string (returned as a resource if $stream is * true). */ public function toString($options = array()) { $eol = $this->getEOL(); $isbase = true; $oldbaseptr = null; $parts = $parts_close = array(); if (isset($options['id'])) { $id = $options['id']; if (!($part = $this[$id])) { return $part; } unset($options['id']); $contents = $part->toString($options); $prev_id = Horde_Mime::mimeIdArithmetic($id, 'up', array('norfc822' => true)); $prev_part = ($prev_id == $this->getMimeId()) ? $this : $this[$prev_id]; if (!$prev_part) { return $contents; } $boundary = trim($this->getContentTypeParameter('boundary'), '"'); $parts = array( $eol . '--' . $boundary . $eol, $contents ); if (!isset($this[Horde_Mime::mimeIdArithmetic($id, 'next')])) { $parts[] = $eol . '--' . $boundary . '--' . $eol; } } else { if ($isbase = empty($options['_notbase'])) { $headers = !empty($options['headers']) ? $options['headers'] : false; if (empty($options['encode'])) { $options['encode'] = null; } if (empty($options['defserver'])) { $options['defserver'] = null; } $options['headers'] = true; $options['_notbase'] = true; } else { $headers = true; $oldbaseptr = &$options['_baseptr']; } $this->_temp['toString'] = ''; $options['_baseptr'] = &$this->_temp['toString']; /* Any information about a message is embedded in the message * contents themself. Simply output the contents of the part * directly and return. */ $ptype = $this->getPrimaryType(); if ($ptype == 'message') { $parts[] = $this->_contents; } else { if (!empty($this->_contents)) { $encoding = $this->_getTransferEncoding($options['encode']); switch ($encoding) { case '8bit': if (empty($options['_baseptr'])) { $options['_baseptr'] = '8bit'; } break; case 'binary': $options['_baseptr'] = 'binary'; break; } $parts[] = $this->_transferEncode($this->_contents, $encoding); /* If not using $this->_contents, we can close the stream * when finished. */ if ($this->_temp['transferEncodeClose']) { $parts_close[] = end($parts); } } /* Deal with multipart messages. */ if ($ptype == 'multipart') { if (empty($this->_contents)) { $parts[] = 'This message is in MIME format.' . $eol; } $boundary = trim($this->getContentTypeParameter('boundary'), '"'); /* If base part is multipart/digest, children should not * have content-type (automatically treated as * message/rfc822; RFC 2046 [5.1.5]). */ if ($this->getSubType() === 'digest') { $options['is_digest'] = true; } foreach ($this as $part) { $parts[] = $eol . '--' . $boundary . $eol; $tmp = $part->toString($options); if ($part->getEOL() != $eol) { $tmp = $this->replaceEOL($tmp, $eol, !empty($options['stream'])); } if (!empty($options['stream'])) { $parts_close[] = $tmp; } $parts[] = $tmp; } $parts[] = $eol . '--' . $boundary . '--' . $eol; } } if (is_string($headers)) { array_unshift($parts, $headers); } elseif ($headers) { $hdr_ob = $this->addMimeHeaders(array( 'encode' => $options['encode'], 'headers' => ($headers === true) ? null : $headers )); if (!$isbase && !empty($options['is_digest'])) { unset($hdr_ob['content-type']); } if (!empty($this->_temp['toString'])) { $hdr_ob->addHeader( 'Content-Transfer-Encoding', $this->_temp['toString'] ); } array_unshift($parts, $hdr_ob->toString(array( 'canonical' => ($eol == self::RFC_EOL), 'charset' => $this->getHeaderCharset(), 'defserver' => $options['defserver'] ))); } } $newfp = $this->_writeStream($parts); array_map('fclose', $parts_close); if (!is_null($oldbaseptr)) { switch ($this->_temp['toString']) { case '8bit': if (empty($oldbaseptr)) { $oldbaseptr = '8bit'; } break; case 'binary': $oldbaseptr = 'binary'; break; } } if ($isbase && !empty($options['canonical'])) { return $this->replaceEOL($newfp, self::RFC_EOL, !empty($options['stream'])); } return empty($options['stream']) ? $this->_readStream($newfp) : $newfp; } /** * Get the transfer encoding for the part based on the user requested * transfer encoding and the current contents of the part. * * @param integer $encode A mask of allowable encodings. * * @return string The transfer-encoding of this part. */ protected function _getTransferEncoding($encode = self::ENCODE_7BIT) { if (!empty($this->_temp['sendEncoding'])) { return $this->_temp['sendEncoding']; } elseif (!empty($this->_temp['sendTransferEncoding'][$encode])) { return $this->_temp['sendTransferEncoding'][$encode]; } if (empty($this->_contents)) { $encoding = '7bit'; } else { switch ($this->getPrimaryType()) { case 'message': case 'multipart': /* RFC 2046 [5.2.1] - message/rfc822 messages only allow 7bit, * 8bit, and binary encodings. If the current encoding is * either base64 or q-p, switch it to 8bit instead. * RFC 2046 [5.2.2, 5.2.3, 5.2.4] - All other messages * only allow 7bit encodings. * * TODO: What if message contains 8bit characters and we are * in strict 7bit mode? Not sure there is anything we can do * in that situation, especially for message/rfc822 parts. * * These encoding will be figured out later (via toString()). * They are limited to 7bit, 8bit, and binary. Default to * '7bit' per RFCs. */ $default_8bit = 'base64'; $encoding = '7bit'; break; case 'text': $default_8bit = 'quoted-printable'; $encoding = '7bit'; break; default: $default_8bit = 'base64'; /* If transfer encoding has changed from the default, use that * value. */ $encoding = ($this->_transferEncoding == self::DEFAULT_ENCODING) ? 'base64' : $this->_transferEncoding; break; } switch ($encoding) { case 'base64': case 'binary': break; default: $encoding = $this->_scanStream($this->_contents); break; } switch ($encoding) { case 'base64': case 'binary': /* If the text is longer than 998 characters between * linebreaks, use quoted-printable encoding to ensure the * text will not be chopped (i.e. by sendmail if being * sent as mail text). */ $encoding = $default_8bit; break; case '8bit': $encoding = (($encode & self::ENCODE_8BIT) || ($encode & self::ENCODE_BINARY)) ? '8bit' : $default_8bit; break; } } $this->_temp['sendTransferEncoding'][$encode] = $encoding; return $encoding; } /** * Replace newlines in this part's contents with those specified by either * the given newline sequence or the part's current EOL setting. * * @param mixed $text The text to replace. Either a string or a * stream resource. If a stream, and returning * a string, will close the stream when done. * @param string $eol The EOL sequence to use. If not present, uses * the part's current EOL setting. * @param boolean $stream If true, returns a stream resource. * * @return string The text with the newlines replaced by the desired * newline sequence (returned as a stream resource if * $stream is true). */ public function replaceEOL($text, $eol = null, $stream = false) { if (is_null($eol)) { $eol = $this->getEOL(); } stream_filter_register('horde_eol', 'Horde_Stream_Filter_Eol'); $fp = $this->_writeStream($text, array( 'filter' => array( 'horde_eol' => array('eol' => $eol) ) )); return $stream ? $fp : $this->_readStream($fp, true); } /** * Determine the size of this MIME part and its child members. * * @todo Remove $approx parameter. * * @param boolean $approx If true, determines an approximate size for * parts consisting of base64 encoded data. * * @return integer Size of the part, in bytes. */ public function getBytes($approx = false) { if ($this->getPrimaryType() == 'multipart') { if (isset($this->_bytes)) { return $this->_bytes; } $bytes = 0; foreach ($this as $part) { $bytes += $part->getBytes($approx); } return $bytes; } if ($this->_contents) { fseek($this->_contents, 0, SEEK_END); $bytes = ftell($this->_contents); } else { $bytes = $this->_bytes; /* Base64 transfer encoding is approx. 33% larger than original * data size (RFC 2045 [6.8]). */ if ($approx && ($this->_transferEncoding == 'base64')) { $bytes *= 0.75; } } return intval($bytes); } /** * Explicitly set the size (in bytes) of this part. This value will only * be returned (via getBytes()) if there are no contents currently set. * * This function is useful for setting the size of the part when the * contents of the part are not fully loaded (i.e. creating a * Horde_Mime_Part object from IMAP header information without loading the * data of the part). * * @param integer $bytes The size of this part in bytes. */ public function setBytes($bytes) { /* Consider 'size' disposition parameter to be the canonical size. * Only set bytes if that value doesn't exist. */ if (!$this->getDispositionParameter('size')) { $this->setDispositionParameter('size', $bytes); } } /** * Output the size of this MIME part in KB. * * @todo Remove $approx parameter. * * @param boolean $approx If true, determines an approximate size for * parts consisting of base64 encoded data. * * @return string Size of the part in KB. */ public function getSize($approx = false) { if (!($bytes = $this->getBytes($approx))) { return 0; } $localeinfo = Horde_Nls::getLocaleInfo(); // TODO: Workaround broken number_format() prior to PHP 5.4.0. return str_replace( array('X', 'Y'), array($localeinfo['decimal_point'], $localeinfo['thousands_sep']), number_format(ceil($bytes / 1024), 0, 'X', 'Y') ); } /** * Sets the Content-ID header for this part. * * @param string $cid Use this CID (if not already set). Else, generate * a random CID. * * @return string The Content-ID for this part. */ public function setContentId($cid = null) { if (!is_null($id = $this->getContentId())) { return $id; } $this->_headers->addHeaderOb( is_null($cid) ? Horde_Mime_Headers_ContentId::create() : new Horde_Mime_Headers_ContentId(null, $cid) ); return $this->getContentId(); } /** * Returns the Content-ID for this part. * * @return string The Content-ID for this part (null if not set). */ public function getContentId() { return ($hdr = $this->_headers['content-id']) ? trim($hdr->value, '<>') : null; } /** * Alter the MIME ID of this part. * * @param string $mimeid The MIME ID. */ public function setMimeId($mimeid) { $this->_mimeid = $mimeid; } /** * Returns the MIME ID of this part. * * @return string The MIME ID. */ public function getMimeId() { return $this->_mimeid; } /** * Build the MIME IDs for this part and all subparts. * * @param string $id The ID of this part. * @param boolean $rfc822 Is this a message/rfc822 part? */ public function buildMimeIds($id = null, $rfc822 = false) { $this->_status &= ~self::STATUS_REINDEX; if (is_null($id)) { $rfc822 = true; $id = ''; } if ($rfc822) { if (empty($this->_parts) && ($this->getPrimaryType() != 'multipart')) { $this->setMimeId($id . '1'); } else { if (empty($id) && ($this->getType() == 'message/rfc822')) { $this->setMimeId('1.0'); } else { $this->setMimeId($id . '0'); } $i = 1; foreach ($this as $val) { $val->buildMimeIds($id . ($i++)); } } } else { $this->setMimeId($id); $id = $id ? ((substr($id, -2) === '.0') ? substr($id, 0, -1) : ($id . '.')) : ''; if (count($this)) { if ($this->getType() == 'message/rfc822') { $this->rewind(); $this->current()->buildMimeIds($id, true); } else { $i = 1; foreach ($this as $val) { $val->buildMimeIds($id . ($i++)); } } } } } /** * Is this the base MIME part? * * @param boolean $base True if this is the base MIME part. */ public function isBasePart($base) { if (empty($base)) { $this->_status &= ~self::STATUS_BASEPART; } else { $this->_status |= self::STATUS_BASEPART; } } /** * Determines if this MIME part is an attachment for display purposes. * * @since Horde_Mime 2.10.0 * * @return boolean True if this part should be considered an attachment. */ public function isAttachment() { $type = $this->getType(); switch ($type) { case 'application/ms-tnef': case 'application/pgp-keys': case 'application/vnd.ms-tnef': return false; } if ($this->parent) { switch ($this->parent->getType()) { case 'multipart/encrypted': switch ($type) { case 'application/octet-stream': return false; } break; case 'multipart/signed': switch ($type) { case 'application/pgp-signature': case 'application/pkcs7-signature': case 'application/x-pkcs7-signature': return false; } break; } } switch ($this->getDisposition()) { case 'attachment': return true; } switch ($this->getPrimaryType()) { case 'application': if (strlen($this->getName())) { return true; } break; case 'audio': case 'video': return true; case 'multipart': return false; } return false; } /** * Set a piece of metadata on this object. * * @param string $key The metadata key. * @param mixed $data The metadata. If null, clears the key. */ public function setMetadata($key, $data = null) { if (is_null($data)) { unset($this->_metadata[$key]); } else { $this->_metadata[$key] = $data; } } /** * Retrieves metadata from this object. * * @param string $key The metadata key. * * @return mixed The metadata, or null if it doesn't exist. */ public function getMetadata($key) { return isset($this->_metadata[$key]) ? $this->_metadata[$key] : null; } /** * Sends this message. * * @param string $email The address list to send to. * @param Horde_Mime_Headers $headers The Horde_Mime_Headers object * holding this message's headers. * @param Horde_Mail_Transport $mailer A Horde_Mail_Transport object. * @param array $opts Additional options: *
     *   - broken_rfc2231: (boolean) Attempt to work around non-RFC
     *                     2231-compliant MUAs by generating both a RFC
     *                     2047-like parameter name and also the correct RFC
     *                     2231 parameter (@since 2.5.0).
     *                     DEFAULT: false
     *   - encode: (integer) The encoding to use. A mask of self::ENCODE_*
     *             values.
     *             DEFAULT: Auto-determined based on transport driver.
     * 
* * @throws Horde_Mime_Exception * @throws InvalidArgumentException */ public function send($email, $headers, Horde_Mail_Transport $mailer, array $opts = array()) { $old_status = $this->_status; $this->isBasePart(true); /* Does the SMTP backend support 8BITMIME (RFC 1652)? */ $canonical = true; $encode = self::ENCODE_7BIT; if (isset($opts['encode'])) { /* Always allow 7bit encoding. */ $encode |= $opts['encode']; } elseif ($mailer instanceof Horde_Mail_Transport_Smtp) { try { $smtp_ext = $mailer->getSMTPObject()->getServiceExtensions(); if (isset($smtp_ext['8BITMIME'])) { $encode |= self::ENCODE_8BIT; } } catch (Horde_Mail_Exception $e) {} $canonical = false; } elseif ($mailer instanceof Horde_Mail_Transport_Smtphorde) { try { if ($mailer->getSMTPObject()->data_8bit) { $encode |= self::ENCODE_8BIT; } } catch (Horde_Mail_Exception $e) {} $canonical = false; } $msg = $this->toString(array( 'canonical' => $canonical, 'encode' => $encode, 'headers' => false, 'stream' => true )); /* Add MIME Headers if they don't already exist. */ if (!isset($headers['MIME-Version'])) { $headers = $this->addMimeHeaders(array( 'encode' => $encode, 'headers' => $headers )); } if (!empty($this->_temp['toString'])) { $headers->addHeader( 'Content-Transfer-Encoding', $this->_temp['toString'] ); switch ($this->_temp['toString']) { case '8bit': if ($mailer instanceof Horde_Mail_Transport_Smtp) { $mailer->addServiceExtensionParameter('BODY', '8BITMIME'); } break; } } $this->_status = $old_status; $rfc822 = new Horde_Mail_Rfc822(); try { $mailer->send($rfc822->parseAddressList($email)->writeAddress(array( 'encode' => $this->getHeaderCharset() ?: true, 'idn' => true )), $headers->toArray(array( 'broken_rfc2231' => !empty($opts['broken_rfc2231']), 'canonical' => $canonical, 'charset' => $this->getHeaderCharset() )), $msg); } catch (InvalidArgumentException $e) { // Try to rebuild the part in case it was due to // an invalid line length in a rfc822/message attachment. if ($this->_failed) { throw $e; } $this->_failed = true; $this->_sanityCheckRfc822Attachments(); try { $this->send($email, $headers, $mailer, $opts); } catch (Horde_Mail_Exception $e) { throw new Horde_Mime_Exception($e); } } catch (Horde_Mail_Exception $e) { throw new Horde_Mime_Exception($e); } } /** * Finds the main "body" text part (if any) in a message. * "Body" data is the first text part under this part. * * @param string $subtype Specifically search for this subtype. * * @return mixed The MIME ID of the main body part, or null if a body * part is not found. */ public function findBody($subtype = null) { $this->buildMimeIds(); foreach ($this->partIterator() as $val) { $id = $val->getMimeId(); if (($val->getPrimaryType() == 'text') && ((intval($id) === 1) || !$this->getMimeId()) && (is_null($subtype) || ($val->getSubType() == $subtype)) && ($val->getDisposition() !== 'attachment')) { return $id; } } return null; } /** * Returns the recursive iterator needed to iterate through this part. * * @since 2.8.0 * * @param boolean $current Include the current part as the base? * * @return Iterator Recursive iterator. */ public function partIterator($current = true) { $this->_reindex(true); return new Horde_Mime_Part_Iterator($this, $current); } /** * Returns a subpart by index. * * @return Horde_Mime_Part Part, or null if not found. */ public function getPartByIndex($index) { if (!isset($this->_parts[$index])) { return null; } $part = $this->_parts[$index]; $part->parent = $this; return $part; } /** * Reindexes the MIME IDs, if necessary. * * @param boolean $force Reindex if the current part doesn't have an ID. */ protected function _reindex($force = false) { $id = $this->getMimeId(); if (($this->_status & self::STATUS_REINDEX) || ($force && is_null($id))) { $this->buildMimeIds( is_null($id) ? (($this->getPrimaryType() === 'multipart') ? '0' : '1') : $id ); } } /** * Write data to a stream. * * @param array $data The data to write. Either a stream resource or * a string. * @param array $options Additional options: * - error: (boolean) Catch errors when writing to the stream. Throw an * ErrorException if an error is found. * DEFAULT: false * - filter: (array) Filter(s) to apply to the string. Keys are the * filter names, values are filter params. * - fp: (resource) Use this stream instead of creating a new one. * * @return resource The stream resource. * @throws ErrorException */ protected function _writeStream($data, $options = array()) { if (empty($options['fp'])) { $fp = fopen('php://temp/maxmemory:' . self::$memoryLimit, 'r+'); } else { $fp = $options['fp']; fseek($fp, 0, SEEK_END); } if (!is_array($data)) { $data = array($data); } $append_filter = array(); if (!empty($options['filter'])) { foreach ($options['filter'] as $key => $val) { $append_filter[] = stream_filter_append($fp, $key, STREAM_FILTER_WRITE, $val); } } if (!empty($options['error'])) { set_error_handler(function($errno, $errstr) { throw new ErrorException($errstr, $errno); }); $error = null; } try { foreach ($data as $d) { if (is_resource($d)) { rewind($d); while (!feof($d)) { fwrite($fp, fread($d, 8192)); } } elseif (is_string($d)) { $len = strlen($d); $i = 0; while ($i < $len) { fwrite($fp, substr($d, $i, 8192)); $i += 8192; } } } } catch (ErrorException $e) { $error = $e; } foreach ($append_filter as $val) { stream_filter_remove($val); } if (!empty($options['error'])) { restore_error_handler(); if ($error) { throw $error; } } return $fp; } /** * Read data from a stream. * * @param resource $fp An active stream. * @param boolean $close Close the stream when done reading? * * @return string The data from the stream. */ protected function _readStream($fp, $close = false) { $out = ''; if (!is_resource($fp)) { return $out; } rewind($fp); while (!feof($fp)) { $out .= fread($fp, 8192); } if ($close) { fclose($fp); } return $out; } /** * Scans a stream for content type. * * @param resource $fp A stream resource. * * @param mixed Either 'binary', '8bit', or false. */ protected function _scanStream($fp) { rewind($fp); stream_filter_register( 'horde_mime_scan_stream', 'Horde_Mime_Filter_Encoding' ); $filter_params = new stdClass; $filter = stream_filter_append( $fp, 'horde_mime_scan_stream', STREAM_FILTER_READ, $filter_params ); while (!feof($fp)) { fread($fp, 8192); } stream_filter_remove($filter); return $filter_params->body; } /* Static methods. */ /** * Attempts to build a Horde_Mime_Part object from message text. * * @param string $text The text of the MIME message. * @param array $opts Additional options: * - forcemime: (boolean) If true, the message data is assumed to be * MIME data. If not, a MIME-Version header must exist (RFC * 2045 [4]) to be parsed as a MIME message. * DEFAULT: false * - level: (integer) Current nesting level of the MIME data. * DEFAULT: 0 * - no_body: (boolean) If true, don't set body contents of parts (since * 2.2.0). * DEFAULT: false * * @return Horde_Mime_Part A MIME Part object. * @throws Horde_Mime_Exception */ public static function parseMessage($text, array $opts = array()) { /* Mini-hack to get a blank Horde_Mime part so we can call * replaceEOL(). Convert to EOL, since that is the expected EOL for * use internally within a Horde_Mime_Part object. */ $part = new Horde_Mime_Part(); $rawtext = $part->replaceEOL($text, self::EOL); /* Find the header. */ $hdr_pos = self::_findHeader($rawtext, self::EOL); unset($opts['ctype']); $ob = self::_getStructure(substr($rawtext, 0, $hdr_pos), substr($rawtext, $hdr_pos + 2), $opts); $ob->buildMimeIds(); return $ob; } /** * Creates a MIME object from the text of one part of a MIME message. * * @param string $header The header text. * @param string $body The body text. * @param array $opts Additional options: *
     *   - ctype: (string) The default content-type.
     *   - forcemime: (boolean) If true, the message data is assumed to be
     *                MIME data. If not, a MIME-Version header must exist to
     *                be parsed as a MIME message.
     *   - level: (integer) Current nesting level.
     *   - no_body: (boolean) If true, don't set body contents of parts.
     * 
* * @return Horde_Mime_Part The MIME part object. */ protected static function _getStructure($header, $body, array $opts = array()) { $opts = array_merge(array( 'ctype' => 'text/plain', 'forcemime' => false, 'level' => 0, 'no_body' => false ), $opts); /* Parse headers text into a Horde_Mime_Headers object. */ $hdrs = Horde_Mime_Headers::parseHeaders($header); $ob = new Horde_Mime_Part(); /* This is not a MIME message. */ if (!$opts['forcemime'] && !isset($hdrs['MIME-Version'])) { $ob->setType('text/plain'); if ($len = strlen($body)) { if ($opts['no_body']) { $ob->setBytes($len); } else { $ob->setContents($body); } } return $ob; } /* Content type. */ if ($tmp = $hdrs['Content-Type']) { $ob->setType($tmp->value); foreach ($tmp->params as $key => $val) { $ob->setContentTypeParameter($key, $val); } } else { $ob->setType($opts['ctype']); } /* Content transfer encoding. */ if ($tmp = $hdrs['Content-Transfer-Encoding']) { $ob->setTransferEncoding(strval($tmp)); } /* Content-Description. */ if ($tmp = $hdrs['Content-Description']) { $ob->setDescription(strval($tmp)); } /* Content-Disposition. */ if ($tmp = $hdrs['Content-Disposition']) { $ob->setDisposition($tmp->value); foreach ($tmp->params as $key => $val) { $ob->setDispositionParameter($key, $val); } } /* Content-Duration */ if ($tmp = $hdrs['Content-Duration']) { $ob->setDuration(strval($tmp)); } /* Content-ID. */ if ($tmp = $hdrs['Content-Id']) { $ob->setContentId(strval($tmp)); } if (($len = strlen($body)) && ($ob->getPrimaryType() != 'multipart')) { if ($opts['no_body']) { $ob->setBytes($len); } else { $ob->setContents($body); } } if (++$opts['level'] >= self::NESTING_LIMIT) { return $ob; } /* Process subparts. */ switch ($ob->getPrimaryType()) { case 'message': if ($ob->getSubType() == 'rfc822') { $ob[] = self::parseMessage($body, array( 'forcemime' => true, 'no_body' => $opts['no_body'] )); } break; case 'multipart': $boundary = $ob->getContentTypeParameter('boundary'); if (!is_null($boundary)) { foreach (self::_findBoundary($body, 0, $boundary) as $val) { if (!isset($val['length'])) { break; } $subpart = substr($body, $val['start'], $val['length']); $hdr_pos = self::_findHeader($subpart, self::EOL); $ob[] = self::_getStructure( substr($subpart, 0, $hdr_pos), substr($subpart, $hdr_pos + 2), array( 'ctype' => ($ob->getSubType() == 'digest') ? 'message/rfc822' : 'text/plain', 'forcemime' => true, 'level' => $opts['level'], 'no_body' => $opts['no_body'] ) ); } } break; } return $ob; } /** * Attempts to obtain the raw text of a MIME part. * * @param mixed $text The full text of the MIME message. The text is * assumed to be MIME data (no MIME-Version checking * is performed). It can be either a stream or a * string. * @param string $type Either 'header' or 'body'. * @param string $id The MIME ID. * * @return string The raw text. * @throws Horde_Mime_Exception */ public static function getRawPartText($text, $type, $id) { /* Mini-hack to get a blank Horde_Mime part so we can call * replaceEOL(). From an API perspective, getRawPartText() should be * static since it is not working on MIME part data. */ $part = new Horde_Mime_Part(); $rawtext = $part->replaceEOL($text, self::RFC_EOL); /* We need to carry around the trailing "\n" because this is needed * to correctly find the boundary string. */ $hdr_pos = self::_findHeader($rawtext, self::RFC_EOL); $curr_pos = $hdr_pos + 3; if ($id == 0) { switch ($type) { case 'body': return substr($rawtext, $curr_pos + 1); case 'header': return trim(substr($rawtext, 0, $hdr_pos)); } } $hdr_ob = Horde_Mime_Headers::parseHeaders(trim(substr($rawtext, 0, $hdr_pos))); /* If this is a message/rfc822, pass the body into the next loop. * Don't decrement the ID here. */ if (($ct = $hdr_ob['Content-Type']) && ($ct == 'message/rfc822')) { return self::getRawPartText( substr($rawtext, $curr_pos + 1), $type, $id ); } $base_pos = strpos($id, '.'); $orig_id = $id; if ($base_pos !== false) { $id = substr($id, $base_pos + 1); $base_pos = substr($orig_id, 0, $base_pos); } else { $base_pos = $id; $id = 0; } if ($ct && !isset($ct->params['boundary'])) { if ($orig_id == '1') { return substr($rawtext, $curr_pos + 1); } throw new Horde_Mime_Exception('Could not find MIME part.'); } $b_find = self::_findBoundary( $rawtext, $curr_pos, $ct->params['boundary'], $base_pos ); if (!isset($b_find[$base_pos])) { throw new Horde_Mime_Exception('Could not find MIME part.'); } return self::getRawPartText( substr( $rawtext, $b_find[$base_pos]['start'], $b_find[$base_pos]['length'] - 1 ), $type, $id ); } /** * Find the location of the end of the header text. * * @param string $text The text to search. * @param string $eol The EOL string. * * @return integer Header position. */ protected static function _findHeader($text, $eol) { $hdr_pos = strpos($text, $eol . $eol); return ($hdr_pos === false) ? strlen($text) : $hdr_pos; } /** * Find the location of the next boundary string. * * @param string $text The text to search. * @param integer $pos The current position in $text. * @param string $boundary The boundary string. * @param integer $end If set, return after matching this many * boundaries. * * @return array Keys are the boundary number, values are an array with * two elements: 'start' and 'length'. */ protected static function _findBoundary($text, $pos, $boundary, $end = null) { $i = 0; $out = array(); $search = "--" . $boundary; $search_len = strlen($search); while (($pos = strpos($text, $search, $pos)) !== false) { /* Boundary needs to appear at beginning of string or right after * a LF. */ if (($pos != 0) && ($text[$pos - 1] != "\n")) { continue; } if (isset($out[$i])) { $out[$i]['length'] = $pos - $out[$i]['start'] - 1; } if (!is_null($end) && ($end == $i)) { break; } $pos += $search_len; if (isset($text[$pos])) { switch ($text[$pos]) { case "\r": $pos += 2; $out[++$i] = array('start' => $pos); break; case "\n": $out[++$i] = array('start' => ++$pos); break; case '-': return $out; } } } return $out; } /** * Re-enocdes message/rfc822 parts in case there was e.g., some broken * line length in the headers of the message in the part. Since we shouldn't * alter the original message in any way, we simply reset cause the part to * be encoded as base64 and sent as a application/octet part. */ protected function _sanityCheckRfc822Attachments() { if ($this->getType() == 'message/rfc822') { $this->_reEncodeMessageAttachment($this); return; } foreach ($this->getParts() as $part) { if ($part->getType() == 'message/rfc822') { $this->_reEncodeMessageAttachment($part); } } return; } /** * Rebuilds $part and forces it to be a base64 encoded * application/octet-stream part. * * @param Horde_Mime_Part $part The MIME part. */ protected function _reEncodeMessageAttachment(Horde_Mime_Part $part) { $new_part = Horde_Mime_Part::parseMessage($part->getContents()); $part->setContents($new_part->getContents(array('stream' => true)), array('encoding' => self::ENCODE_BINARY)); $part->setTransferEncoding('base64', array('send' => true)); } /* ArrayAccess methods. */ /** */ public function offsetExists($offset) { return ($this[$offset] !== null); } /** */ public function offsetGet($offset) { $this->_reindex(); if (strcmp($offset, $this->getMimeId()) === 0) { $this->parent = null; return $this; } foreach ($this->_parts as $val) { if (strcmp($offset, $val->getMimeId()) === 0) { $val->parent = $this; return $val; } if ($found = $val[$offset]) { return $found; } } return null; } /** */ public function offsetSet($offset, $value) { if (is_null($offset)) { $this->_parts[] = $value; $this->_status |= self::STATUS_REINDEX; } elseif ($part = $this[$offset]) { if ($part->parent === $this) { if (($k = array_search($part, $this->_parts, true)) !== false) { $value->setMimeId($part->getMimeId()); $this->_parts[$k] = $value; } } else { $this->parent[$offset] = $value; } } } /** */ public function offsetUnset($offset) { if ($part = $this[$offset]) { if ($part->parent === $this) { if (($k = array_search($part, $this->_parts, true)) !== false) { unset($this->_parts[$k]); $this->_parts = array_values($this->_parts); } } else { unset($part->parent[$offset]); } $this->_status |= self::STATUS_REINDEX; } } /* Countable methods. */ /** * Returns the number of child message parts (doesn't include * grandchildren or more remote ancestors). * * @return integer Number of message parts. */ public function count() { return count($this->_parts); } /* RecursiveIterator methods. */ /** * @since 2.8.0 */ public function current() { return (($key = $this->key()) === null) ? null : $this->getPartByIndex($key); } /** * @since 2.8.0 */ public function key() { return (isset($this->_temp['iterate']) && isset($this->_parts[$this->_temp['iterate']])) ? $this->_temp['iterate'] : null; } /** * @since 2.8.0 */ public function next() { ++$this->_temp['iterate']; } /** * @since 2.8.0 */ public function rewind() { $this->_reindex(); reset($this->_parts); $this->_temp['iterate'] = key($this->_parts); } /** * @since 2.8.0 */ public function valid() { return ($this->key() !== null); } /** * @since 2.8.0 */ public function hasChildren() { return (($curr = $this->current()) && count($curr)); } /** * @since 2.8.0 */ public function getChildren() { return $this->current(); } /* Serializable methods. */ /** * Serialization. * * @return string Serialized data. */ public function serialize() { $data = array( // Serialized data ID. self::VERSION, $this->_bytes, $this->_eol, $this->_hdrCharset, $this->_headers, $this->_metadata, $this->_mimeid, $this->_parts, $this->_status, $this->_transferEncoding ); if (!empty($this->_contents)) { $data[] = $this->_readStream($this->_contents); } return serialize($data); } /** * Unserialization. * * @param string $data Serialized data. * * @throws Exception */ public function unserialize($data) { $data = @unserialize($data); if (!is_array($data) || !isset($data[0]) || ($data[0] != self::VERSION)) { switch ($data[0]) { case 1: $convert = new Horde_Mime_Part_Upgrade_V1($data); $data = $convert->data; break; default: $data = null; break; } if (is_null($data)) { throw new Exception('Cache version change'); } } $key = 0; $this->_bytes = $data[++$key]; $this->_eol = $data[++$key]; $this->_hdrCharset = $data[++$key]; $this->_headers = $data[++$key]; $this->_metadata = $data[++$key]; $this->_mimeid = $data[++$key]; $this->_parts = $data[++$key]; $this->_status = $data[++$key]; $this->_transferEncoding = $data[++$key]; if (isset($data[++$key])) { $this->setContents($data[$key]); } } /* Deprecated elements. */ /** * @deprecated */ const UNKNOWN = 'x-unknown'; /** * @deprecated */ public static $encodingTypes = array( '7bit', '8bit', 'base64', 'binary', 'quoted-printable', // Non-RFC types, but old mailers may still use 'uuencode', 'x-uuencode', 'x-uue' ); /** * @deprecated */ public static $mimeTypes = array( 'text', 'multipart', 'message', 'application', 'audio', 'image', 'video', 'model' ); /** * @deprecated Use setContentTypeParameter with a null $data value. */ public function clearContentTypeParameter($label) { $this->setContentTypeParam($label, null); } /** * @deprecated Use iterator instead. */ public function contentTypeMap($sort = true) { $map = array(); foreach ($this->partIterator() as $val) { $map[$val->getMimeId()] = $val->getType(); } return $map; } /** * @deprecated Use array access instead. */ public function addPart($mime_part) { $this[] = $mime_part; } /** * @deprecated Use array access instead. */ public function getPart($id) { return $this[$id]; } /** * @deprecated Use array access instead. */ public function alterPart($id, $mime_part) { $this[$id] = $mime_part; } /** * @deprecated Use array access instead. */ public function removePart($id) { unset($this[$id]); } } Horde_Mime-2.10.3/lib/Horde/Mime/QuotedPrintable.php0000664000175000017500000000330213055000404020207 0ustar janjan * @category Horde * @copyright 2014-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ class Horde_Mime_QuotedPrintable { /** * Decodes quoted-printable data. * * @param string $data The Q-P data to decode. * * @return string The decoded text. */ public static function decode($data) { return quoted_printable_decode($data); } /** * Encodes text via quoted-printable encoding. * * @param string $text The text to encode (UTF-8). * @param string $eol The EOL sequence to use. * @param integer $wrap Wrap a line at this many characters. * * @return string The quoted-printable encoded string. */ public static function encode($text, $eol = "\n", $wrap = 76) { $fp = fopen('php://temp', 'r+'); stream_filter_append( $fp, 'convert.quoted-printable-encode', STREAM_FILTER_WRITE, array( 'line-break-chars' => $eol, 'line-length' => $wrap ) ); fwrite($fp, $text); rewind($fp); $out = stream_get_contents($fp); fclose($fp); return $out; } } Horde_Mime-2.10.3/lib/Horde/Mime/Related.php0000664000175000017500000001061413055000404016471 0ustar janjan * @category Horde * @copyright 2012-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ class Horde_Mime_Related implements IteratorAggregate { /** * Content IDs. * * @var array */ protected $_cids = array(); /** * Start ID. * * @var string */ protected $_start; /** * Constructor. * * @param Horde_Mime_Part $mime_part A MIME part object. Must be of * type multipart/related. */ public function __construct(Horde_Mime_Part $mime_part) { if ($mime_part->getType() != 'multipart/related') { throw new InvalidArgumentException('MIME part must be of type multipart/related'); } $id = null; $ids = array(); $related_id = $mime_part->getMimeId(); /* Build a list of parts -> CIDs. */ foreach ($mime_part->partIterator() as $val) { $part_id = $val->getMimeId(); $ids[] = $part_id; if ((strcmp($related_id, $part_id) !== 0) && ($cid = $val->getContentId())) { $this->_cids[$part_id] = $cid; } } /* Look at the 'start' parameter to determine which part to start * with. If no 'start' parameter, use the first part (RFC 2387 * [3.1]). */ if ($start = $mime_part->getContentTypeParameter('start')) { $id = $this->cidSearch(trim($start, '<> ')); } if (empty($id)) { reset($ids); $id = next($ids); } $this->_start = $id; } /** * Return the start ID. * * @return string The start ID. */ public function startId() { return $this->_start; } /** * Search for a CID in the related part. * * @param string $cid The CID to search for. * * @return string The MIME ID or false if not found. */ public function cidSearch($cid) { return array_search($cid, $this->_cids); } /** * Scan for CID strings in HTML data and replace with data returned from * a callback method. * * @param mixed $text The HTML text (can be Horde_Domhtml object). * @param callback $callback Callback method. Receives three arguments: * MIME ID, the attribute name containing the * content ID, and the node object. Expects * return value of URL to display the data. * @param string $charset HTML data charset. * * @return Horde_Domhtml A Horde_Domhtml object. */ public function cidReplace($text, $callback, $charset = 'UTF-8') { $dom = ($text instanceof Horde_Domhtml) ? $text : new Horde_Domhtml($text, $charset); foreach ($dom as $node) { if ($node instanceof DOMElement) { switch (Horde_String::lower($node->tagName)) { case 'body': case 'td': $this->_cidReplace($node, 'background', $callback); break; case 'img': $this->_cidReplace($node, 'src', $callback); break; } } } return $dom; } /** */ protected function _cidReplace($node, $attribute, $callback) { if ($node->hasAttribute($attribute)) { $val = $node->getAttribute($attribute); if ((strpos($val, 'cid:') === 0) && ($id = $this->cidSearch(substr($val, 4)))) { $node->setAttribute($attribute, call_user_func($callback, $id, $attribute, $node)); } } } /* IteratorAggregate method. */ public function getIterator() { return new ArrayIterator($this->_cids); } } Horde_Mime-2.10.3/lib/Horde/Mime/Translation.php0000664000175000017500000000173113055000404017407 0ustar janjan * @category Horde * @copyright 2010-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ class Horde_Mime_Translation extends Horde_Translation_Autodetect { /** * The translation domain * * @var string */ protected static $_domain = 'Horde_Mime'; /** * The absolute PEAR path to the translations for the default gettext handler. * * @var string */ protected static $_pearDirectory = '@data_dir@'; } Horde_Mime-2.10.3/lib/Horde/Mime/Uudecode.php0000664000175000017500000000673113055000404016653 0ustar janjan, Arpad Ray * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ /** * Class used to uudecode data. * * Needed because PHP's built-in uudecode() method is broken. * * @author Chuck Hagenbuch * @author Aidan Lister * @author Michael Slusarz * @author Michael Wallner * @category Horde * @copyright 2009-2017 Horde LLC * @copyright 2004-2007 Aidan Lister , Arpad Ray * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @since 2.5.0 */ class Horde_Mime_Uudecode implements Countable, IteratorAggregate { const UUENCODE_REGEX = "/begin ([0-7]{3}) (.+)\r?\n(.+)\r?\nend/Us"; /** * Uudecode data. * * A list of arrays, with each array corresponding to a file in the input * and containing the following keys: * - data: (string) Unencoded data. * - name: (string) Filename. * - perms: (string) Octal permissions. * * @var array */ protected $_data = array(); /** * Scans $input for uuencoded data and converts it to unencoded data. * * @param string $input The input data */ public function __construct($input) { /* Find all uuencoded sections. */ if (preg_match_all(self::UUENCODE_REGEX, $input, $matches, PREG_SET_ORDER)) { foreach ($matches as $v) { $this->_data[] = array( 'data' => $this->_uudecode($v[3]), 'name' => $v[2], 'perm' => $v[1] ); } } } /** * PHP 5's built-in convert_uudecode() is broken. Need this wrapper. * * @param string $input UUencoded input. * * @return string Decoded string. */ protected function _uudecode($input) { $decoded = ''; foreach (explode("\n", $input) as $line) { $c = count($bytes = unpack('c*', substr(trim($line,"\r\n\t"), 1))); while ($c % 4) { $bytes[++$c] = 0; } foreach (array_chunk($bytes, 4) as $b) { $b0 = ($b[0] == 0x60) ? 0 : $b[0] - 0x20; $b1 = ($b[1] == 0x60) ? 0 : $b[1] - 0x20; $b2 = ($b[2] == 0x60) ? 0 : $b[2] - 0x20; $b3 = ($b[3] == 0x60) ? 0 : $b[3] - 0x20; $b0 <<= 2; $b0 |= ($b1 >> 4) & 0x03; $b1 <<= 4; $b1 |= ($b2 >> 2) & 0x0F; $b2 <<= 6; $b2 |= $b3 & 0x3F; $decoded .= pack('c*', $b0, $b1, $b2); } } return rtrim($decoded, "\0"); } /* Countable method. */ public function count() { return count($this->_data); } /* IteratorAggregate method. */ public function getIterator() { return new ArrayIterator($this->_data); } } Horde_Mime-2.10.3/lib/Horde/Mime.php0000664000175000017500000002546613055000404015124 0ustar janjan * @author Michael Slusarz * @category Horde * @copyright 1999-2017 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ class Horde_Mime { /** * The RFC defined EOL string. * * @var string */ const EOL = "\r\n"; /** * Use windows-1252 charset when decoding ISO-8859-1 data? * HTML 5 requires this behavior, so it is the default. * * @var boolean */ public static $decodeWindows1252 = true; /** * Determines if a string contains 8-bit (non US-ASCII) characters. * * @param string $string The string to check. * @param string $charset The charset of the string. Defaults to * US-ASCII. (@deprecated) * * @return boolean True if string contains non 7-bit characters. */ public static function is8bit($string, $charset = null) { $string = strval($string); for ($i = 0, $len = strlen($string); $i < $len; ++$i) { if (ord($string[$i]) > 127) { return true; } } return false; } /** * MIME encodes a string (RFC 2047). * * @param string $text The text to encode (UTF-8). * @param string $charset The character set to encode to. * * @return string The MIME encoded string (US-ASCII). */ public static function encode($text, $charset = 'UTF-8') { $charset = Horde_String::lower($charset); $text = Horde_String::convertCharset($text, 'UTF-8', $charset); $encoded = $is_encoded = false; $lwsp = $word = null; $out = ''; /* 0 = word unencoded * 1 = word encoded * 2 = spaces */ $parts = array(); /* Tokenize string. */ for ($i = 0, $len = strlen($text); $i < $len; ++$i) { switch ($text[$i]) { case "\t": case "\r": case "\n": if (!is_null($word)) { $parts[] = array(intval($encoded), $word, $i - $word); $word = null; } elseif (!is_null($lwsp)) { $parts[] = array(2, $lwsp, $i - $lwsp); $lwsp = null; } $parts[] = array(0, $i, 1); break; case ' ': if (!is_null($word)) { $parts[] = array(intval($encoded), $word, $i - $word); $word = null; } if (is_null($lwsp)) { $lwsp = $i; } break; default: if (is_null($word)) { $encoded = false; $word = $i; if (!is_null($lwsp)) { $parts[] = array(2, $lwsp, $i - $lwsp); $lwsp = null; } /* Check for MIME encoding delimiter. Encode it if * found. */ if (($text[$i] === '=') && (($i + 1) < $len) && ($text[$i +1] === '?')) { ++$i; $encoded = $is_encoded = true; } } /* Check for 8-bit characters or control characters. */ if (!$encoded) { $c = ord($text[$i]); if ($encoded = (($c & 0x80) || ($c < 32))) { $is_encoded = true; } } break; } } if (!$is_encoded) { return $text; } if (is_null($lwsp)) { $parts[] = array(intval($encoded), $word, $len); } else { $parts[] = array(2, $lwsp, $len); } /* Combine parts into MIME encoded string. */ for ($i = 0, $cnt = count($parts); $i < $cnt; ++$i) { $val = $parts[$i]; switch ($val[0]) { case 0: case 2: $out .= substr($text, $val[1], $val[2]); break; case 1: $j = $i; for ($k = $i + 1; $k < $cnt; ++$k) { switch ($parts[$k][0]) { case 0: break 2; case 1: $i = $k; break; } } $encode = ''; for (; $j <= $i; ++$j) { $encode .= substr($text, $parts[$j][1], $parts[$j][2]); } $delim = '=?' . $charset . '?b?'; $e_parts = explode( self::EOL, rtrim( chunk_split( base64_encode($encode), /* strlen($delim) + 2 = space taken by MIME * delimiter */ intval((75 - strlen($delim) + 2) / 4) * 4 ) ) ); $tmp = array(); foreach ($e_parts as $val) { $tmp[] = $delim . $val . '?='; } $out .= implode(' ', $tmp); break; } } return rtrim($out); } /** * Decodes a MIME encoded (RFC 2047) string. * * @param string $string The MIME encoded text. * * @return string The decoded text. */ public static function decode($string) { $old_pos = 0; $out = ''; while (($pos = strpos($string, '=?', $old_pos)) !== false) { /* Save any preceding text, if it is not LWSP between two * encoded words. */ $pre = substr($string, $old_pos, $pos - $old_pos); if (!$old_pos || (strspn($pre, " \t\n\r") != strlen($pre))) { $out .= $pre; } /* Search for first delimiting question mark (charset). */ if (($d1 = strpos($string, '?', $pos + 2)) === false) { break; } $orig_charset = substr($string, $pos + 2, $d1 - $pos - 2); if (self::$decodeWindows1252 && (Horde_String::lower($orig_charset) == 'iso-8859-1')) { $orig_charset = 'windows-1252'; } /* Search for second delimiting question mark (encoding). */ if (($d2 = strpos($string, '?', $d1 + 1)) === false) { break; } $encoding = substr($string, $d1 + 1, $d2 - $d1 - 1); /* Search for end of encoded data. */ if (($end = strpos($string, '?=', $d2 + 1)) === false) { break; } $encoded_text = substr($string, $d2 + 1, $end - $d2 - 1); switch ($encoding) { case 'Q': case 'q': $out .= Horde_String::convertCharset( quoted_printable_decode( str_replace('_', ' ', $encoded_text) ), $orig_charset, 'UTF-8' ); break; case 'B': case 'b': $out .= Horde_String::convertCharset( base64_decode($encoded_text), $orig_charset, 'UTF-8' ); break; default: // Ignore unknown encoding. break; } $old_pos = $end + 2; } return $out . substr($string, $old_pos); } /* Deprecated methods. */ /** * @deprecated Use Horde_Mime_Headers_MessageId::create() instead. */ public static function generateMessageId() { return Horde_Mime_Headers_MessageId::create()->value; } /** * @deprecated Use Horde_Mime_Uudecode instead. */ public static function uudecode($input) { $uudecode = new Horde_Mime_Uudecode($input); return iterator_to_array($uudecode); } /** * @deprecated */ public static $brokenRFC2231 = false; /** * @deprecated */ const MIME_PARAM_QUOTED = '/[\x01-\x20\x22\x28\x29\x2c\x2f\x3a-\x40\x5b-\x5d]/'; /** * @deprecated Use Horde_Mime_Headers_ContentParam#encode() instead. */ public static function encodeParam($name, $val, array $opts = array()) { $cp = new Horde_Mime_Headers_ContentParam( 'UNUSED', array($name => $val) ); return $cp->encode(array_merge(array( 'broken_rfc2231' => self::$brokenRFC2231 ), $opts)); } /** * @deprecated Use Horde_Mime_Headers_ELement_ContentParam instead. */ public static function decodeParam($type, $data) { $cp = new Horde_Mime_Headers_ContentParam( 'UNUSED', $data ); if (strlen($cp->value)) { $val = $cp->value; } else { $val = (Horde_String::lower($type) == 'content-type') ? 'text/plain' : 'attachment'; } return array( 'params' => $cp->params, 'val' => $val ); } /** * @deprecated Use Horde_Mime_Id instead. */ public static function mimeIdArithmetic($id, $action, $options = array()) { $id_ob = new Horde_Mime_Id($id); switch ($action) { case 'down': $action = $id_ob::ID_DOWN; break; case 'next': $action = $id_ob::ID_NEXT; break; case 'prev': $action = $id_ob::ID_PREV; break; case 'up': $action = $id_ob::ID_UP; break; } return $id_ob->idArithmetic($action, $options); } /** * @deprecated Use Horde_Mime_Id instead. */ public static function isChild($base, $id) { $id_ob = new Horde_Mime_Id($base); return $id_ob->isChild($id); } /** * @deprecated Use Horde_Mime_QuotedPrintable instead. */ public static function quotedPrintableEncode($text, $eol = self::EOL, $wrap = 76) { return Horde_Mime_QuotedPrintable::encode($text, $eol, $wrap); } } Horde_Mime-2.10.3/locale/ar/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000057313055000404017700 0ustar janjan$,8A9Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Horde_Mime-2.10.3/locale/ar/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000314313055000404017677 0ustar janjan# Arabic translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "" #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "قائمة عناوين المساعدة" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/bg/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000057313055000404017666 0ustar janjan$,8A9Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Horde_Mime-2.10.3/locale/bg/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000312113055000404017661 0ustar janjan# Bulgarian translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "" #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "Помощ теми" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/bs/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000057313055000404017702 0ustar janjan$,8A9Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Horde_Mime-2.10.3/locale/bs/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000332413055000404017702 0ustar janjan# Bosnian translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "Nedozvoljena slova u email adresi." #: lib/Horde/Mime/Headers.php:519 #, fuzzy msgid "List-Archive" msgstr "Sakrij neupisane" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "Pomoć" #: lib/Horde/Mime/Headers.php:521 #, fuzzy msgid "List-Id" msgstr "Pomoć" #: lib/Horde/Mime/Headers.php:517 #, fuzzy msgid "List-Owner" msgstr "Pomoć" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 #, fuzzy msgid "List-Subscribe" msgstr "Sakrij neupisane" #: lib/Horde/Mime/Headers.php:515 #, fuzzy msgid "List-Unsubscribe" msgstr "Sakrij neupisane" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/ca/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000137613055000404017663 0ustar janjan d    $.=AN     Disposition NotificationList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribeProject-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Notificació de recepcióList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribeHorde_Mime-2.10.3/locale/ca/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000352113055000404017660 0ustar janjan# Catalan translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "Notificació de recepció" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "L'adreça de destinació no és vàlida." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "List-Archive" #: lib/Horde/Mime/Headers.php:514 msgid "List-Help" msgstr "List-Help" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "List-Id" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "List-Owner" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "List-Post" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "List-Subscribe" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "List-Unsubscribe" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, fuzzy, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "S'ha mostrat el missatge enviat el %s a %s amb l'assumpte \"%s\". Això no " "garanteix que s'hagi llegit o entès el missatge." Horde_Mime-2.10.3/locale/cs/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000154713055000404017705 0ustar janjan d    $.=N  +=S Disposition NotificationList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribeProject-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2; Dispoziční upozorněníSeznam-ArchivSeznam-NápovědaSeznam-IdSeznam-VlastníkSeznam-OdesláníSeznam-PřihlášeníSeznam-OdhlášeníHorde_Mime-2.10.3/locale/cs/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000371113055000404017703 0ustar janjan# Czech translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "Dispoziční upozornění" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "Neplatná adresa příjemce." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "Seznam-Archiv" #: lib/Horde/Mime/Headers.php:514 msgid "List-Help" msgstr "Seznam-Nápověda" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "Seznam-Id" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "Seznam-Vlastník" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "Seznam-Odeslání" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "Seznam-Přihlášení" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "Seznam-Odhlášení" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, fuzzy, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Zpráva zaslaná v %s k %s s předmětem \"%s\" byla zobrazena.\n" "Toto nezaručuje, že zpráva byla přečtena nebo že jí adresát(ka) rozuměl(a)." Horde_Mime-2.10.3/locale/da/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000235113055000404017656 0ustar janjan | !: R _i q |J    +6EVxp    Disposition NotificationHTML Version of MessageList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2013-10-29 10:13+0100 PO-Revision-Date: 2014-03-20 21:18+0100 Last-Translator: Erling Preben Hansen Language-Team: i18n@lists.horde.org Language: da MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Dispositions meldingHTML-udgave af beskedListe-ArkivetListe-HjælpListe-IdListe-EjerListe-PostListe-AbonnérListe-AfabonnérRentekst-udgave af beskedBeskeden sendt den. %s til %s med emnet "%s" er set. This is no guarantee that the message has been read or understood.Horde_Mime-2.10.3/locale/da/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000350313055000404017661 0ustar janjan# Danish translations for Horde_Mime package. # Copyright (C) 2014 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime package. # Erling Preben Hansen , 2013-2014. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2013-10-29 10:13+0100\n" "PO-Revision-Date: 2014-03-20 21:18+0100\n" "Last-Translator: Erling Preben Hansen \n" "Language-Team: i18n@lists.horde.org\n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/Horde/Mime/Mdn.php:188 msgid "Disposition Notification" msgstr "Dispositions melding" #: lib/Horde/Mime/Mail.php:421 msgid "HTML Version of Message" msgstr "HTML-udgave af besked" #: lib/Horde/Mime/Headers.php:542 msgid "List-Archive" msgstr "Liste-Arkivet" #: lib/Horde/Mime/Headers.php:537 msgid "List-Help" msgstr "Liste-Hjælp" #: lib/Horde/Mime/Headers.php:544 msgid "List-Id" msgstr "Liste-Id" #: lib/Horde/Mime/Headers.php:540 msgid "List-Owner" msgstr "Liste-Ejer" #: lib/Horde/Mime/Headers.php:541 msgid "List-Post" msgstr "Liste-Post" #: lib/Horde/Mime/Headers.php:539 msgid "List-Subscribe" msgstr "Liste-Abonnér" #: lib/Horde/Mime/Headers.php:538 msgid "List-Unsubscribe" msgstr "Liste-Afabonnér" #: lib/Horde/Mime/Mail.php:419 msgid "Plaintext Version of Message" msgstr "Rentekst-udgave af besked" #: lib/Horde/Mime/Mdn.php:200 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Beskeden sendt den. %s til %s med emnet \"%s\" er set.\n" "\n" "This is no guarantee that the message has been read or understood." Horde_Mime-2.10.3/locale/de/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000171313055000404017663 0ustar janjanDlw^ Disposition NotificationHTML Version of MessagePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2015-01-08 11:22+0100 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); EmpfangsbestätigungHTML-Version der NachrichtTextversion der NachrichtDie Nachricht mit dem Betreff "%3$s", die am %1$s an %2$s geschickt wurde, ist angezeigt worden. Das heißt nicht, dass die Nachricht auch gelesen oder verstanden wurde.Horde_Mime-2.10.3/locale/de/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000250113055000404017662 0ustar janjan# German translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2015-01-08 11:22+0100\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/Horde/Mime/Mdn.php:188 msgid "Disposition Notification" msgstr "Empfangsbestätigung" #: lib/Horde/Mime/Mail.php:439 msgid "HTML Version of Message" msgstr "HTML-Version der Nachricht" #: lib/Horde/Mime/Mail.php:437 msgid "Plaintext Version of Message" msgstr "Textversion der Nachricht" #: lib/Horde/Mime/Mdn.php:201 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Die Nachricht mit dem Betreff \"%3$s\", die am %1$s an %2$s geschickt wurde, " "ist angezeigt worden.\n" "\n" "Das heißt nicht, dass die Nachricht auch gelesen oder verstanden wurde." Horde_Mime-2.10.3/locale/el/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000237413055000404017677 0ustar janjanL |( %F+l;BDisposition NotificationHTML Version of MessageInvalid character in e-mail address: %s.Plaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2015-10-02 16:01+0200 Last-Translator: Antonis Limperis Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Language: el X-Generator: Poedit 1.7.1 Ειδοποίηση ΔιάθεσηςΈκδοση HTML του μηνύματοςΜη έγκυρος χαρακτήρας στο e-mail: %s.Έκδοση απλού κειμένου του μηνύματοςΤο μήνυμα που στάλθηκε στις %s στον %s με θέμα %s εμφανίσθηκε. Αυτό δεν αποτελεί επιβεβαίωση ότι διαβάσθηκε και έγινε κατανοητό.Horde_Mime-2.10.3/locale/el/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000424213055000404017676 0ustar janjan# Greek translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2015-10-02 16:01+0200\n" "Last-Translator: Antonis Limperis \n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Language: el\n" "X-Generator: Poedit 1.7.1\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "Ειδοποίηση Διάθεσης" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "Έκδοση HTML του μηνύματος" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "Μη έγκυρος χαρακτήρας στο e-mail: %s." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "Λίστα θεμάτων Βοήθειας" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 #, fuzzy msgid "List-Subscribe" msgstr "Υποδείκτης" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "Έκδοση απλού κειμένου του μηνύματος" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Το μήνυμα που στάλθηκε στις %s στον %s με θέμα %s εμφανίσθηκε.\n" "Αυτό δεν αποτελεί επιβεβαίωση ότι διαβάσθηκε και έγινε κατανοητό." Horde_Mime-2.10.3/locale/es/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000243513055000404017704 0ustar janjan | !: R _i q |J  ' 4> F Q[j{    Disposition NotificationHTML Version of MessageList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2013-07-16 21:24+0200 PO-Revision-Date: 2013-06-11 20:26+0200 Last-Translator: Manuel P. Ayala , Juan C. Blanco Language-Team: i18n@lists.horde.org Language: es MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Notificación de consultaVersión HTML del mensajeList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribeVersión de texto del mensajeSe ha mostrado el mensaje enviado el %s a %s con el asunto "%s". Ésto no garantiza que el mensaje haya sido leído o comprendido.Horde_Mime-2.10.3/locale/es/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000355113055000404017707 0ustar janjan# Spanish translations for Horde_Mime package. # Copyright (C) 2013 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime package. # Automatically generated, 2013. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime \n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2013-07-16 21:24+0200\n" "PO-Revision-Date: 2013-06-11 20:26+0200\n" "Last-Translator: Manuel P. Ayala , Juan C. Blanco " "\n" "Language-Team: i18n@lists.horde.org\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/Horde/Mime/Mdn.php:188 msgid "Disposition Notification" msgstr "Notificación de consulta" #: lib/Horde/Mime/Mail.php:421 msgid "HTML Version of Message" msgstr "Versión HTML del mensaje" #: lib/Horde/Mime/Headers.php:540 msgid "List-Archive" msgstr "List-Archive" #: lib/Horde/Mime/Headers.php:535 msgid "List-Help" msgstr "List-Help" #: lib/Horde/Mime/Headers.php:542 msgid "List-Id" msgstr "List-Id" #: lib/Horde/Mime/Headers.php:538 msgid "List-Owner" msgstr "List-Owner" #: lib/Horde/Mime/Headers.php:539 msgid "List-Post" msgstr "List-Post" #: lib/Horde/Mime/Headers.php:537 msgid "List-Subscribe" msgstr "List-Subscribe" #: lib/Horde/Mime/Headers.php:536 msgid "List-Unsubscribe" msgstr "List-Unsubscribe" #: lib/Horde/Mime/Mail.php:419 msgid "Plaintext Version of Message" msgstr "Versión de texto del mensaje" #: lib/Horde/Mime/Mdn.php:200 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Se ha mostrado el mensaje enviado el %s a %s con el asunto \"%s\".\n" "\n" "Ésto no garantiza que el mensaje haya sido leído o comprendido." Horde_Mime-2.10.3/locale/et/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000244013055000404017701 0ustar janjan 01J(b    l % B OY a lvx    Disposition NotificationHTML Version of MessageInvalid character in e-mail address: %s.List-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Disposition NotificationKirja HTML variantLubamatu märk e-posti aadressis: %s.List-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribeKirja tekstikujuKiri mis saadeti %s aadressile %s teemaga "%s" on avatud. See ei garanteeri et kiri läbi loeti või sellest aru saadi.Horde_Mime-2.10.3/locale/et/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000362413055000404017711 0ustar janjan# Estonian translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "Disposition Notification" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "Kirja HTML variant" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "Lubamatu märk e-posti aadressis: %s." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "List-Archive" #: lib/Horde/Mime/Headers.php:514 msgid "List-Help" msgstr "List-Help" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "List-Id" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "List-Owner" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "List-Post" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "List-Subscribe" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "List-Unsubscribe" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "Kirja tekstikuju" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Kiri mis saadeti %s aadressile %s teemaga \"%s\" on avatud.\n" "\n" "See ei garanteeri et kiri läbi loeti või sellest aru saadi." Horde_Mime-2.10.3/locale/eu/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000246113055000404017705 0ustar janjan | !: R _i q |J  ' 4> F Q[j{    Disposition NotificationHTML Version of MessageList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2012-08-29 13:30+0200 PO-Revision-Date: 2013-01-16 13:49+0100 Last-Translator: Ibon Igartua Language-Team: Euskal Herriko Unibertsitatea Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Poedit-Language: Basque Hartu-agiriaMezuaren HTML bertsioaList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribeMezuaren testu soileko bertsioaData: %s, Nori zuzendua: %s eta Gaia: "%s" duen mezua bistaratuta izan da. Horrek ez du esan nahi hartzaileak mezua irakurri edo ulertu egin duenik.Horde_Mime-2.10.3/locale/eu/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000357713055000404017721 0ustar janjan# Basque translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2012-08-29 13:30+0200\n" "PO-Revision-Date: 2013-01-16 13:49+0100\n" "Last-Translator: Ibon Igartua \n" "Language-Team: Euskal Herriko Unibertsitatea \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Language: Basque\n" #: lib/Horde/Mime/Mdn.php:188 msgid "Disposition Notification" msgstr "Hartu-agiria" #: lib/Horde/Mime/Mail.php:419 msgid "HTML Version of Message" msgstr "Mezuaren HTML bertsioa" #: lib/Horde/Mime/Headers.php:540 msgid "List-Archive" msgstr "List-Archive" #: lib/Horde/Mime/Headers.php:535 msgid "List-Help" msgstr "List-Help" #: lib/Horde/Mime/Headers.php:542 msgid "List-Id" msgstr "List-Id" #: lib/Horde/Mime/Headers.php:538 msgid "List-Owner" msgstr "List-Owner" #: lib/Horde/Mime/Headers.php:539 msgid "List-Post" msgstr "List-Post" #: lib/Horde/Mime/Headers.php:537 msgid "List-Subscribe" msgstr "List-Subscribe" #: lib/Horde/Mime/Headers.php:536 msgid "List-Unsubscribe" msgstr "List-Unsubscribe" #: lib/Horde/Mime/Mail.php:417 msgid "Plaintext Version of Message" msgstr "Mezuaren testu soileko bertsioa" #: lib/Horde/Mime/Mdn.php:200 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Data: %s, Nori zuzendua: %s eta Gaia: \"%s\" duen mezua bistaratuta izan " "da.\n" "\n" "Horrek ez du esan nahi hartzaileak mezua irakurri edo ulertu egin duenik." Horde_Mime-2.10.3/locale/fa/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000147513055000404017666 0ustar janjan d    $.=AN  Disposition NotificationList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribeProject-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit حالت تذکرفهرست آرشیوفهرست راهنمافهرست Idفهرست مالکفهرست پستیفهرست عضویّتفهرست عدم عضویّتHorde_Mime-2.10.3/locale/fa/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000371313055000404017666 0ustar janjan# Persian translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "حالت تذکر" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "آدرس مقصد نامعتبر" #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "فهرست آرشیو" #: lib/Horde/Mime/Headers.php:514 msgid "List-Help" msgstr "فهرست راهنما" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "فهرست Id" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "فهرست مالک" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "فهرست پستی" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "فهرست عضویّت" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "فهرست عدم عضویّت" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, fuzzy, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "پیغام فرستاده شده روی %s به %s با موضوع \"%s\" نمایش داده شده است.\n" "تضمینی برای خوانده شدن و یا درک آن وجود ندارد" Horde_Mime-2.10.3/locale/fi/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000242013055000404017665 0ustar janjan | !: R _i q |J   - :Gdz    Disposition NotificationHTML Version of MessageList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2012-08-29 13:30+0200 PO-Revision-Date: 2012-03-07 15:08:44+0200 Last-Translator: Leena Heino Language-Team: Finnish Language: fi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); PerillemenoilmoitusViestin HTML-versioLista-ArkistoLista-OhjeLista-IdLista-OmistajaLista-ViestiLista-TilausLista-Tilauksen-lopettaminenViestin tekstiversio.Viesti lähetetty %s vastaanottajalle %s otsikkona "%s" on näytetty hänelle. Tämä ei tarkoita sitä, että viestiä olisi luettu tai ymmärretty.Horde_Mime-2.10.3/locale/fi/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000353713055000404017702 0ustar janjan# Finnish translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Leena Heino , 2010-2012. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2012-08-29 13:30+0200\n" "PO-Revision-Date: 2012-03-07 15:08:44+0200\n" "Last-Translator: Leena Heino \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/Horde/Mime/Mdn.php:188 msgid "Disposition Notification" msgstr "Perillemenoilmoitus" #: lib/Horde/Mime/Mail.php:419 msgid "HTML Version of Message" msgstr "Viestin HTML-versio" #: lib/Horde/Mime/Headers.php:540 msgid "List-Archive" msgstr "Lista-Arkisto" #: lib/Horde/Mime/Headers.php:535 msgid "List-Help" msgstr "Lista-Ohje" #: lib/Horde/Mime/Headers.php:542 msgid "List-Id" msgstr "Lista-Id" #: lib/Horde/Mime/Headers.php:538 msgid "List-Owner" msgstr "Lista-Omistaja" #: lib/Horde/Mime/Headers.php:539 msgid "List-Post" msgstr "Lista-Viesti" #: lib/Horde/Mime/Headers.php:537 msgid "List-Subscribe" msgstr "Lista-Tilaus" #: lib/Horde/Mime/Headers.php:536 msgid "List-Unsubscribe" msgstr "Lista-Tilauksen-lopettaminen" #: lib/Horde/Mime/Mail.php:417 msgid "Plaintext Version of Message" msgstr "Viestin tekstiversio." #: lib/Horde/Mime/Mdn.php:200 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Viesti lähetetty %s vastaanottajalle %s otsikkona \"%s\" on näytetty " "hänelle.\n" "Tämä ei tarkoita sitä, että viestiä olisi luettu tai ymmärretty." Horde_Mime-2.10.3/locale/fr/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000262113055000404017701 0ustar janjan 01J(b    k7Qfw    Disposition NotificationHTML Version of MessageInvalid character in e-mail address: %s.List-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); Avis de livraisonVersion HTML du messageCaractère invalide dans l'adresse de messagerie : %s.Archives de la listeAide de la listeId. de la listePropriétaire de la listeEnvoi à la listeAbonnement à la listeDésabonnement de la listeVersion texte brut du messageLe message envoyé le %s à %s avec comme sujet « %s » a été affiché. Il n'y a aucune garantie que ce message ait été lu ou compris.Horde_Mime-2.10.3/locale/fr/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000377513055000404017717 0ustar janjan# French translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "Avis de livraison" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "Version HTML du message" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "Caractère invalide dans l'adresse de messagerie : %s." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "Archives de la liste" #: lib/Horde/Mime/Headers.php:514 msgid "List-Help" msgstr "Aide de la liste" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "Id. de la liste" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "Propriétaire de la liste" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "Envoi à la liste" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "Abonnement à la liste" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "Désabonnement de la liste" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "Version texte brut du message" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Le message envoyé le %s à %s avec comme sujet « %s » a été affiché.\n" "Il n'y a aucune garantie que ce message ait été lu ou compris." Horde_Mime-2.10.3/locale/gl/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000057313055000404017700 0ustar janjan$,8A9Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Horde_Mime-2.10.3/locale/gl/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000312513055000405017700 0ustar janjan# Galician translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "" #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "Listar os temas de axuda" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/he/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000064613055000405017674 0ustar janjan$,8l9Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Horde_Mime-2.10.3/locale/he/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000316213055000405017673 0ustar janjan# Hebrew translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "" #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "עזרה" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/hr/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000263313055000405017707 0ustar janjan 01J(b    Yu$    g3    Disposition NotificationHTML Version of MessageInvalid character in e-mail address: %s.List-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2011-11-04 15:10+0100 PO-Revision-Date: 2011-11-08 16:49+0200 Last-Translator: Valentin Vidic Language-Team: i18n@lists.horde.org Language: hr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); Obavijest o raspoloživostiHTML verzija porukeNeispravan znak u e-mail adresi: %s.Lista-ArhivaLista-PomoćID listeVlasnik listePošiljanje na listuPretplati se na listuOdjavi sa listePoruka kao obični tekstPoruka poslana %s za %s s temom "%s" je prikazana. To ne jamči da je poruka pročitana ili shvaćena.Horde_Mime-2.10.3/locale/hr/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000414713055000405017714 0ustar janjan# Croatian translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Valentin Vidic , 2011. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2011-11-04 15:10+0100\n" "PO-Revision-Date: 2011-11-08 16:49+0200\n" "Last-Translator: Valentin Vidic \n" "Language-Team: i18n@lists.horde.org\n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: lib/Horde/Mime/Mdn.php:191 msgid "Disposition Notification" msgstr "Obavijest o raspoloživosti" #: lib/Horde/Mime/Mail.php:457 msgid "HTML Version of Message" msgstr "HTML verzija poruke" #: lib/Horde/Mime/Mail.php:401 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "Neispravan znak u e-mail adresi: %s." #: lib/Horde/Mime/Headers.php:534 msgid "List-Archive" msgstr "Lista-Arhiva" #: lib/Horde/Mime/Headers.php:529 msgid "List-Help" msgstr "Lista-Pomoć" #: lib/Horde/Mime/Headers.php:536 msgid "List-Id" msgstr "ID liste" # vlasnik? #: lib/Horde/Mime/Headers.php:532 msgid "List-Owner" msgstr "Vlasnik liste" # Lista - Šalji #: lib/Horde/Mime/Headers.php:533 msgid "List-Post" msgstr "Pošiljanje na listu" # Lista - Pretplati ili Prijavi se #: lib/Horde/Mime/Headers.php:531 msgid "List-Subscribe" msgstr "Pretplati se na listu" #: lib/Horde/Mime/Headers.php:530 msgid "List-Unsubscribe" msgstr "Odjavi sa liste" #: lib/Horde/Mime/Mail.php:455 msgid "Plaintext Version of Message" msgstr "Poruka kao obični tekst" #: lib/Horde/Mime/Mdn.php:203 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Poruka poslana %s za %s s temom \"%s\" je prikazana.\n" "\n" "To ne jamči da je poruka pročitana ili shvaćena." Horde_Mime-2.10.3/locale/hu/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000260313055000405017707 0ustar janjan | !: R _i q |J "4EX x'    Disposition NotificationHTML Version of MessageList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2014-05-29 09:14+0200 PO-Revision-Date: 2014-07-14 11:35+0200 Last-Translator: Andras Galos Language-Team: i18n@lists.horde.org Language: hu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Kézbesítési értesítésA levél HTML változataLista archívumLista súgóLista azonosítóLista tulajdonosLista levélírásLista feliratkozás (subscribe)Lista leiratkozás (unsubscribe)A levél egyszerű szöveges változataA levél, melyet %s napján küldött %s címzettnek "%s" tárgyban, a címzett számítógépén megjelent. Ez nem jelent garanciát arra, hogy a levelet el is olvasták és meg is értették.Horde_Mime-2.10.3/locale/hu/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000365613055000405017723 0ustar janjan# Hungarian translations for Horde_Mime module. # Copyright 2010-2013 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime \n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2014-05-29 09:14+0200\n" "PO-Revision-Date: 2014-07-14 11:35+0200\n" "Last-Translator: Andras Galos \n" "Language-Team: i18n@lists.horde.org\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/Horde/Mime/Mdn.php:188 msgid "Disposition Notification" msgstr "Kézbesítési értesítés" #: lib/Horde/Mime/Mail.php:421 msgid "HTML Version of Message" msgstr "A levél HTML változata" #: lib/Horde/Mime/Headers.php:547 msgid "List-Archive" msgstr "Lista archívum" #: lib/Horde/Mime/Headers.php:542 msgid "List-Help" msgstr "Lista súgó" #: lib/Horde/Mime/Headers.php:549 msgid "List-Id" msgstr "Lista azonosító" #: lib/Horde/Mime/Headers.php:545 msgid "List-Owner" msgstr "Lista tulajdonos" #: lib/Horde/Mime/Headers.php:546 msgid "List-Post" msgstr "Lista levélírás" #: lib/Horde/Mime/Headers.php:544 msgid "List-Subscribe" msgstr "Lista feliratkozás (subscribe)" #: lib/Horde/Mime/Headers.php:543 msgid "List-Unsubscribe" msgstr "Lista leiratkozás (unsubscribe)" #: lib/Horde/Mime/Mail.php:419 msgid "Plaintext Version of Message" msgstr "A levél egyszerű szöveges változata" #: lib/Horde/Mime/Mdn.php:200 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "A levél, melyet %s napján küldött %s címzettnek \"%s\" tárgyban, a címzett " "számítógépén megjelent.\n" "Ez nem jelent garanciát arra, hogy a levelet el is olvasták és meg is " "értették." Horde_Mime-2.10.3/locale/id/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000057313055000405017673 0ustar janjan$,8A9Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=ASCII Content-Transfer-Encoding: 8bit Horde_Mime-2.10.3/locale/id/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000326113055000405017673 0ustar janjan# Indonesian translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ASCII\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "Pengganti alamat email" #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "Daftar Topik Bantuan" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 #, fuzzy msgid "List-Subscribe" msgstr "Angka/huruf/simbol yang ditulis dibawah garis baris teks" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/is/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000057313055000405017712 0ustar janjan$,8A9Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Horde_Mime-2.10.3/locale/is/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000317513055000405017716 0ustar janjan# Icelandic translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "Netfang" #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "Hjálp" #: lib/Horde/Mime/Headers.php:521 #, fuzzy msgid "List-Id" msgstr "Hjálp" #: lib/Horde/Mime/Headers.php:517 #, fuzzy msgid "List-Owner" msgstr "Hjálp" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 #, fuzzy msgid "List-Subscribe" msgstr "Efni" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/it/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000255213055000405017712 0ustar janjan 01J(b    l."Q a nx     Disposition NotificationHTML Version of MessageInvalid character in e-mail address: %s.List-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Notifica DisposizioneHTML Versione del MessaggioCarattere non valido nell'indirizzo email : %sElenco-Archivioelenco-AiutoElenco-IdElenco-ProprietarioElenco-PostElenco-SottoscriviElenco-Revoca sottoscrizioneMessaggio come testo sempliceIn messaggio inviato su %s a %s con oggetto "%s" è stato mostrato. Non c'è garanzia che il messaggio sia stato letto o compreso.Horde_Mime-2.10.3/locale/it/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000373513055000405017721 0ustar janjan# Italian translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "Notifica Disposizione" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "HTML Versione del Messaggio" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "Carattere non valido nell'indirizzo email : %s" #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "Elenco-Archivio" #: lib/Horde/Mime/Headers.php:514 msgid "List-Help" msgstr "elenco-Aiuto" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "Elenco-Id" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "Elenco-Proprietario" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "Elenco-Post" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "Elenco-Sottoscrivi" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "Elenco-Revoca sottoscrizione" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "Messaggio come testo semplice" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "In messaggio inviato su %s a %s con oggetto \"%s\" è stato mostrato.\n" "\n" "Non c'è garanzia che il messaggio sia stato letto o compreso." Horde_Mime-2.10.3/locale/ja/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000251313055000405017665 0ustar janjan | !: R _i q |J   ' / :DS-d    Disposition NotificationHTML Version of MessageList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2012-08-29 13:30+0200 PO-Revision-Date: 2012-10-14 11:30+0900 Last-Translator: Hiromi Kimura Language-Team: i18n@lists.horde.org Language: ja MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Generator: Poedit 1.5.4 開封通知HTML 版のメッセージList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-Unsubscribeメッセージのプレインテキスト版日付:%s、宛先:%s、件名:"%s" のメッセージが表示されました。 しかし、相手に読まれたか、あるいは了解されたかは保証できません。Horde_Mime-2.10.3/locale/ja/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000361513055000405017674 0ustar janjan# Japanese translation for Horde. # Copyright 2004-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde package. # Hiromi Kimura # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2012-08-29 13:30+0200\n" "PO-Revision-Date: 2012-10-14 11:30+0900\n" "Last-Translator: Hiromi Kimura \n" "Language-Team: i18n@lists.horde.org\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 1.5.4\n" #: lib/Horde/Mime/Mdn.php:188 msgid "Disposition Notification" msgstr "開封通知" #: lib/Horde/Mime/Mail.php:419 msgid "HTML Version of Message" msgstr "HTML 版のメッセージ" #: lib/Horde/Mime/Headers.php:540 msgid "List-Archive" msgstr "List-Archive" #: lib/Horde/Mime/Headers.php:535 msgid "List-Help" msgstr "List-Help" #: lib/Horde/Mime/Headers.php:542 msgid "List-Id" msgstr "List-Id" #: lib/Horde/Mime/Headers.php:538 msgid "List-Owner" msgstr "List-Owner" #: lib/Horde/Mime/Headers.php:539 msgid "List-Post" msgstr "List-Post" #: lib/Horde/Mime/Headers.php:537 msgid "List-Subscribe" msgstr "List-Subscribe" #: lib/Horde/Mime/Headers.php:536 msgid "List-Unsubscribe" msgstr "List-Unsubscribe" #: lib/Horde/Mime/Mail.php:417 msgid "Plaintext Version of Message" msgstr "メッセージのプレインテキスト版" #: lib/Horde/Mime/Mdn.php:200 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "日付:%s、宛先:%s、件名:\"%s\" のメッセージが表示されました。\n" "しかし、相手に読まれたか、あるいは了解されたかは保証できません。" Horde_Mime-2.10.3/locale/km/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000057313055000405017706 0ustar janjan$,8A9Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Horde_Mime-2.10.3/locale/km/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000331013055000405017701 0ustar janjan# Khmer translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "ប្ដូរ​អាសយដ្ឋាន​អ៊ីមែល" #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "ជំនួយ" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 #, fuzzy msgid "List-Subscribe" msgstr "អក្សរ​តូច​ក្រោម" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/ko/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000063713055000405017711 0ustar janjan$,8e9Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; Horde_Mime-2.10.3/locale/ko/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000351513055000405017712 0ustar janjan# Korean translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "잘못된 이메일 주소" #: lib/Horde/Mime/Headers.php:519 #, fuzzy msgid "List-Archive" msgstr "사용하지 않는 메일함 숨김" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "도움알 목차" #: lib/Horde/Mime/Headers.php:521 #, fuzzy msgid "List-Id" msgstr "도움알 목차" #: lib/Horde/Mime/Headers.php:517 #, fuzzy msgid "List-Owner" msgstr "도움알 목차" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 #, fuzzy msgid "List-Subscribe" msgstr "사용하지 않는 메일함 숨김" #: lib/Horde/Mime/Headers.php:515 #, fuzzy msgid "List-Unsubscribe" msgstr "사용하지 않는 메일함 숨김" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/lt/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000275313055000405017720 0ustar janjan 01J(b    =\+q ,Ic    Disposition NotificationHTML Version of MessageInvalid character in e-mail address: %s.List-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2011-05-28 01:09+0300 PO-Revision-Date: 2011-06-28 00:44+0300 Last-Translator: Vilius Šumskas Language-Team: Lithuanian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2); Laiško pristatymo pranešimaiLaiško HTML versijaNeleistinas simbolis el. pašto adrese: %s.Konferencijos archyvasKonferencijos pagalbaKonferencijos IDKonferencijos savininkasRašyti į konferencijąPrisijungti prie konferencijosAtsijungti nuo konferencijosTekstinė laiško versijaLaiškas išsiųstas %s adresatui %s tema "%s" buvo parodytas. Tačiau tai negarantuoja kad laiškas buvo perskaitytas arba suprastas.Horde_Mime-2.10.3/locale/lt/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000415413055000405017720 0ustar janjan# Lithuanian translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Vilius Šumskas , 2011. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2011-05-28 01:09+0300\n" "PO-Revision-Date: 2011-06-28 00:44+0300\n" "Last-Translator: Vilius Šumskas \n" "Language-Team: Lithuanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" "%100<10 || n%100>=20) ? 1 : 2);\n" #: lib/Horde/Mime/Mdn.php:191 msgid "Disposition Notification" msgstr "Laiško pristatymo pranešimai" #: lib/Horde/Mime/Mail.php:446 msgid "HTML Version of Message" msgstr "Laiško HTML versija" #: lib/Horde/Mime/Mail.php:390 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "Neleistinas simbolis el. pašto adrese: %s." #: lib/Horde/Mime/Headers.php:534 msgid "List-Archive" msgstr "Konferencijos archyvas" #: lib/Horde/Mime/Headers.php:529 msgid "List-Help" msgstr "Konferencijos pagalba" #: lib/Horde/Mime/Headers.php:536 msgid "List-Id" msgstr "Konferencijos ID" #: lib/Horde/Mime/Headers.php:532 msgid "List-Owner" msgstr "Konferencijos savininkas" #: lib/Horde/Mime/Headers.php:533 msgid "List-Post" msgstr "Rašyti į konferenciją" #: lib/Horde/Mime/Headers.php:531 msgid "List-Subscribe" msgstr "Prisijungti prie konferencijos" #: lib/Horde/Mime/Headers.php:530 msgid "List-Unsubscribe" msgstr "Atsijungti nuo konferencijos" #: lib/Horde/Mime/Mail.php:444 msgid "Plaintext Version of Message" msgstr "Tekstinė laiško versija" #: lib/Horde/Mime/Mdn.php:202 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Laiškas išsiųstas %s adresatui %s tema \"%s\" buvo parodytas.\n" "\n" "Tačiau tai negarantuoja kad laiškas buvo perskaitytas arba suprastas." Horde_Mime-2.10.3/locale/lv/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000302413055000405017712 0ustar janjan 01J(b    v'  "8S%o~    Disposition NotificationHTML Version of MessageInvalid character in e-mail address: %s.List-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2011-05-18 12:23+0200 PO-Revision-Date: 2011-10-16 15:21+0300 Last-Translator: Jānis Eisaks Language-Team: i18n@lists.horde.org Language: lv MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2); X-Poedit-Language: Latvian X-Poedit-Country: LATVIA X-Poedit-SourceCharset: utf-8 Izlasīšanas apstiprinājumsVēstules HTML versijaNeatļauts simbols e-pasta adresē: %s.Vēstkopas arhīvsVēstkopas palīdzībaVēstkopas IDVēstkopas īpašnieksSūtījums vēstkopaiParakstīties uz vēstkopuAtrakstīties no vēstkopasVēstules vienkāršā teksta versija%s lietotājam %s nosūtītā vēstule ar tematu "%s" ir atvērta. Tas gan nenozīmē, ka vēstule ir izlasīta vai saprasta.Horde_Mime-2.10.3/locale/lv/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000423413055000405017721 0ustar janjan# Latvian translations for Horde_Mime package. # Copyright 2011-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime package. # Automatically generated, 2011. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2011-05-18 12:23+0200\n" "PO-Revision-Date: 2011-10-16 15:21+0300\n" "Last-Translator: Jānis Eisaks \n" "Language-Team: i18n@lists.horde.org\n" "Language: lv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " "2);\n" "X-Poedit-Language: Latvian\n" "X-Poedit-Country: LATVIA\n" "X-Poedit-SourceCharset: utf-8\n" #: lib/Horde/Mime/Mdn.php:191 msgid "Disposition Notification" msgstr "Izlasīšanas apstiprinājums" #: lib/Horde/Mime/Mail.php:446 msgid "HTML Version of Message" msgstr "Vēstules HTML versija" #: lib/Horde/Mime/Mail.php:390 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "Neatļauts simbols e-pasta adresē: %s." #: lib/Horde/Mime/Headers.php:534 msgid "List-Archive" msgstr "Vēstkopas arhīvs" #: lib/Horde/Mime/Headers.php:529 msgid "List-Help" msgstr "Vēstkopas palīdzība" #: lib/Horde/Mime/Headers.php:536 msgid "List-Id" msgstr "Vēstkopas ID" #: lib/Horde/Mime/Headers.php:532 msgid "List-Owner" msgstr "Vēstkopas īpašnieks" #: lib/Horde/Mime/Headers.php:533 msgid "List-Post" msgstr "Sūtījums vēstkopai" #: lib/Horde/Mime/Headers.php:531 msgid "List-Subscribe" msgstr "Parakstīties uz vēstkopu" #: lib/Horde/Mime/Headers.php:530 msgid "List-Unsubscribe" msgstr "Atrakstīties no vēstkopas" #: lib/Horde/Mime/Mail.php:444 msgid "Plaintext Version of Message" msgstr "Vēstules vienkāršā teksta versija" #: lib/Horde/Mime/Mdn.php:202 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "%s lietotājam %s nosūtītā vēstule ar tematu \"%s\" ir atvērta.\n" "\n" "Tas gan nenozīmē, ka vēstule ir izlasīta vai saprasta." Horde_Mime-2.10.3/locale/mk/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000057313055000405017706 0ustar janjan$,8A9Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Horde_Mime-2.10.3/locale/mk/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000315013055000405017703 0ustar janjan# Macedonian translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "" #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "Излистај теми за помош" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/nb/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000075213055000405017675 0ustar janjan,<PQljDisposition NotificationProject-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Melding om ordningHorde_Mime-2.10.3/locale/nb/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000330613055000405017676 0ustar janjan# Norwegian Bokmal translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "Melding om ordning" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "Ugyldig mottaker adresse." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "Emner i Hjelp" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 #, fuzzy msgid "List-Subscribe" msgstr "Undertekst" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/nl/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000245613055000405017712 0ustar janjan | !: R _i q |J  % 3>G Vbs    Disposition NotificationHTML Version of MessageList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2012-08-29 13:30+0200 PO-Revision-Date: 2012-11-03 12:15+0100 Last-Translator: Arjen de Korte Language-Team: Dutch Language: nl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Lokalize 1.4 OntvangstbevestigingHTML versie van berichtLijst-ArchiefLijst-HulpLijst-IDLijst-EigenaarLijst-AdresLijst-AanmeldingLijst-AfmeldingPlatte tekst versie van berichtHet bericht dat u op %s stuurde aan %s met als onderwerp "%s" is weergegeven. Er is geen garantie dat het bericht is gelezen of begrepen.Horde_Mime-2.10.3/locale/nl/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000361513055000405017713 0ustar janjan# Dutch translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # # Arjen de Korte , 2012. msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2012-08-29 13:30+0200\n" "PO-Revision-Date: 2012-11-03 12:15+0100\n" "Last-Translator: Arjen de Korte \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.4\n" #: lib/Horde/Mime/Mdn.php:188 msgid "Disposition Notification" msgstr "Ontvangstbevestiging" #: lib/Horde/Mime/Mail.php:419 msgid "HTML Version of Message" msgstr "HTML versie van bericht" #: lib/Horde/Mime/Headers.php:540 msgid "List-Archive" msgstr "Lijst-Archief" #: lib/Horde/Mime/Headers.php:535 msgid "List-Help" msgstr "Lijst-Hulp" #: lib/Horde/Mime/Headers.php:542 msgid "List-Id" msgstr "Lijst-ID" #: lib/Horde/Mime/Headers.php:538 msgid "List-Owner" msgstr "Lijst-Eigenaar" #: lib/Horde/Mime/Headers.php:539 msgid "List-Post" msgstr "Lijst-Adres" #: lib/Horde/Mime/Headers.php:537 msgid "List-Subscribe" msgstr "Lijst-Aanmelding" #: lib/Horde/Mime/Headers.php:536 msgid "List-Unsubscribe" msgstr "Lijst-Afmelding" #: lib/Horde/Mime/Mail.php:417 msgid "Plaintext Version of Message" msgstr "Platte tekst versie van bericht" #: lib/Horde/Mime/Mdn.php:200 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Het bericht dat u op %s stuurde aan %s met als onderwerp \"%s\" is " "weergegeven.\n" "\n" "Er is geen garantie dat het bericht is gelezen of begrepen." Horde_Mime-2.10.3/locale/nn/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000064613055000405017713 0ustar janjan$,8l9Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Horde_Mime-2.10.3/locale/nn/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000321013055000405017704 0ustar janjan# Norwegian Nynorsk translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "" #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "Vis emne frå Hjelp" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/pl/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000074013055000405017706 0ustar janjan$,89Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); Horde_Mime-2.10.3/locale/pl/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000365313055000405017717 0ustar janjan# Polish translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" #: lib/Horde/Mime/Mdn.php:202 #, fuzzy msgid "Disposition Notification" msgstr "Rozmieszczenie" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "Nieprawidłowy adres docelowy." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "Wyświetl tematy pomocy" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 #, fuzzy msgid "List-Subscribe" msgstr "Podkreślenie" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, fuzzy, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Wiadomość wysłana %s do %s z tematem \"%s\" została wyświetlona.\n" "Nie ma gwarancji, że wiadomość została przeczytana albo zrozumiana." Horde_Mime-2.10.3/locale/pt/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000152513055000405017720 0ustar janjan d    $.=lN  (< Disposition NotificationList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribeProject-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Notificação de DisposiçãoListagem-ArquivoListagem-AjudaID da ListaListagem-DonoListagem-SubmissõesListagem-SubscritasListagem-Não subscritasHorde_Mime-2.10.3/locale/pt/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000367313055000405017731 0ustar janjan# Portuguese translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "Notificação de Disposição" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "Endereço de destino inválido." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "Listagem-Arquivo" #: lib/Horde/Mime/Headers.php:514 msgid "List-Help" msgstr "Listagem-Ajuda" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "ID da Lista" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "Listagem-Dono" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "Listagem-Submissões" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "Listagem-Subscritas" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "Listagem-Não subscritas" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, fuzzy, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "A mensagem enviada em %s para %s com assunto \"%s\" foi mostrada.\n" "Não há garantia de que a mensagem tenha sido realmente lida ou compreendida." Horde_Mime-2.10.3/locale/pt_BR/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000235013055000405020300 0ustar janjan | !: R _i q |vJ    ",;!Lyn    Disposition NotificationHTML Version of MessageList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2014-06-04 11:28+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); Notificação de DisposiçãoVersão HTML da MensagemList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribeVersão da Mensagem em Texto PuroA mensagem enviada em %s para %s com o assunto "%s" foi exibida. Isto não garante que a mensagem foi lida ou entendida.Horde_Mime-2.10.3/locale/pt_BR/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000346313055000405020311 0ustar janjan# Portuguese translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2014-06-04 11:28+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: lib/Horde/Mime/Mdn.php:188 msgid "Disposition Notification" msgstr "Notificação de Disposição" #: lib/Horde/Mime/Mail.php:421 msgid "HTML Version of Message" msgstr "Versão HTML da Mensagem" #: lib/Horde/Mime/Headers.php:547 msgid "List-Archive" msgstr "List-Archive" #: lib/Horde/Mime/Headers.php:542 msgid "List-Help" msgstr "List-Help" #: lib/Horde/Mime/Headers.php:549 msgid "List-Id" msgstr "List-Id" #: lib/Horde/Mime/Headers.php:545 msgid "List-Owner" msgstr "List-Owner" #: lib/Horde/Mime/Headers.php:546 msgid "List-Post" msgstr "List-Post" #: lib/Horde/Mime/Headers.php:544 msgid "List-Subscribe" msgstr "List-Subscribe" #: lib/Horde/Mime/Headers.php:543 msgid "List-Unsubscribe" msgstr "List-Unsubscribe" #: lib/Horde/Mime/Mail.php:419 msgid "Plaintext Version of Message" msgstr "Versão da Mensagem em Texto Puro" #: lib/Horde/Mime/Mdn.php:200 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "A mensagem enviada em %s para %s com o assunto \"%s\" foi exibida.\n" "\n" "Isto não garante que a mensagem foi lida ou entendida." Horde_Mime-2.10.3/locale/ro/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000072413055000405017715 0ustar janjan$,89Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=ASCII Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2; Horde_Mime-2.10.3/locale/ro/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000326713055000405017725 0ustar janjan# Romanian translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ASCII\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2;\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "" #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "Lista subiectelor din Help" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/ru/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000076013055000405017723 0ustar janjan$,89Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); Horde_Mime-2.10.3/locale/ru/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000421713055000405017727 0ustar janjan# Russian translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: lib/Horde/Mime/Mdn.php:202 #, fuzzy msgid "Disposition Notification" msgstr "Настройки оповещения" #: lib/Horde/Mime/Mail.php:460 #, fuzzy msgid "HTML Version of Message" msgstr "Следующее сообшение" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "Рабочий адрес" # fuzzy #: lib/Horde/Mime/Headers.php:519 #, fuzzy msgid "List-Archive" msgstr "Искать" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "Список разделов подсказки" #: lib/Horde/Mime/Headers.php:521 #, fuzzy msgid "List-Id" msgstr "Список разделов подсказки" #: lib/Horde/Mime/Headers.php:517 #, fuzzy msgid "List-Owner" msgstr "Список разделов подсказки" #: lib/Horde/Mime/Headers.php:518 #, fuzzy msgid "List-Post" msgstr "Список разделов подсказки" # fuzzy #: lib/Horde/Mime/Headers.php:516 #, fuzzy msgid "List-Subscribe" msgstr "Искать" # fuzzy #: lib/Horde/Mime/Headers.php:515 #, fuzzy msgid "List-Unsubscribe" msgstr "Искать" #: lib/Horde/Mime/Mail.php:458 #, fuzzy msgid "Plaintext Version of Message" msgstr "В теле сообщения" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/sk/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000243313055000405017711 0ustar janjan | !: R _i q |J  '1 9 DN]n    Disposition NotificationHTML Version of MessageList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2012-08-29 13:30+0200 PO-Revision-Date: 2013-02-01 17:54+0200 Last-Translator: Jozef Sudolsky Language-Team: i18n@lists.horde.org Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2; Potvrdenie o doručeníHTML verzia správyList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribeVerzia správy v čistom texteSpráva odoslaná dňa %s pre %s s predmetom "%s" bola zobrazená. Neexistuje však záruka, že správa bola prečítaná alebo pochopená.Horde_Mime-2.10.3/locale/sk/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000364013055000405017715 0ustar janjan# Slovak translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Martin Matuška , 2011 # Jozef Sudolský , 2013 # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2012-08-29 13:30+0200\n" "PO-Revision-Date: 2013-02-01 17:54+0200\n" "Last-Translator: Jozef Sudolsky \n" "Language-Team: i18n@lists.horde.org\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: lib/Horde/Mime/Mdn.php:188 msgid "Disposition Notification" msgstr "Potvrdenie o doručení" #: lib/Horde/Mime/Mail.php:419 msgid "HTML Version of Message" msgstr "HTML verzia správy" #: lib/Horde/Mime/Headers.php:540 msgid "List-Archive" msgstr "List-Archive" #: lib/Horde/Mime/Headers.php:535 msgid "List-Help" msgstr "List-Help" #: lib/Horde/Mime/Headers.php:542 msgid "List-Id" msgstr "List-Id" #: lib/Horde/Mime/Headers.php:538 msgid "List-Owner" msgstr "List-Owner" #: lib/Horde/Mime/Headers.php:539 msgid "List-Post" msgstr "List-Post" #: lib/Horde/Mime/Headers.php:537 msgid "List-Subscribe" msgstr "List-Subscribe" #: lib/Horde/Mime/Headers.php:536 msgid "List-Unsubscribe" msgstr "List-Unsubscribe" #: lib/Horde/Mime/Mail.php:417 msgid "Plaintext Version of Message" msgstr "Verzia správy v čistom texte" #: lib/Horde/Mime/Mdn.php:200 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Správa odoslaná dňa %s pre %s s predmetom \"%s\" bola zobrazená.\n" "\n" "Neexistuje však záruka, že správa bola prečítaná alebo pochopená." Horde_Mime-2.10.3/locale/sl/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000222113055000405017705 0ustar janjan l   ! ) 4>M^ {  Disposition NotificationList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribeThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3); Obvestilo o dostavljeni pošti Seznam Arhiva Seznam Pomoči Seznam Identitet Seznam Lastnikov Seznam Pošte Seznam Prijav Seznam Odjav Sporočilo poslano dne %s za %s z naslovom "%s" je bil prebran. Ni zagotovila da je bilo dejansko prebrano ali razumljeno.Horde_Mime-2.10.3/locale/sl/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000371613055000405017722 0ustar janjan# Slovenian translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" "%100==4 ? 2 : 3);\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "Obvestilo o dostavljeni pošti" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "Neveljaven naslov naslovnika." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr " Seznam Arhiva " #: lib/Horde/Mime/Headers.php:514 msgid "List-Help" msgstr "Seznam Pomoči " #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "Seznam Identitet " #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "Seznam Lastnikov " #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "Seznam Pošte " #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "Seznam Prijav " #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "Seznam Odjav " #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Sporočilo poslano dne %s za %s z naslovom \"%s\" je bil prebran.\n" "\n" "Ni zagotovila da je bilo dejansko prebrano ali razumljeno." Horde_Mime-2.10.3/locale/sv/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000064613055000405017730 0ustar janjan$,8l9Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Horde_Mime-2.10.3/locale/sv/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000326113055000405017727 0ustar janjan# Swedish translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "Felaktig destinationsadress." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:514 #, fuzzy msgid "List-Help" msgstr "Visa hjälpämnen" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:516 #, fuzzy msgid "List-Subscribe" msgstr "Nedsänkt" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/locale/tr/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000256613055000405017730 0ustar janjan 01J(b    e2FU e p~!}    Disposition NotificationHTML Version of MessageInvalid character in e-mail address: %s.List-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; Düzen Bildirimiİletinin HTML SürümüElektronik Posta adresinde geçersiz karakter: %s.Listele-ArşivListele-YardımListele-IdListele-SahipListele-Gönderilmiş ÖğelerListele-SürdürümcülerListele-Sürdürümcü Olmayanlarİletinin Düz Metin Sürümü%s de %s e gönderilen "%s" konulu ileti görüntülendi. İletinin okunduğu ve/veya anlaşıldığının garantisi yoktur.Horde_Mime-2.10.3/locale/tr/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000375113055000405017730 0ustar janjan# Turkish translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "Düzen Bildirimi" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "İletinin HTML Sürümü" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "Elektronik Posta adresinde geçersiz karakter: %s." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "Listele-Arşiv" #: lib/Horde/Mime/Headers.php:514 msgid "List-Help" msgstr "Listele-Yardım" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "Listele-Id" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "Listele-Sahip" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "Listele-Gönderilmiş Öğeler" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "Listele-Sürdürümcüler" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "Listele-Sürdürümcü Olmayanlar" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "İletinin Düz Metin Sürümü" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "%s de %s e gönderilen \"%s\" konulu ileti görüntülendi.\n" "\n" "İletinin okunduğu ve/veya anlaşıldığının garantisi yoktur." Horde_Mime-2.10.3/locale/uk/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000277313055000405017722 0ustar janjan 01J(b    4:oH     ()R    Disposition NotificationHTML Version of MessageInvalid character in e-mail address: %s.List-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2013-04-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); Повідомлення про розміщенняHTML-версія листаНедозволений символ в адресі е-пошти: %s.List-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribeТекстова версія листаПоказано лист, відісланий в %s до %s з темою "%s". Немає гарантії, що лист прочитали та зрозуміли.Horde_Mime-2.10.3/locale/uk/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000415713055000406017724 0ustar janjan# Ukrainian translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2013-04-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "Повідомлення про розміщення" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "HTML-версія листа" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "Недозволений символ в адресі е-пошти: %s." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "List-Archive" #: lib/Horde/Mime/Headers.php:514 msgid "List-Help" msgstr "List-Help" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "List-Id" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "List-Owner" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "List-Post" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "List-Subscribe" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "List-Unsubscribe" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "Текстова версія листа" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "Показано лист, відісланий в %s до %s з темою \"%s\".\n" "Немає гарантії, що лист прочитали та зрозуміли." Horde_Mime-2.10.3/locale/zh_CN/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000200313055000406020267 0ustar janjan l   ! ) 4>M^A ' 4 ANW g tn  Disposition NotificationList-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribeThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 部署通知存档列表帮助列表Id列表所有者列表发布列表订阅列表取消订阅列表已显示 %s 发送给 %s 且主题为“%s”的邮件。 不保证收件人已阅读或理解此封邮件。Horde_Mime-2.10.3/locale/zh_CN/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000345413055000406020305 0ustar janjan# Chinese translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "部署通知" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:404 #, fuzzy, php-format msgid "Invalid character in e-mail address: %s." msgstr "无效的目的地址。" #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "存档列表" #: lib/Horde/Mime/Headers.php:514 msgid "List-Help" msgstr "帮助列表" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "Id列表" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "所有者列表" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "发布列表" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "订阅列表" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "取消订阅列表" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "已显示 %s 发送给 %s 且主题为“%s”的邮件。\n" "不保证收件人已阅读或理解此封邮件。" Horde_Mime-2.10.3/locale/zh_TW/LC_MESSAGES/Horde_Mime.mo0000664000175000017500000000253513055000406020333 0ustar janjan 01J(b    A -)=Wn    Disposition NotificationHTML Version of MessageInvalid character in e-mail address: %s.List-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribePlaintext Version of MessageThe message sent on %s to %s with subject "%s" has been displayed. This is no guarantee that the message has been read or understood.Project-Id-Version: Horde_Mime Report-Msgid-Bugs-To: dev@lists.horde.org POT-Creation-Date: 2010-10-13 01:27+0200 PO-Revision-Date: 2010-10-13 01:27+0200 Last-Translator: Automatically generated Language-Team: i18n@lists.horde.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 傳送回條HTML 格式郵件電子郵件住址: %s 含有無效的字元.討論群組-檔案櫃討論群組-求助討論群組-識別號碼討論群組-擁有者討論群組-寄件人討論群組-訂閱討論群組-取消訂閱純文字格式的郵件你曾於 %s 寄給 %s 一封主旨為 "%s" 的信件已被開啟. 但這並不能保證該信件的內容已完全被收件人看完或了解.Horde_Mime-2.10.3/locale/zh_TW/LC_MESSAGES/Horde_Mime.po0000664000175000017500000000371413055000406020336 0ustar janjan# Chinese translations for Horde_Mime module. # Copyright 2010-2017 Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime module. # Automatically generated, 2010. # msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2010-10-13 01:27+0200\n" "PO-Revision-Date: 2010-10-13 01:27+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: i18n@lists.horde.org\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Horde/Mime/Mdn.php:202 msgid "Disposition Notification" msgstr "傳送回條" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "HTML 格式郵件" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "電子郵件住址: %s 含有無效的字元." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "討論群組-檔案櫃" #: lib/Horde/Mime/Headers.php:514 msgid "List-Help" msgstr "討論群組-求助" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "討論群組-識別號碼" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "討論群組-擁有者" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "討論群組-寄件人" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "討論群組-訂閱" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "討論群組-取消訂閱" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "純文字格式的郵件" #: lib/Horde/Mime/Mdn.php:213 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" "你曾於 %s 寄給 %s 一封主旨為 \"%s\" 的信件已被開啟.\n" "\n" "但這並不能保證該信件的內容已完全被收件人看完或了解." Horde_Mime-2.10.3/locale/Horde_Mime.pot0000664000175000017500000000202013055000406015667 0ustar janjan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Horde LLC (http://www.horde.org/) # This file is distributed under the same license as the Horde_Mime package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Horde_Mime\n" "Report-Msgid-Bugs-To: dev@lists.horde.org\n" "POT-Creation-Date: 2015-01-08 11:22+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Horde/Mime/Mdn.php:188 msgid "Disposition Notification" msgstr "" #: lib/Horde/Mime/Mail.php:439 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Mail.php:437 msgid "Plaintext Version of Message" msgstr "" #: lib/Horde/Mime/Mdn.php:201 #, php-format msgid "" "The message sent on %s to %s with subject \"%s\" has been displayed.\n" "\n" "This is no guarantee that the message has been read or understood." msgstr "" Horde_Mime-2.10.3/test/Horde/Mime/ContentParam/DecodeTest.php0000664000175000017500000000345013055000406021742 0ustar janjan * @category Horde * @copyright 2010-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_ContentParam_DecodeTest extends PHPUnit_Framework_TestCase { /** * @dataProvider decodeProvider */ public function testDecode($string, $expected) { $decode = new Horde_Mime_ContentParam_Decode(); $res = $decode->decode($string); ksort($res); $this->assertEquals( $expected, $res ); } public function decodeProvider() { return array( array( 'foo=bar', array( 'foo' => 'bar' ) ), array( 'foofoo=b', array( 'foofoo' => 'b' ) ), array( 'f=barbar', array( 'f' => 'barbar' ) ), array( 'foo=bar; a=b', array( 'a' => 'b', 'foo' => 'bar' ) ), array( ' foo = bar ; a =b ;c = d ', array( 'a' => 'b', 'c' => 'd', 'foo' => 'bar' ) ) ); } } Horde_Mime-2.10.3/test/Horde/Mime/Filter/EncodingTest.php0000664000175000017500000000542113055000406021137 0ustar janjan * @category Horde * @copyright 2014-2016 Horde LLC * @ignore * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_Filter_EncodingTest extends Horde_Test_Case { /** * @dataProvider bodyFilterProvider() */ public function testBodyFilter($data, $result) { $params = new stdClass; $stream = fopen('php://temp', 'r+'); stream_filter_register('horde_smtp_body', 'Horde_Mime_Filter_Encoding'); stream_filter_append( $stream, 'horde_smtp_body', STREAM_FILTER_WRITE, $params ); fwrite($stream, $data); fclose($stream); $this->assertEquals( $result, $params->body ); } public function bodyFilterProvider() { return array( array( "This is 7-bit\r\ndata.", false ), array( str_repeat('A', 900) . "This is also 7-bit\r\ndata.", false ), array( "This is 7-bit\rdata\rwith\rCR\rline-endings.", false, ), array( "This is 7-bit\ndata\nwith\nLF\nline-endings.", false ), array( "This is 7-bit\r\ndata\nwith\rinconsistent\r\nline-endings.", false ), array( "This is 8-bit åå\r\ndata.", '8bit' ), array( str_repeat('A', 900) . "This is also 8-bit åå\r\ndata.", '8bit' ), array( "This is 8-bit åå\rdata\rwith\rCR\rline-endings.", '8bit' ), array( "This is 8-bit åå\ndata\nwith\nLF\nline-endings.", '8bit' ), array( "This is binary \0\r\ndata.", 'binary' ), array( str_repeat('A', 1500) . "This is also binary data.", 'binary' ), array( str_repeat('A', 1500) . "This is also binary åå\r\ndata.", 'binary' ) ); } } Horde_Mime-2.10.3/test/Horde/Mime/fixtures/attachment.bin0000664000175000017500000000010513055000406021300 0ustar janjanZwölf Boxkämpfer jagen Viktor quer über den großen Sylter Deich. Horde_Mime-2.10.3/test/Horde/Mime/fixtures/blank_subject.txt0000664000175000017500000000015213055000406022027 0ustar janjanDate: Sun, 16 Mar 2014 10:24:20 -0400 From: My Name Subject: To: bar@example.com Test. Horde_Mime-2.10.3/test/Horde/Mime/fixtures/bug12536.txt0000664000175000017500000000066313055000406020406 0ustar janjanFrom: me To: gordon Subject: RE: multipart Date: Thu, 1 Aug 2013 20:22:47 +0000 Content-Language: en-US Content-Type: multipart/alternative; boundary="_000_4A6831756E0204488327BF649D880D7C658E6F26MSGPEXCEI04Amfa_" MIME-Version: 1.0 --_000_4A6831756E0204488327BF649D880D7C658E6F26MSGPEXCEI04Amfa_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable No content? Horde_Mime-2.10.3/test/Horde/Mime/fixtures/bug12842_a.txt0000664000175000017500000000015313055000406020700 0ustar janjanContent-Type: multipart/related; boundary="=_123" MIME-Version: 1.0 --=_123 Content-Type: text/plain FOO Horde_Mime-2.10.3/test/Horde/Mime/fixtures/bug12842_b.txt0000664000175000017500000000006213055000406020700 0ustar janjan --=_123 Content-Type: text/plain BAR --=_123-- Horde_Mime-2.10.3/test/Horde/Mime/fixtures/bug13117.txt0000664000175000017500000000143713055000406020402 0ustar janjanReturn-Path: Delivered-To: foo@example.com Received: from localhost (localhost [127.0.0.1]) by example.com (Postfix) with ESMTP id 87C5B4F220 for ; Tue, 7 Jul 2009 11:51:18 -0600 (MDT) Message-ID: <20090707115118.ooc4wo40oc88@example.com> Date: Tue, 07 Jul 2009 11:51:18 -0600 From: "Test Q. User" To: foo@example.com Subject: Fwd: Test User-Agent: Internet Messaging Program (IMP) H4 (5.0-git) Content-Type: multipart/mixed; Boundary="=_123" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit --=_123 Content-Type: text/plain Test. --=_123 Content-Type: message/rfc822 From: "Foo" Content-Type: multipart/mixed; Boundary="=_456" MIME-Version: 1.0 --=_456 Content-Type: text/plain Test 2. --=_456-- --=_123-- Horde_Mime-2.10.3/test/Horde/Mime/fixtures/deeply_nested.txt0000664000175000017500000003766513055000406022070 0ustar janjanContent-Type: multipart/mixed; boundary="=_3PRv8NIHY4u2Y1xl4t2sUQ1" MIME-Version: 1.0 This message is in MIME format. --=_3PRv8NIHY4u2Y1xl4t2sUQ1 Content-Type: multipart/mixed; boundary="=_1lNjq6TYRjmQ8xpcKY7WNA7" This message is in MIME format. --=_1lNjq6TYRjmQ8xpcKY7WNA7 Content-Type: multipart/mixed; boundary="=_CVkVbuWDIqAPmKjSWdsDsw1" This message is in MIME format. --=_CVkVbuWDIqAPmKjSWdsDsw1 Content-Type: multipart/mixed; boundary="=_0mk0p-ZC6fm0Kf-1U20dgg9" This message is in MIME format. --=_0mk0p-ZC6fm0Kf-1U20dgg9 Content-Type: multipart/mixed; boundary="=_kko2JOKb2GgbpHTJbAah1Q2" This message is in MIME format. --=_kko2JOKb2GgbpHTJbAah1Q2 Content-Type: multipart/mixed; boundary="=_3oao2JsLFH83Kh-pdZvOjQ2" This message is in MIME format. --=_3oao2JsLFH83Kh-pdZvOjQ2 Content-Type: multipart/mixed; boundary="=_SvJ96mnnaZCob7Xa6PqnIQ2" This message is in MIME format. --=_SvJ96mnnaZCob7Xa6PqnIQ2 Content-Type: multipart/mixed; boundary="=_6xO_8LaQdn0CNDesqHuWaQ5" This message is in MIME format. --=_6xO_8LaQdn0CNDesqHuWaQ5 Content-Type: multipart/mixed; boundary="=_n4cpfscgvpM4BIR-O-G6HQ8" This message is in MIME format. --=_n4cpfscgvpM4BIR-O-G6HQ8 Content-Type: multipart/mixed; boundary="=_zrlaCAnfzA4G9A9aVHZEiQ8" This message is in MIME format. --=_zrlaCAnfzA4G9A9aVHZEiQ8 Content-Type: multipart/mixed; boundary="=_iSvQFLKxL3tk1wJSiACVMg6" This message is in MIME format. --=_iSvQFLKxL3tk1wJSiACVMg6 Content-Type: multipart/mixed; boundary="=_FanKRwtD644oaeAGqai9jQ2" This message is in MIME format. --=_FanKRwtD644oaeAGqai9jQ2 Content-Type: multipart/mixed; boundary="=_d1uKLJaOGB8qYv2x6R_8Ng1" This message is in MIME format. --=_d1uKLJaOGB8qYv2x6R_8Ng1 Content-Type: multipart/mixed; boundary="=_ShrocL78y2cYCOY14w1O3A6" This message is in MIME format. --=_ShrocL78y2cYCOY14w1O3A6 Content-Type: multipart/mixed; boundary="=_unnT1bQ2vwi1waU3zDkeUw3" This message is in MIME format. --=_unnT1bQ2vwi1waU3zDkeUw3 Content-Type: multipart/mixed; boundary="=_KhgpObolbHBAyTiW7IvQ4Q4" This message is in MIME format. --=_KhgpObolbHBAyTiW7IvQ4Q4 Content-Type: multipart/mixed; boundary="=_cI1KGtBwtnBn0zKMPXd-_Q1" This message is in MIME format. --=_cI1KGtBwtnBn0zKMPXd-_Q1 Content-Type: multipart/mixed; boundary="=_FGiiTOoqqAd2bXTWiByBAA1" This message is in MIME format. --=_FGiiTOoqqAd2bXTWiByBAA1 Content-Type: multipart/mixed; boundary="=_ewnRmDCCuMv7kcZucJIJRQ1" This message is in MIME format. --=_ewnRmDCCuMv7kcZucJIJRQ1 Content-Type: multipart/mixed; boundary="=_ZMNwD42p3ft-COvqlCLc9g1" This message is in MIME format. --=_ZMNwD42p3ft-COvqlCLc9g1 Content-Type: multipart/mixed; boundary="=_Ce8PSI525ByrfWWnHQv_5A1" This message is in MIME format. --=_Ce8PSI525ByrfWWnHQv_5A1 Content-Type: multipart/mixed; boundary="=_rhGhsyMjaRLNOEY89dkcYA1" This message is in MIME format. --=_rhGhsyMjaRLNOEY89dkcYA1 Content-Type: multipart/mixed; boundary="=_QOsV_Cp1__hv-3gu-B-ogw4" This message is in MIME format. --=_QOsV_Cp1__hv-3gu-B-ogw4 Content-Type: multipart/mixed; boundary="=_eBjtdJwDVAJ6gf2Ro28VMQ1" This message is in MIME format. --=_eBjtdJwDVAJ6gf2Ro28VMQ1 Content-Type: multipart/mixed; boundary="=_2yPxJUNmPv1e2YusLTXtrQ1" This message is in MIME format. --=_2yPxJUNmPv1e2YusLTXtrQ1 Content-Type: multipart/mixed; boundary="=_URkryYH3LlOS6olRGcRj3w1" This message is in MIME format. --=_URkryYH3LlOS6olRGcRj3w1 Content-Type: multipart/mixed; boundary="=_bbyymXYZTQQBMlTYD5PdCA3" This message is in MIME format. --=_bbyymXYZTQQBMlTYD5PdCA3 Content-Type: multipart/mixed; boundary="=_eITsi9UK_rGWA_ceeXWYeg8" This message is in MIME format. --=_eITsi9UK_rGWA_ceeXWYeg8 Content-Type: multipart/mixed; boundary="=_SZtu8swNV_cEzvhjzXn7kQ2" This message is in MIME format. --=_SZtu8swNV_cEzvhjzXn7kQ2 Content-Type: multipart/mixed; boundary="=_5cu2YehhAJtvpUlRzKokOg1" This message is in MIME format. --=_5cu2YehhAJtvpUlRzKokOg1 Content-Type: multipart/mixed; boundary="=_EwY3IbCpuMIl-Nrh7otdjQ7" This message is in MIME format. --=_EwY3IbCpuMIl-Nrh7otdjQ7 Content-Type: multipart/mixed; boundary="=_xPUIX3uCdL3T934HxKFpjw3" This message is in MIME format. --=_xPUIX3uCdL3T934HxKFpjw3 Content-Type: multipart/mixed; boundary="=_onZx-kMrP82GI9xNYTjoig2" This message is in MIME format. --=_onZx-kMrP82GI9xNYTjoig2 Content-Type: multipart/mixed; boundary="=_Pn9taMMRBLyOqsKHYcWY2Q2" This message is in MIME format. --=_Pn9taMMRBLyOqsKHYcWY2Q2 Content-Type: multipart/mixed; boundary="=_LnSlRao6giD60iib5KfFhg6" This message is in MIME format. --=_LnSlRao6giD60iib5KfFhg6 Content-Type: multipart/mixed; boundary="=_2Nb1elXv9m9n8WdtZb0YVQ1" This message is in MIME format. --=_2Nb1elXv9m9n8WdtZb0YVQ1 Content-Type: multipart/mixed; boundary="=_KaZG8U90s8GVUE3G-3DuuA4" This message is in MIME format. --=_KaZG8U90s8GVUE3G-3DuuA4 Content-Type: multipart/mixed; boundary="=_bioHe0CFd5dZFZu5Yrofbg1" This message is in MIME format. --=_bioHe0CFd5dZFZu5Yrofbg1 Content-Type: multipart/mixed; boundary="=_tK0gJi6yOwZ81494Hyj1VA8" This message is in MIME format. --=_tK0gJi6yOwZ81494Hyj1VA8 Content-Type: multipart/mixed; boundary="=_0HkUETmSZe0yAFDUJM-ofQ4" This message is in MIME format. --=_0HkUETmSZe0yAFDUJM-ofQ4 Content-Type: multipart/mixed; boundary="=_Z3Hqqz8W0yZHN9_L-Wme9Q5" This message is in MIME format. --=_Z3Hqqz8W0yZHN9_L-Wme9Q5 Content-Type: multipart/mixed; boundary="=_7MGtFxDUKBE_jy1EvU1Y0g1" This message is in MIME format. --=_7MGtFxDUKBE_jy1EvU1Y0g1 Content-Type: multipart/mixed; boundary="=_vucYjba6SPp5BOkVRQhHqw1" This message is in MIME format. --=_vucYjba6SPp5BOkVRQhHqw1 Content-Type: multipart/mixed; boundary="=_q-vFewQsI39q-mLCjw1jKA9" This message is in MIME format. --=_q-vFewQsI39q-mLCjw1jKA9 Content-Type: multipart/mixed; boundary="=_iIfe_urzT319q4gdekhqww1" This message is in MIME format. --=_iIfe_urzT319q4gdekhqww1 Content-Type: multipart/mixed; boundary="=_eFvmDKpfPxdSb8brO1zluA5" This message is in MIME format. --=_eFvmDKpfPxdSb8brO1zluA5 Content-Type: multipart/mixed; boundary="=_vlZqWAGzN89FecDBzdaOOw1" This message is in MIME format. --=_vlZqWAGzN89FecDBzdaOOw1 Content-Type: multipart/mixed; boundary="=_gYcMkQ2j7Vt0H3dxfBalww1" This message is in MIME format. --=_gYcMkQ2j7Vt0H3dxfBalww1 Content-Type: multipart/mixed; boundary="=__QbtqA2TfUTF-nkr8Q2nUA1" This message is in MIME format. --=__QbtqA2TfUTF-nkr8Q2nUA1 Content-Type: multipart/mixed; boundary="=_JrhRrXtDXXJIXdst5a7LMg9" This message is in MIME format. --=_JrhRrXtDXXJIXdst5a7LMg9 Content-Type: multipart/mixed; boundary="=_hsfZ7d3zAiCLJZ1e7oP55Q1" This message is in MIME format. --=_hsfZ7d3zAiCLJZ1e7oP55Q1 Content-Type: multipart/mixed; boundary="=_fupyR8L-nUPsfkUgdIsgNw2" This message is in MIME format. --=_fupyR8L-nUPsfkUgdIsgNw2 Content-Type: multipart/mixed; boundary="=_-fgw8K8M0X_x_YR-XGbqhw1" This message is in MIME format. --=_-fgw8K8M0X_x_YR-XGbqhw1 Content-Type: multipart/mixed; boundary="=_HIu3RasTIOCm9vSHxr_UIQ8" This message is in MIME format. --=_HIu3RasTIOCm9vSHxr_UIQ8 Content-Type: multipart/mixed; boundary="=_DdgP0h9vq1N0ywuBbjNPbw1" This message is in MIME format. --=_DdgP0h9vq1N0ywuBbjNPbw1 Content-Type: multipart/mixed; boundary="=_gBatEFMw-7nvltVVrO3atg1" This message is in MIME format. --=_gBatEFMw-7nvltVVrO3atg1 Content-Type: multipart/mixed; boundary="=_xJ4SRmT2BLqTxFmjNtdZ4A1" This message is in MIME format. --=_xJ4SRmT2BLqTxFmjNtdZ4A1 Content-Type: multipart/mixed; boundary="=_KvKBGw0y3LWg2TWSSbTymg9" This message is in MIME format. --=_KvKBGw0y3LWg2TWSSbTymg9 Content-Type: multipart/mixed; boundary="=_nbz_suDCy-pM583k5gzGiA6" This message is in MIME format. --=_nbz_suDCy-pM583k5gzGiA6 Content-Type: multipart/mixed; boundary="=_h13AZg0naDwBoybXWKCZYA8" This message is in MIME format. --=_h13AZg0naDwBoybXWKCZYA8 Content-Type: multipart/mixed; boundary="=_boeSfH6Ig9Ohmy_1km4GjA6" This message is in MIME format. --=_boeSfH6Ig9Ohmy_1km4GjA6 Content-Type: multipart/mixed; boundary="=_2I-DBYesNL7pJiuy6MJEIQ1" This message is in MIME format. --=_2I-DBYesNL7pJiuy6MJEIQ1 Content-Type: multipart/mixed; boundary="=_tB4LwV5Pc0W8yO0Ro3Js6Q1" This message is in MIME format. --=_tB4LwV5Pc0W8yO0Ro3Js6Q1 Content-Type: multipart/mixed; boundary="=_Gs-vpGXAzm3kHNfZHGnxWA2" This message is in MIME format. --=_Gs-vpGXAzm3kHNfZHGnxWA2 Content-Type: multipart/mixed; boundary="=_ItFyIPbNAes2js11e-2tWA1" This message is in MIME format. --=_ItFyIPbNAes2js11e-2tWA1 Content-Type: multipart/mixed; boundary="=_JXZkTNxe3etrMDY7NRZQKA9" This message is in MIME format. --=_JXZkTNxe3etrMDY7NRZQKA9 Content-Type: multipart/mixed; boundary="=_fcFx_iWos862mhxo7xRpPQ1" This message is in MIME format. --=_fcFx_iWos862mhxo7xRpPQ1 Content-Type: multipart/mixed; boundary="=_giXT2vpfx3Rtgvu1TIlgFQ1" This message is in MIME format. --=_giXT2vpfx3Rtgvu1TIlgFQ1 Content-Type: multipart/mixed; boundary="=_r2jtc8I2tDs9qrzbLshLNA1" This message is in MIME format. --=_r2jtc8I2tDs9qrzbLshLNA1 Content-Type: multipart/mixed; boundary="=_mbb8NUi-0BRDvTxpxJaTnw8" This message is in MIME format. --=_mbb8NUi-0BRDvTxpxJaTnw8 Content-Type: multipart/mixed; boundary="=_6hrnWSN6FiZQOYqIxbdrNw1" This message is in MIME format. --=_6hrnWSN6FiZQOYqIxbdrNw1 Content-Type: multipart/mixed; boundary="=_ipgsWxOQlB2abEAFdVJrbw1" This message is in MIME format. --=_ipgsWxOQlB2abEAFdVJrbw1 Content-Type: multipart/mixed; boundary="=_iSZerAfxg-YYMxm6UNZUmw5" This message is in MIME format. --=_iSZerAfxg-YYMxm6UNZUmw5 Content-Type: multipart/mixed; boundary="=_GHa1fmYYf-hgyxbeCw66Ag8" This message is in MIME format. --=_GHa1fmYYf-hgyxbeCw66Ag8 Content-Type: multipart/mixed; boundary="=_8N2hYAhk_PsSg5VDjh71Pw1" This message is in MIME format. --=_8N2hYAhk_PsSg5VDjh71Pw1 Content-Type: multipart/mixed; boundary="=_sm_Ls33nK_gyXbOiXTJmfg1" This message is in MIME format. --=_sm_Ls33nK_gyXbOiXTJmfg1 Content-Type: multipart/mixed; boundary="=_dUdxPHCUnhEg8GbV-l_N3A2" This message is in MIME format. --=_dUdxPHCUnhEg8GbV-l_N3A2 Content-Type: multipart/mixed; boundary="=_OnTkXEYgCc_u9qDMj73hXA5" This message is in MIME format. --=_OnTkXEYgCc_u9qDMj73hXA5 Content-Type: multipart/mixed; boundary="=_CJc-xsPEQLjqNYLnAEo0EQ2" This message is in MIME format. --=_CJc-xsPEQLjqNYLnAEo0EQ2 Content-Type: multipart/mixed; boundary="=_tjr9ytpJO2Nx9_gTg2KWnQ8" This message is in MIME format. --=_tjr9ytpJO2Nx9_gTg2KWnQ8 Content-Type: multipart/mixed; boundary="=_Iu6ukxuqjqpCc2gmwkRYpQ2" This message is in MIME format. --=_Iu6ukxuqjqpCc2gmwkRYpQ2 Content-Type: multipart/mixed; boundary="=_ssk6TwlFsAbNXN_di0sBuQ1" This message is in MIME format. --=_ssk6TwlFsAbNXN_di0sBuQ1 Content-Type: multipart/mixed; boundary="=_XXDrZ6gzSp8YkyQIjVpmRw1" This message is in MIME format. --=_XXDrZ6gzSp8YkyQIjVpmRw1 Content-Type: multipart/mixed; boundary="=_mbhSHBBB6wuDtX0HfJKhTA1" This message is in MIME format. --=_mbhSHBBB6wuDtX0HfJKhTA1 Content-Type: multipart/mixed; boundary="=_Jni3QfY5SCyR4KWYcO7vgg3" This message is in MIME format. --=_Jni3QfY5SCyR4KWYcO7vgg3 Content-Type: multipart/mixed; boundary="=_tz-Yx3bALo1f37kyup0eZw1" This message is in MIME format. --=_tz-Yx3bALo1f37kyup0eZw1 Content-Type: multipart/mixed; boundary="=_-FVafFgE_9zTngSuwASZcg4" This message is in MIME format. --=_-FVafFgE_9zTngSuwASZcg4 Content-Type: multipart/mixed; boundary="=_GaDkbCjnJBVTTgEBJE53wQ1" This message is in MIME format. --=_GaDkbCjnJBVTTgEBJE53wQ1 Content-Type: multipart/mixed; boundary="=_wiO9pKJ5YfFyP5dCJx9QDw1" This message is in MIME format. --=_wiO9pKJ5YfFyP5dCJx9QDw1 Content-Type: multipart/mixed; boundary="=_DXcNK7a2aSEBY2EkSVrRyQ9" This message is in MIME format. --=_DXcNK7a2aSEBY2EkSVrRyQ9 Content-Type: multipart/mixed; boundary="=_9VZYel69ylKTcMxovQSGNw1" This message is in MIME format. --=_9VZYel69ylKTcMxovQSGNw1 Content-Type: multipart/mixed; boundary="=__jmOIw5CoKNtgkX9chVbJg1" This message is in MIME format. --=__jmOIw5CoKNtgkX9chVbJg1 Content-Type: multipart/mixed; boundary="=_YdvCqViOhvBKxmyWPyrfhw7" This message is in MIME format. --=_YdvCqViOhvBKxmyWPyrfhw7 Content-Type: multipart/mixed; boundary="=_rnEsY9RM4n07ifBVMhqtBw3" This message is in MIME format. --=_rnEsY9RM4n07ifBVMhqtBw3 Content-Type: multipart/mixed; boundary="=_CsQHrFNCJYHbiJWcWNZIsA3" This message is in MIME format. --=_CsQHrFNCJYHbiJWcWNZIsA3 Content-Type: multipart/mixed; boundary="=_hdFzClzIN4GAigGbdoyX5Q1" This message is in MIME format. --=_hdFzClzIN4GAigGbdoyX5Q1 Content-Type: multipart/mixed; boundary="=_APxVolmPFMnq6Na_YHvb6w1" This message is in MIME format. --=_APxVolmPFMnq6Na_YHvb6w1 Content-Type: multipart/mixed; boundary="=_fdRtOKQYfnDf-KUyE_kSeg1" This message is in MIME format. --=_fdRtOKQYfnDf-KUyE_kSeg1 Content-Type: multipart/mixed; boundary="=_AwmUoP4h81Wb2rgvc-CnGg1" This message is in MIME format. --=_AwmUoP4h81Wb2rgvc-CnGg1 Content-Type: multipart/mixed; boundary="=_UCEV4py8hvPm0ENyCVZaVQ8" This message is in MIME format. --=_UCEV4py8hvPm0ENyCVZaVQ8 Content-Type: multipart/mixed; boundary="=_O5M1Kd9uf9IYNkmP5bq5aA5" This message is in MIME format. --=_O5M1Kd9uf9IYNkmP5bq5aA5 Content-Type: text/plain Test --=_O5M1Kd9uf9IYNkmP5bq5aA5-- --=_UCEV4py8hvPm0ENyCVZaVQ8-- --=_AwmUoP4h81Wb2rgvc-CnGg1-- --=_fdRtOKQYfnDf-KUyE_kSeg1-- --=_APxVolmPFMnq6Na_YHvb6w1-- --=_hdFzClzIN4GAigGbdoyX5Q1-- --=_CsQHrFNCJYHbiJWcWNZIsA3-- --=_rnEsY9RM4n07ifBVMhqtBw3-- --=_YdvCqViOhvBKxmyWPyrfhw7-- --=__jmOIw5CoKNtgkX9chVbJg1-- --=_9VZYel69ylKTcMxovQSGNw1-- --=_DXcNK7a2aSEBY2EkSVrRyQ9-- --=_wiO9pKJ5YfFyP5dCJx9QDw1-- --=_GaDkbCjnJBVTTgEBJE53wQ1-- --=_-FVafFgE_9zTngSuwASZcg4-- --=_tz-Yx3bALo1f37kyup0eZw1-- --=_Jni3QfY5SCyR4KWYcO7vgg3-- --=_mbhSHBBB6wuDtX0HfJKhTA1-- --=_XXDrZ6gzSp8YkyQIjVpmRw1-- --=_ssk6TwlFsAbNXN_di0sBuQ1-- --=_Iu6ukxuqjqpCc2gmwkRYpQ2-- --=_tjr9ytpJO2Nx9_gTg2KWnQ8-- --=_CJc-xsPEQLjqNYLnAEo0EQ2-- --=_OnTkXEYgCc_u9qDMj73hXA5-- --=_dUdxPHCUnhEg8GbV-l_N3A2-- --=_sm_Ls33nK_gyXbOiXTJmfg1-- --=_8N2hYAhk_PsSg5VDjh71Pw1-- --=_GHa1fmYYf-hgyxbeCw66Ag8-- --=_iSZerAfxg-YYMxm6UNZUmw5-- --=_ipgsWxOQlB2abEAFdVJrbw1-- --=_6hrnWSN6FiZQOYqIxbdrNw1-- --=_mbb8NUi-0BRDvTxpxJaTnw8-- --=_r2jtc8I2tDs9qrzbLshLNA1-- --=_giXT2vpfx3Rtgvu1TIlgFQ1-- --=_fcFx_iWos862mhxo7xRpPQ1-- --=_JXZkTNxe3etrMDY7NRZQKA9-- --=_ItFyIPbNAes2js11e-2tWA1-- --=_Gs-vpGXAzm3kHNfZHGnxWA2-- --=_tB4LwV5Pc0W8yO0Ro3Js6Q1-- --=_2I-DBYesNL7pJiuy6MJEIQ1-- --=_boeSfH6Ig9Ohmy_1km4GjA6-- --=_h13AZg0naDwBoybXWKCZYA8-- --=_nbz_suDCy-pM583k5gzGiA6-- --=_KvKBGw0y3LWg2TWSSbTymg9-- --=_xJ4SRmT2BLqTxFmjNtdZ4A1-- --=_gBatEFMw-7nvltVVrO3atg1-- --=_DdgP0h9vq1N0ywuBbjNPbw1-- --=_HIu3RasTIOCm9vSHxr_UIQ8-- --=_-fgw8K8M0X_x_YR-XGbqhw1-- --=_fupyR8L-nUPsfkUgdIsgNw2-- --=_hsfZ7d3zAiCLJZ1e7oP55Q1-- --=_JrhRrXtDXXJIXdst5a7LMg9-- --=__QbtqA2TfUTF-nkr8Q2nUA1-- --=_gYcMkQ2j7Vt0H3dxfBalww1-- --=_vlZqWAGzN89FecDBzdaOOw1-- --=_eFvmDKpfPxdSb8brO1zluA5-- --=_iIfe_urzT319q4gdekhqww1-- --=_q-vFewQsI39q-mLCjw1jKA9-- --=_vucYjba6SPp5BOkVRQhHqw1-- --=_7MGtFxDUKBE_jy1EvU1Y0g1-- --=_Z3Hqqz8W0yZHN9_L-Wme9Q5-- --=_0HkUETmSZe0yAFDUJM-ofQ4-- --=_tK0gJi6yOwZ81494Hyj1VA8-- --=_bioHe0CFd5dZFZu5Yrofbg1-- --=_KaZG8U90s8GVUE3G-3DuuA4-- --=_2Nb1elXv9m9n8WdtZb0YVQ1-- --=_LnSlRao6giD60iib5KfFhg6-- --=_Pn9taMMRBLyOqsKHYcWY2Q2-- --=_onZx-kMrP82GI9xNYTjoig2-- --=_xPUIX3uCdL3T934HxKFpjw3-- --=_EwY3IbCpuMIl-Nrh7otdjQ7-- --=_5cu2YehhAJtvpUlRzKokOg1-- --=_SZtu8swNV_cEzvhjzXn7kQ2-- --=_eITsi9UK_rGWA_ceeXWYeg8-- --=_bbyymXYZTQQBMlTYD5PdCA3-- --=_URkryYH3LlOS6olRGcRj3w1-- --=_2yPxJUNmPv1e2YusLTXtrQ1-- --=_eBjtdJwDVAJ6gf2Ro28VMQ1-- --=_QOsV_Cp1__hv-3gu-B-ogw4-- --=_rhGhsyMjaRLNOEY89dkcYA1-- --=_Ce8PSI525ByrfWWnHQv_5A1-- --=_ZMNwD42p3ft-COvqlCLc9g1-- --=_ewnRmDCCuMv7kcZucJIJRQ1-- --=_FGiiTOoqqAd2bXTWiByBAA1-- --=_cI1KGtBwtnBn0zKMPXd-_Q1-- --=_KhgpObolbHBAyTiW7IvQ4Q4-- --=_unnT1bQ2vwi1waU3zDkeUw3-- --=_ShrocL78y2cYCOY14w1O3A6-- --=_d1uKLJaOGB8qYv2x6R_8Ng1-- --=_FanKRwtD644oaeAGqai9jQ2-- --=_iSvQFLKxL3tk1wJSiACVMg6-- --=_zrlaCAnfzA4G9A9aVHZEiQ8-- --=_n4cpfscgvpM4BIR-O-G6HQ8-- --=_6xO_8LaQdn0CNDesqHuWaQ5-- --=_SvJ96mnnaZCob7Xa6PqnIQ2-- --=_3oao2JsLFH83Kh-pdZvOjQ2-- --=_kko2JOKb2GgbpHTJbAah1Q2-- --=_0mk0p-ZC6fm0Kf-1U20dgg9-- --=_CVkVbuWDIqAPmKjSWdsDsw1-- --=_1lNjq6TYRjmQ8xpcKY7WNA7-- --=_3PRv8NIHY4u2Y1xl4t2sUQ1-- Horde_Mime-2.10.3/test/Horde/Mime/fixtures/flowed_msg.txt0000664000175000017500000000067713055000406021363 0ustar janjanLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Horde_Mime-2.10.3/test/Horde/Mime/fixtures/header_trailing_ws.txt0000664000175000017500000000014713055000406023057 0ustar janjanSubject: This subject has a trailing whitespace From: "Test User" Body Text. Horde_Mime-2.10.3/test/Horde/Mime/fixtures/invalid_hdr.txt0000664000175000017500000000037413055000406021512 0ustar janjanReturn-Path: Delivered-To: foo@example.com From test2@example.com Sun Apr 5 09:24:45 2015 Message-ID: <20090707115118.ooc4wo40oc88@example.com> From: "Test Q. User" To: foo@example.com Subject: Fwd: Test Test. Horde_Mime-2.10.3/test/Horde/Mime/fixtures/mime_part_v1.txt0000664000175000017500000000117013055000406021605 0ustar janjanQzoxNToiSG9yZGVfTWltZV9QYXJ0Ijo0NDQ6e2E6MjE6e2k6MDtpOjE7aToxO3M6NDoidGV4dCI7aToyO3M6NToicGxhaW4iO2k6MztzOjQ6IjdiaXQiO2k6NDthOjE6e2k6MDtzOjI6ImVuIjt9aTo1O3M6MzoiZm9vIjtpOjY7czoxMDoiYXR0YWNobWVudCI7aTo3O2E6Mjp7czozOiJmb28iO3M6MzoiYmFyIjtzOjg6ImZpbGVuYW1lIjtzOjM6ImZvbyI7fWk6ODthOjM6e3M6NDoibmFtZSI7czozOiJmb28iO3M6NzoiY2hhcnNldCI7czo4OiJ1cy1hc2NpaSI7czozOiJmb28iO3M6MzoiYmFyIjt9aTo5O2E6MDp7fWk6MTA7czoxOiIxIjtpOjExO3M6MToiCiI7aToxMjthOjE6e3M6MzoiZm9vIjtzOjM6ImJhciI7fWk6MTM7TjtpOjE0O047aToxNTtzOjQ1OiJzdmw4Q1Z0WkVFTzViZ3FSLXdGSUZROEBiaWd3b3JtLmN1cmVjYW50aS5vcmciO2k6MTY7aToxMDtpOjE3O2I6MDtpOjE4O2I6MDtpOjE5O047aToyMDtzOjM6ImZvbyI7fX0KHorde_Mime-2.10.3/test/Horde/Mime/fixtures/multiple_to.txt0000664000175000017500000002040413055000406021560 0ustar janjanMessage-ID: Subject: Standard Subject From: Test User To: =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , =?windows-1252?Q?=95Test_User?= , Foo Horde_Mime-2.10.3/test/Horde/Mime/fixtures/related_msg.txt0000664000175000017500000000272413055000406021516 0ustar janjanContent-Type: multipart/related; boundary="=_123" MIME-Version: 1.0 --=_123 Content-Type: text/html; charset=UTF-8 Content-Disposition: inline
Foo.
--=_123 Content-Type: image/png; name=index.png Content-Disposition: attachment; filename=index.png Content-Transfer-Encoding: base64 Content-ID: <456> iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0 U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADoSURBVBgZBcExblNBGAbA2ceegTRBuIKO giihSZNTcC5LUHAihNJR0kGKCDcYJY6D3/77MdOinTvzAgCw8ysThIvn/VojIyMjIyPP+bS1sUQI V2s95pBDDvmbP/mdkft83tpYguZq5Jh/OeaYh+yzy8hTHvNlaxNNczm+la9OTlar1UdA/+C2A4tr RCnD3jS8BB1obq2Gk6GU6QbQAS4BUaYSQAf4bhhKKTFdAzrAOwAxEUAH+KEM01SY3gM6wBsEAQB0 gJ+maZoC3gI6iPYaAIBJsiRmHU0AALOeFC3aK2cWAACUXe7+AwO0lc9eTHYTAAAAAElFTkSuQmCC --=_123 Content-Type: image/png; name=index2.png Content-Disposition: attachment; filename=index2.png Content-Transfer-Encoding: base64 Content-ID: <789> iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0 U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADoSURBVBgZBcExblNBGAbA2ceegTRBuIKO giihSZNTcC5LUHAihNJR0kGKCDcYJY6D3/77MdOinTvzAgCw8ysThIvn/VojIyMjIyPP+bS1sUQI V2s95pBDDvmbP/mdkft83tpYguZq5Jh/OeaYh+yzy8hTHvNlaxNNczm+la9OTlar1UdA/+C2A4tr RCnD3jS8BB1obq2Gk6GU6QbQAS4BUaYSQAf4bhhKKTFdAzrAOwAxEUAH+KEM01SY3gM6wBsEAQB0 gJ+maZoC3gI6iPYaAIBJsiRmHU0AALOeFC3aK2cWAACUXe7+AwO0lc9eTHYTAAAAAElFTkSuQmCC --=_123-- Horde_Mime-2.10.3/test/Horde/Mime/fixtures/related_msg_2.txt0000664000175000017500000000030513055000406021730 0ustar janjanContent-Type: multipart/related; boundary="=_123"; start="" MIME-Version: 1.0 --=_123 Content-Type: text/plain Part 1. --=_123 Content-Type: text/plain Content-ID: Part 2. --=_123-- Horde_Mime-2.10.3/test/Horde/Mime/fixtures/samplemultipart_msg.txt0000664000175000017500000000161013055000406023312 0ustar janjanSubject: Testing From: mrubinsk@horde.org Content-Type: multipart/alternative; boundary=Apple-Mail-B1C01B47-00D8-4AFB-8B65-DF81C4E4B47D Message-Id: Date: Tue, 1 Jan 2013 18:10:37 -0500 To: Michael Rubinsky Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (1.0) --Apple-Mail-B1C01B47-00D8-4AFB-8B65-DF81C4E4B47D Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii This is an HTML email. -- Mike Sent from my iPad... --Apple-Mail-B1C01B47-00D8-4AFB-8B65-DF81C4E4B47D Content-Transfer-Encoding: 7bit Content-Type: text/html; charset=utf-8

This is an HTML email.


--
Mike
Sent from my iPad...
--Apple-Mail-B1C01B47-00D8-4AFB-8B65-DF81C4E4B47D--Horde_Mime-2.10.3/test/Horde/Mime/fixtures/sample_msg.txt0000664000175000017500000000451013055000406021352 0ustar janjanReturn-Path: Delivered-To: foo@example.com Received: from localhost (localhost [127.0.0.1]) by example.com (Postfix) with ESMTP id 87C5B4F220 for ; Tue, 7 Jul 2009 11:51:18 -0600 (MDT) Message-ID: <20090707115118.ooc4wo40oc88@example.com> Date: Tue, 07 Jul 2009 11:51:18 -0600 From: "Test Q. User" To: foo@example.com Subject: Fwd: Test User-Agent: Internet Messaging Program (IMP) H4 (5.0-git) Content-Type: multipart/mixed; boundary="=_k4kgcwkwggwc" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit This message is in MIME format. --=_k4kgcwkwggwc Content-Type: text/plain; charset=UTF-8; format=flowed; DelSp=Yes Content-Disposition: inline Content-Transfer-Encoding: 7bit Test. --=_k4kgcwkwggwc Content-Type: message/rfc822; name="Forwarded Message" Return-Path: Delivered-To: test@example.com Received: from localhost (localhost [127.0.0.1]) by example.com (Postfix) with ESMTP id B09464F220 for ; Tue, 7 Jul 2009 11:49:00 -0600 (MDT) Message-ID: <20090707114900.4w4ksggowkc4@example.com> Date: Tue, 07 Jul 2009 11:49:00 -0600 From: Foo To: test@example.com Subject: Test User-Agent: Internet Messaging Program (IMP) H4 (5.0-git) Content-Type: multipart/mixed; boundary="=_8w0gkwkgk44o" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit This message is in MIME format. --=_8w0gkwkgk44o Content-Type: text/plain; charset=UTF-8; format=flowed; DelSp=Yes Content-Disposition: inline Content-Transfer-Encoding: 7bit Test text. --=_8w0gkwkgk44o Content-Type: text/plain; charset=UTF-8; name=test.txt Content-Disposition: attachment; filename=test.txt Content-Transfer-Encoding: 7bit Test. --=_8w0gkwkgk44o-- --=_k4kgcwkwggwc Content-Type: image/png; name=index.png Content-Disposition: attachment; filename=index.png Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0 U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADoSURBVBgZBcExblNBGAbA2ceegTRBuIKO giihSZNTcC5LUHAihNJR0kGKCDcYJY6D3/77MdOinTvzAgCw8ysThIvn/VojIyMjIyPP+bS1sUQI V2s95pBDDvmbP/mdkft83tpYguZq5Jh/OeaYh+yzy8hTHvNlaxNNczm+la9OTlar1UdA/+C2A4tr RCnD3jS8BB1obq2Gk6GU6QbQAS4BUaYSQAf4bhhKKTFdAzrAOwAxEUAH+KEM01SY3gM6wBsEAQB0 gJ+maZoC3gI6iPYaAIBJsiRmHU0AALOeFC3aK2cWAACUXe7+AwO0lc9eTHYTAAAAAElFTkSuQmCC --=_k4kgcwkwggwc-- Horde_Mime-2.10.3/test/Horde/Mime/fixtures/sample_msg2.txt0000664000175000017500000000140413055000406021433 0ustar janjanReturn-Path: Delivered-To: foo@example.com Received: from localhost (localhost [127.0.0.1]) by example.com (Postfix) with ESMTP id 87C5B4F220 for ; Tue, 7 Jul 2009 11:51:18 -0600 (MDT) Message-ID: <20090707115118.ooc4wo40oc88@example.com> Date: Tue, 07 Jul 2009 11:51:18 -0600 From: "Test Q. User" To: foo@example.com Subject: Fwd: Test User-Agent: Internet Messaging Program (IMP) H4 (5.0-git) Content-Type: multipart/mixed; Boundary="=_k4kgcwkwggwc" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit This message is in MIME format. --=_k4kgcwkwggwc Content-Type: text/plain; charset=UTF-8; format=flowed; DelSp=Yes Content-Disposition: inline Content-Transfer-Encoding: 7bit Test. --=_k4kgcwkwggwc-- Horde_Mime-2.10.3/test/Horde/Mime/fixtures/sample_msg3.txt0000664000175000017500000000035613055000406021441 0ustar janjanMessage-ID: Date: Tue, 07 Jul 2013 10:21:48 -0600 From: "Test Q. User" To: foo@example.com Subject: Test Content-Type: text/plain MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Test. Horde_Mime-2.10.3/test/Horde/Mime/fixtures/sample_msg4.txt0000664000175000017500000000026513055000406021441 0ustar janjanMessage-ID: Date: Tue, 07 Jul 2013 10:21:48 -0600 From: "Test Q. User" To: foo@example.com Subject: Test MIME-Version: 1.0 Test. Horde_Mime-2.10.3/test/Horde/Mime/fixtures/sample_msg_eai.txt0000664000175000017500000000052313055000406022170 0ustar janjanFrom: Arnt Gulbrandsen To: Arnt Gulbrandsen Date: Thu, 20 May 2004 14:28:51 +0200 Content-Disposition: attachment; filename="blåbærsyltetøy" Content-Type: text/plain; format=flowed Mime-Version: 1.0 It's a bit odd that a single-part message is an attachment with a filename. But perfectly legal. Horde_Mime-2.10.3/test/Horde/Mime/fixtures/sample_msg_eai_2.txt0000664000175000017500000000020313055000406022404 0ustar janjanFrom: Jøran Øygårdvær To: Arnt Gulbrandsen Date: Thu, 20 May 2004 14:28:51 +0200 asdf Horde_Mime-2.10.3/test/Horde/Mime/fixtures/sample_msg_eai_3.txt0000664000175000017500000000100113055000406022402 0ustar janjanFrom: Arnt Gulbrandsen To: Arnt Gulbrandsen Date: Thu, 20 May 2004 14:28:51 +0200 Content-Type: multipart/mixed; boundary=- Mime-Version: 1.0 --- Content-Type: text/plain; format=flowed; x-eai-please-do-not="abstürzen" There's nothing to do about this bodypart, except not crash. The attachment has a somewhat challenging filename. --- Content-Disposition: attachment; filename="blåbærsyltetøy" Content-Type: text/plain Content-Transfer-Encoding: base64 Rk9P ----- Horde_Mime-2.10.3/test/Horde/Mime/fixtures/sample_msg_eai_4.txt0000664000175000017500000000054513055000406022417 0ustar janjanFrom: Jøran Øygårdvær Cc: Jøran Øygårdvær Signed-Off-By: Jøran Øygårdvær To: Arnt Gulbrandsen Date: Thu, 20 May 2004 14:28:51 +0200 The From and Cc fields contain addresses. Signed-Off-By may appear to contain an address, but syntactically that's just a string. Horde_Mime-2.10.3/test/Horde/Mime/fixtures/uudecode.txt0000664000175000017500000000020313055000406021013 0ustar janjan Ignore this text. begin 644 test.txt +5&5S="!S=')I;F<` ` end More text to ignore. begin 755 test2.txt *,FYD('-T * @category Horde * @copyright 2015-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_Headers_ContentDispositionTest extends PHPUnit_Framework_TestCase { /** * @dataProvider parsingOfInputProvider */ public function testParsingOfInput($input, $expected_val, $expected_params) { $ob = new Horde_Mime_Headers_ContentParam_ContentDisposition( 'Content-Disposition', $input ); $this->assertEquals( $expected_val, $ob->value ); $params = $ob->params; ksort($params); $this->assertEquals( $expected_params, $params ); } public function parsingOfInputProvider() { return array( array( 'inline', 'inline', array() ), array( ' INLINE', 'inline', array() ), array( 'attachment', 'attachment', array() ), array( ' AtTaChMeNt ', 'attachment', array() ), array( 'bogus', '', array() ), array( " iNLINe ; filename=\"foo\";\n bar=33; size = 22", 'inline', array( 'bar' => '33', 'filename' => 'foo', 'size' => 22 ) ), array( "attachMENT;Filename=\"foo\";bar=33;SIZE=\"22\"", 'attachment', array( 'bar' => '33', 'filename' => 'foo', 'size' => 22 ) ) ); } /** * @dataProvider fullValueProvider */ public function testFullValue($value, $params, $expected) { $ob = new Horde_Mime_Headers_ContentParam_ContentDisposition( 'Content-Disposition', '' ); $ob->setContentParamValue($value); foreach ($params as $key => $val) { $ob[$key] = $val; } $this->assertEquals( $expected, $ob->full_value ); } public function fullValueProvider() { return array( array( 'attachment', array('foo' => 'bar'), 'attachment; foo=bar' ), array( 'inline', array( 'Foo' => 'BAR', 'BAZ' => 345 ), 'inline; Foo=BAR; BAZ=345' ), array( '', array( 'Foo' => 'BAR' ), 'attachment; Foo=BAR' ), array( 'inline; foo=bar', array(), 'inline' ) ); } public function testSerialize() { $ob = new Horde_Mime_Headers_ContentParam_ContentDisposition( 'Content-Disposition', 'inline; foo=bar;' ); $ob2 = unserialize(serialize($ob)); $this->assertEquals( 'inline', $ob2->value ); $this->assertEquals( array('foo' => 'bar'), $ob2->params ); } public function testClone() { $ob = new Horde_Mime_Headers_ContentParam_ContentDisposition( 'Content-Disposition', 'inline; foo=bar;' ); $ob2 = clone $ob; $ob->setContentParamValue('attachment'); $ob['foo'] = 123; $this->assertEquals( 'inline', $ob2->value ); $this->assertEquals( array('foo' => 'bar'), $ob2->params ); } /** * @dataProvider isDefaultProvider */ public function testIsDefault($value, $is_default) { $ob = new Horde_Mime_Headers_ContentParam_ContentDisposition( 'Content-Disposition', $value ); if ($is_default) { $this->assertTrue($ob->isDefault()); } else { $this->assertFalse($ob->isDefault()); } } public function isDefaultProvider() { return array( array( '', true ), array( 'attachment', false ), array( 'attachment; foo=bar', false ), array( 'inline', false ), array( 'inline; foo=bar', false ) ); } } Horde_Mime-2.10.3/test/Horde/Mime/Headers/ContentIdTest.php0000664000175000017500000000364113055000406021430 0ustar janjan * @category Horde * @copyright 2015-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_Headers_ContentIdTest extends PHPUnit_Framework_TestCase { /** * @dataProvider valueProvider */ public function testValue($input, $expected_val) { $ob = new Horde_Mime_Headers_ContentId(null, $input); $this->assertEquals( $expected_val, $ob->value ); $this->assertFalse($ob->isDefault()); } public function valueProvider() { return array( array( 'foo', '' ), array( '', '' ), array( '<' ) ); } public function testClone() { $ob = new Horde_Mime_Headers_ContentId(null, 'foo'); $ob2 = clone $ob; $ob->setValue('bar'); $this->assertEquals( '', $ob2->value ); } public function testSerialize() { $ob = new Horde_Mime_Headers_ContentId(null, 'foo'); $ob2 = unserialize(serialize($ob)); $this->assertEquals( '', $ob2->value ); } public function testStaticCreateMethod() { $ob = Horde_Mime_Headers_ContentId::create(); $this->assertStringMatchesFormat( '<%s@%a>', $ob->value ); } } Horde_Mime-2.10.3/test/Horde/Mime/Headers/ContentLanguageTest.php0000664000175000017500000000326313055000406022617 0ustar janjan * @category Horde * @copyright 2015-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_Headers_ContentLanguageTest extends PHPUnit_Framework_TestCase { /** * @dataProvider parsingOfInputProvider */ public function testParsingOfInput($input, $expected_val, $expected_langs) { $ob = new Horde_Mime_Headers_ContentLanguage(null, $input); $this->assertEquals( $expected_val, $ob->value ); $this->assertEquals( $expected_langs, $ob->langs ); } public function parsingOfInputProvider() { return array( array( 'en', 'en', array('en') ), array( 'en, de', 'en,de', array('en', 'de') ), array( ' eN , de ,PT', 'en,de,pt', array('en', 'de', 'pt') ), array( array('en', 'de'), 'en,de', array('en', 'de') ), array( "e\0n", 'en', array('en') ) ); } } Horde_Mime-2.10.3/test/Horde/Mime/Headers/ContentTransferEncodingTest.php0000664000175000017500000000405513055000406024327 0ustar janjan * @category Horde * @copyright 2015-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_Headers_ContentTransferEncodingTest extends PHPUnit_Framework_TestCase { /** * @dataProvider valuesProvider */ public function testValues($input, $expected_val, $is_default) { $ob = new Horde_Mime_Headers_ContentTransferEncoding(null, $input); $this->assertEquals( $expected_val, $ob->value ); if ($is_default) { $this->assertTrue($ob->isDefault()); } else { $this->assertFalse($ob->isDefault()); } } public function valuesProvider() { return array( array( '7bit', '7bit', true ), array( ' 8BIT', '8bit', false ), array( ' quoted-pRiNtAbLe ', 'quoted-printable', false ), array( 'BINARY', 'binary', false ), array( 'base64', 'base64', false ), array( "7\0bit", '7bit', true ), array( ' X-foo', 'x-foo', false ), array( 'foo', Horde_Mime_Headers_ContentTransferEncoding::UNKNOWN_ENCODING, false ) ); } } Horde_Mime-2.10.3/test/Horde/Mime/Headers/ContentTypeTest.php0000664000175000017500000002070513055000406022015 0ustar janjan * @category Horde * @copyright 2015-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_Headers_ContentTypeTest extends PHPUnit_Framework_TestCase { /** * @dataProvider parsingOfInputProvider */ public function testParsingOfInput($input, $expected_val, $expected_params) { $ob = new Horde_Mime_Headers_ContentParam_ContentType( 'Content-Type', $input ); $this->assertEquals( $expected_val, $ob->value ); $params = $ob->params; ksort($params); $this->assertEquals( $expected_params, $params ); } public function parsingOfInputProvider() { return array( array( 'text/plain', 'text/plain', array() ), array( ' TEXT/PLAIN', 'text/plain', array() ), array( ' modEL/hTmL ', 'model/html', array() ), array( 'bogus/foo', 'x-bogus/foo', array() ), array( " message/RFC822 ; Filename=\"foo\";\n BAR=33 ; foo = 22", 'message/rfc822', array( 'bar' => '33', 'filename' => 'foo', 'foo' => '22' ) ), array( 'foo', Horde_Mime_Headers_ContentParam_ContentType::DEFAULT_CONTENT_TYPE, array() ) ); } public function testClone() { $ob = new Horde_Mime_Headers_ContentParam_ContentType( 'Content-Type', 'text/plain; foo=bar;' ); $ob2 = clone $ob; $ob->setContentParamValue('image/jpeg'); $ob['foo'] = 123; $this->assertEquals( 'text/plain', $ob2->value ); $this->assertEquals( array('foo' => 'bar'), $ob2->params ); } public function testSerialize() { $ob = new Horde_Mime_Headers_ContentParam_ContentType( 'Content-Type', 'text/plain; foo=bar;' ); $ob2 = unserialize(serialize($ob)); $this->assertEquals( 'text/plain', $ob2->value ); $this->assertEquals( array('foo' => 'bar'), $ob2->params ); } public function testStaticCreateMethod() { $ob = Horde_Mime_Headers_ContentParam_ContentType::create(); $this->assertEquals( $ob::DEFAULT_CONTENT_TYPE, $ob->value ); $this->assertEmpty($ob->params); } public function testParamsReturnsACopyOfArray() { $ob = Horde_Mime_Headers_ContentParam_ContentType::create(); $ob['foo'] = 'bar'; $params = $ob->params; $params['foo'] = '123'; $this->assertEquals( array('foo' => 'bar'), $ob->params ); } /** * @dataProvider parsingContentTypeValueProvider */ public function testParsingContentTypeValue($value, $primary, $sub) { $ob = Horde_Mime_Headers_ContentParam_ContentType::create(); $ob->setContentParamValue($value); $this->assertEquals( $primary, $ob->ptype ); $this->assertEquals( $sub, $ob->stype ); } public function parsingContentTypeValueProvider() { return array( array( 'text/plain', 'text', 'plain' ), array( 'TEXT/HTML', 'text', 'html' ), array( 'foo/bar', 'x-foo', 'bar' ), array( 'text/plain; charset=utf-8', 'text', 'plain' ) ); } /** * @dataProvider typeCharsetPropertyProvider */ public function testTypeCharsetProperty($value, $charset, $expected) { $ob = Horde_Mime_Headers_ContentParam_ContentType::create(); $ob->setContentParamValue($value); $ob['charset'] = $charset; $this->assertEquals( $expected, $ob->type_charset ); } public function typeCharsetPropertyProvider() { return array( array( 'text/plain', 'utf-8', 'text/plain; charset=utf-8' ), array( 'text/html', 'utf-8', 'text/html; charset=utf-8' ), array( 'image/jpeg', 'utf-8', 'image/jpeg' ) ); } /** * @dataProvider multipartPartsHaveBoundary */ public function testMultipartPartsHaveBoundary($value, $has_boundary) { $ob = Horde_Mime_Headers_ContentParam_ContentType::create(); $ob->setContentParamValue($value); if ($has_boundary) { $this->assertArrayHasKey('boundary', $ob->params); } else { $this->assertArrayNotHasKey('boundary', $ob->params); } } public function multipartPartsHaveBoundary() { return array( array( 'text/plain', false ), array( 'image/jpeg', false ), array( 'multipart/mixed', true ) ); } /** * @dataProvider charsetIsLowercaseProvider */ public function testCharsetIsLowercase($charset, $expected) { $ob = Horde_Mime_Headers_ContentParam_ContentType::create(); $ob->setContentParamValue('text/plain'); $ob['charset'] = $charset; $this->assertEquals( $expected, $ob['charset'] ); } public function charsetIsLowercaseProvider() { return array( array( 'utf-8', 'utf-8' ), array( 'ISO-8859-1', 'iso-8859-1' ), array( 'US-ASCII', null ) ); } public function testMultipartCantUnsetBoundary() { $ob = Horde_Mime_Headers_ContentParam_ContentType::create(); $ob->setContentParamValue('multipart/mixed'); $this->assertNotEmpty($ob['boundary']); unset($ob['boundary']); $this->assertNotEmpty($ob['boundary']); } /** * @dataProvider isDefaultProvider */ public function testIsDefault($value, $is_default) { $ob = new Horde_Mime_Headers_ContentParam_ContentType( 'Content-Type', $value ); if ($is_default) { $this->assertTrue($ob->isDefault()); } else { $this->assertFalse($ob->isDefault()); } } public function isDefaultProvider() { return array( array( 'text/plain', true ), array( 'text/plain; charset=us-ascii', true ), array( 'text/plain; charset=us-ascii; foo=bar', false ), array( 'text/plain; charset=utf-8', false ), array( 'text/html', false ), array( 'text/html; charset=us-ascii', false ), array( 'image/jpeg', false ), array( 'image/jpeg; charset=utf-8', false ) ); } } Horde_Mime-2.10.3/test/Horde/Mime/Mdn/NonTranslatedTest.php0000664000175000017500000000605513055000406021462 0ustar janjan * @category Horde * @copyright 2014-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_Mdn_NonTranslatedTest extends PHPUnit_Framework_TestCase { private $oldlocale; public function setUp() { $this->oldlocale = setlocale(LC_MESSAGES, 0); setlocale(LC_MESSAGES, 'C'); } public function tearDown() { setlocale(LC_MESSAGES, $this->oldlocale); } public function testGenerate() { $h = new Horde_Mime_Headers(); $ob = new Horde_Mime_Mdn($h); try { $ob->generate(true, true, 'deleted', 'foo', null); $this->fail('Expected Exception'); } catch (RuntimeException $e) {} $date = 'Tue, 18 Nov 2014 20:14:17 -0700'; $mdn_addr = 'Aäb '; $h->addHeader('Date', $date); $h->addHeader('Subject', 'Test'); $h->addHeader('To', '"BAR" '); $ob->addMdnRequestHeaders($mdn_addr); $mailer = new Horde_Mail_Transport_Mock(); $ob->generate( true, true, 'displayed', 'test.example.com', $mailer, array( 'from_addr' => 'bar@example.com' ), array('error'), array('error' => 'Foo') ); $sent = str_replace("\r\n", "\n", $mailer->sentMessages[0]); $this->assertEquals( 'auto-replied', $sent['headers']['Auto-Submitted'] ); $this->assertEquals( 'bar@example.com', $sent['headers']['From'] ); $this->assertEquals( $mdn_addr, Horde_Mime::decode($sent['headers']['To']) ); $this->assertEquals( 'Disposition Notification', $sent['headers']['Subject'] ); $this->assertStringMatchesFormat( 'This message is in MIME format. --=%s Content-Type: text/plain; format=flowed; DelSp=Yes The message sent on Tue, 18 Nov 2014 20:14:17 -0700 to BAR with subject "Test" has been displayed. This is no guarantee that the message has been read or understood. --=%s Content-Type: message/disposition-notification Reporting-UA: test.example.com; Horde Application Framework 5 Final-Recipient: rfc822;bar@example.com Disposition: manual-action/MDN-sent-manually; displayed/error Error: Foo --=%s Content-Type: message/rfc822 Date: Tue, 18 Nov 2014 20:14:17 -0700 Subject: Test To: BAR Disposition-Notification-To: =?utf-8?b?QcOkYg==?= --=%s ', $sent['body'] ); } } Horde_Mime-2.10.3/test/Horde/Mime/AllTests.php0000664000175000017500000000013213055000406017051 0ustar janjanrun(); Horde_Mime-2.10.3/test/Horde/Mime/bootstrap.php0000664000175000017500000000014313055000406017335 0ustar janjan * @category Horde * @copyright 2010-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_ContentParamTest extends PHPUnit_Framework_TestCase { /** * @dataProvider encodeProvider */ public function testEncode($params, $opts, $expected) { $cp = new Horde_Mime_Headers_ContentParam('NOT_USED', $params); ksort($expected); $params = $cp->encode($opts); ksort($params); $this->assertEquals( $expected, $params ); } public function encodeProvider() { return array( array( array( 'bar' => 'foo', 'test' => str_repeat('a', 100) . '.txt' ), array( 'broken_rfc2231' => true ), array( 'bar' => 'foo', 'test' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt', 'test*0' =>'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'test*1' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt' ) ), array( array( 'bar' => 'foo', 'test' => str_repeat('a', 100) . '.txt' ), array( 'broken_rfc2231' => false ), array( 'bar' => 'foo', 'test*0' =>'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'test*1' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt' ) ), array( array( 'foo' => "\x01" ), array(), array( 'foo' => "\"\x01\"" ) ), // Bug #12127 (part 1) array( array( 'foo' => 'test' ), array( 'broken_rfc2231' => true, 'charset' => 'UTF-16LE' ), array( 'foo' => 'test' ) ), // Bug #12127 (part 2) array( array( 'foo' => 'ā' ), array( 'broken_rfc2231' => true, 'charset' => 'UTF-16LE' ), array( 'foo*' => "utf-16le''%01%01", 'foo' => '"=?utf-16le?b?AQE=?="' ) ) ); } /** * @dataProvider decodeProvider */ public function testDecode($in, $val_expected, $params_expected) { $cp = new Horde_Mime_Headers_ContentParam('NOT_USED', $in); $this->assertEquals( $val_expected, $cp->value ); ksort($params_expected); $params = $cp->params; ksort($params); $this->assertEquals( $params_expected, $params ); } public function decodeProvider() { return array( array( 'foo', 'foo', array() ), array( 'foo=bar', null, array( 'foo' => 'bar' ) ), array( 'test ; foo = bar ; baz = "goo"', 'test', array( 'baz' => 'goo', 'foo' => 'bar' ) ), array( 'test ; foo*1=B; foo*0="A"; foo*3=D; foo*2="C";foo*5=F;' . 'foo*4="E"; foo*7=H; foo*6="G"; foo*9=J; foo*8=I; foo*11=L; ' . 'bar = Z ; foo*10=K;', 'test', array( 'bar' => 'Z', 'foo' => 'ABCDEFGHIJKL' ) ), array( "attachment; size=147502;\n filename*=utf-8''Factura%20n%C2%BA%2010.pdf", 'attachment', array( 'size' => '147502', 'filename' => 'Factura nº 10.pdf' ) ), // Bug #13587 array( "multipart/mixed; boundary=\"EPOC32-8'4Lqb7RwmJkJ+8bx'NRLMC2SXt1Ls'Gfpd0RMtxgP6JQFKj\"", 'multipart/mixed', array( 'boundary' => "EPOC32-8'4Lqb7RwmJkJ+8bx'NRLMC2SXt1Ls'Gfpd0RMtxgP6JQFKj" ) ), // Gmail array( // Content-Disposition "attachment;\n filename=\"=?UTF-8?Q?Vantagens_da_Caixa_para_Empresas_e_alterac=CC=A7a=CC=83o_do_prec=CC=A7?=\n =?UTF-8?Q?a=CC=81rio=2Epdf?=\"", 'attachment', array( 'filename' => 'Vantagens da Caixa para Empresas e alteração do preçário.pdf' ) ), array( // Content-Type "application/pdf;\nname=\"=?UTF-8?Q?Vantagens_da_Caixa_para_Empresas_e_alterac=CC=A7a=CC=83o_do_prec=CC=A7?=\n =?UTF-8?Q?a=CC=81rio=2Epdf?=\"", 'application/pdf', array( 'name' => 'Vantagens da Caixa para Empresas e alteração do preçário.pdf' ) ), // mail.app // Note: filename/name parameter value is NOT the same UTF-8 // string as the Gmail examples above; character length is the // same, but Gmail byte-length is 4 bytes longer (they are using // different Unicode points to display the 4 non-ASCII chars) array( // Content-Disposition "inline;\n filename*=iso-8859-1''Vantagens%20da%20Caixa%20para%20Empresas%20e%20altera%E7%E3o%20do%20pre%E7%E1rio.pdf", 'inline', array( 'filename' => 'Vantagens da Caixa para Empresas e alteração do preçário.pdf' ) ), array( // Content-Type "application/pdf;\n name=\"=?iso-8859-1?Q?Vantagens_da_Caixa_para_Empresas_e_altera=E7=E3o_?=\n =?iso-8859-1?Q?do_pre=E7=E1rio=2Epdf?=\"", 'application/pdf', array( 'name' => 'Vantagens da Caixa para Empresas e alteração do preçário.pdf' ) ), // Params with different cases (params are case-insensitive) array( "kEy*1=b; KEY*0=a; key*2=c", null, array( 'key' => 'abc' ) ), // Adapted from Dovecot's src/lib-mail/test-rfc2231-parser.c array( "key4*=us-ascii''foo" . "; key*2=ba%" . "; key2*0=a" . "; key3*0*=us-ascii'en'xyz" . "; key*0=\"foo\"" . "; key2*1*=b%25" . "; key3*1=plop%" . "; key*1=baz", null, array( 'key' => 'foobazba%', 'key2' => 'ab%', 'key3' => 'xyzplop%', 'key4' => 'foo' ) ) ); } } Horde_Mime-2.10.3/test/Horde/Mime/HeadersTest.php0000664000175000017500000004701713055000406017546 0ustar janjan * @category Horde * @copyright 2010-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_HeadersTest extends PHPUnit_Framework_TestCase { public function testClone() { $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader('To', 'foo@example.com'); $hdrs->addHeader('Resent-To', 'foo2@example.com'); $hdrs->addHeader('Resent-To', 'foo3@example.com'); $ct = new Horde_Mime_Headers_ContentParam_ContentType( null, 'text/plain; charset="iso-8859-1"' ); $hdrs->addHeaderOb($ct); $cd = new Horde_Mime_Headers_ContentParam_ContentDisposition( null, 'attachment; filename="foo"' ); $hdrs->addHeaderOb($cd); $hdrs2 = clone $hdrs; $hdrs->addHeader('To', 'bar@example.com'); $hdrs->addHeader('Resent-To', 'bar2@example.com'); $ct['charset'] = 'utf-8'; $cd['filename'] = 'bar'; $this->assertEquals( 'foo@example.com', strval($hdrs2['To']) ); $this->assertEquals( array('foo2@example.com', 'foo3@example.com'), $hdrs2['Resent-To']->value ); $this->assertEquals( array('charset' => 'iso-8859-1'), $hdrs2['Content-Type']->params ); $this->assertEquals( array('filename' => 'foo'), $hdrs2['Content-Disposition']->params ); } /** * @dataProvider serializeProvider */ public function testSerialize($header, $value) { $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader($header, $value); $hdrs2 = unserialize(serialize($hdrs)); /* @deprecated */ $this->assertEquals( $value, $hdrs2->getValue($header) ); $this->assertequals( $value, strval($hdrs2[$header]) ); } public function serializeProvider() { return array( array( 'Subject', 'My Subject' ), array( 'To', 'recipient@example.com' ), array( 'Cc', 'null@example.com' ), array( 'Bcc', 'invisible@example.com' ), array( 'From', 'sender@example.com' ) ); } /** * @dataProvider normalHeaderDecodeProvider */ public function testNormalHeaderDecode($header, $value, $decoded) { $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader($header, $value); /* @deprecated */ $this->assertEquals( $decoded, $hdrs->getValue($header) ); $this->assertEquals( $decoded, $hdrs[$header]->value_single ); } public function normalHeaderDecodeProvider() { return array( array( 'Test', '=?iso-8859-15?b?VmVyc2nzbg==?=', 'Versión' ), array( 'To', '=?utf-8?B?IklsZ2EginVwbGluc2thIg==?= ', 'Ilga Šuplinska ' ), array( 'From', 'Firstname =?utf-8?b?U2Vjb25kw5Es?= Third ', '"Firstname SecondÑ, Third" ' ) ); } /** * @dataProvider contentParamHeaderDecodeProvider */ public function testContentParamHeaderDecode( $header, $value, $decode_value, $decode_params ) { $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader($header, $value); $this->assertEquals( $decode_value, $hdrs[$header]->value ); ksort($decode_params); $params = $hdrs[$header]->params; ksort($params); $this->assertEquals( $decode_params, $params ); } public function contentParamHeaderDecodeProvider() { return array( array( 'Content-Type', 'text/plain; name="=?iso-8859-15?b?VmVyc2nzbg==?="', 'text/plain', array( 'name' => 'Versión' ) ), array( 'Content-Disposition', "attachment; size=147502;\n filename*=utf-8''Factura%20n%C2%BA%2010.pdf", 'attachment', array( 'size' => '147502', 'filename' => 'Factura nº 10.pdf' ) ) ); } /** * @dataProvider headerAutoDetectCharsetProvider */ public function testHeaderAutoDetectCharset($header, $value, $decoded) { $hdrs = Horde_Mime_Headers::parseHeaders($value); /* @deprecated */ $this->assertEquals( $decoded, $hdrs->getValue($header) ); $this->assertEquals( $decoded, $hdrs[$header]->value_single ); } public function headerAutoDetectCharsetProvider() { return array( array( 'Test', // This string is in Windows-1252 'Test: ' . base64_decode('UnVubmVyc5IgQWxlcnQh='), 'Runners’ Alert!' ) ); } /** * @dataProvider headerEncodeProvider */ public function testHeaderEncode( $header, $values, $charset, $encoded ) { $hdrs = new Horde_Mime_Headers(); foreach ($values as $val) { $hdrs->addHeader($header, $val); } $hdr_encode = $hdrs[$header]->sendEncode(array( 'charset' => $charset )); $this->assertEquals( $encoded, $hdr_encode ); $hdr_array = $hdrs->toArray(array( 'charset' => $charset )); $this->assertEquals( (count($encoded) > 1) ? $encoded : reset($encoded), $hdr_array[$header] ); } public function headerEncodeProvider() { return array( /* Single address header */ array( 'To', array( 'Empfänger ' ), 'iso-8859-1', array( '=?iso-8859-1?b?RW1wZuRuZ2Vy?= ' ) ), /* Multiple address header */ array( 'Resent-To', array( 'Empfänger ', 'Foo ' ), 'iso-8859-1', array( '=?iso-8859-1?b?RW1wZuRuZ2Vy?= ', 'Foo ' ) ), /* Bug #13814 */ array( 'Content-Description', array( 'AüA' ), 'utf-8', array( '=?utf-8?b?QcO8QQ==?=' ) ) ); } public function testMultipleContentType() { $hdrs = Horde_Mime_Headers::parseHeaders( "Content-Type: multipart/mixed\n" . "Content-Type: multipart/mixed\n" ); /* @deprecated */ $this->assertInternalType( 'string', $hdrs->getValue('content-type', Horde_Mime_Headers::VALUE_BASE) ); $this->assertInternalType( 'string', $hdrs['content-type']->value ); } /** * @dataProvider multivalueHeadersProvider */ public function testMultivalueHeaders($header, $in, $expected) { $hdrs = Horde_Mime_Headers::parseHeaders($in); /* @deprecated */ $this->assertEquals( $expected, $hdrs->getValue($header) ); $this->assertEquals( $expected, $hdrs['to']->value ); } public function multivalueHeadersProvider() { $expected = 'recipient1@example.com, recipient2@example.com'; return array( array( 'To', 'To: recipient1@example.com, recipient2@example.com', $expected ), array( 'To', "To: recipient1@example.com\nTo: recipient2@example.com", $expected ) ); } /** * @dataProvider addHeaderWithGroupProvider */ public function testAddHeaderWithGroup($header, $email) { $rfc822 = new Horde_Mail_Rfc822(); $ob = $rfc822->parseAddressList($email); $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader($header, $ob); /* @deprecated */ $this->assertEquals( $email, $hdrs->getValue($header) ); $this->assertEquals( $email, $hdrs[$header]->value ); } public function addHeaderWithGroupProvider() { return array( array( 'To', 'Test: foo@example.com, bar@example.com;' ) ); } /** * @dataProvider unencodeMimeHeaderProvider */ public function testUnencodedMimeHeader($header, $in, $decoded) { $hdrs = Horde_Mime_Headers::parseHeaders($in); /* @deprecated */ $this->assertEquals( $decoded, $hdrs->getValue($header) ); $this->assertEquals( $decoded, $hdrs[$header]->value ); } public function unencodeMimeHeaderProvider() { return array( array( 'From', // The header is base64 encoded to preserve charset data. base64_decode('RnJvbTogwqkgVklBR1JBIMKuIE9mZmljaWFsIFNpdGUgPGZvb0BleGFtcGxlLmNvbT4='), '© VIAGRA ® Official Site ' ) ); } /** * @dataProvider parseContentDispositionHeaderWithUtf8DataProvider */ public function testParseContentDispositionHeaderWithUtf8Data( $header, $parameter, $msg, $value ) { $hdrs = Horde_Mime_Headers::parseHeaders($msg); /* @deprecated */ $cd_params = $hdrs->getValue( $header, $hdrs::VALUE_PARAMS ); $this->assertEquals( $value, $cd_params[$parameter] ); $this->assertEquals( $value, $hdrs[$header]->params[$parameter] ); } public function parseContentDispositionHeaderWithUtf8DataProvider() { return array( array( 'content-disposition', 'filename', file_get_contents(__DIR__ . '/fixtures/sample_msg_eai.txt'), 'blåbærsyltetøy' ) ); } public function testCaseInsensitiveContentParameters() { $hdr = 'Content-Type: multipart/mixed; BOUNDARY="foo"'; $hdrs = Horde_Mime_Headers::parseHeaders($hdr); /* @deprecated */ $c_params = $hdrs->getValue( 'Content-Type', $hdrs::VALUE_PARAMS ); $this->assertEquals( 'foo', $c_params['boundary'] ); $this->assertEquals( 'foo', $hdrs['content-type']['boundary'] ); } public function testParseEaiAddresses() { /* Simple message. */ $msg = file_get_contents(__DIR__ . '/fixtures/sample_msg_eai_2.txt'); $hdrs = Horde_Mime_Headers::parseHeaders($msg); /* @deprecated */ $this->assertEquals( 'Jøran Øygårdvær ', $hdrs->getValue('from') ); $this->assertEquals( 'Jøran Øygårdvær ', $hdrs['from']->value ); /* Message with EAI addresses in 2 fields, and another header that * contains a string (that looks like an address). */ $msg = file_get_contents(__DIR__ . '/fixtures/sample_msg_eai_4.txt'); $hdrs = Horde_Mime_Headers::parseHeaders($msg); /* @deprecated */ $this->assertEquals( 'Jøran Øygårdvær ', $hdrs->getValue('from') ); $this->assertEquals( 'Jøran Øygårdvær ', $hdrs->getValue('cc') ); $this->assertEquals( 'Jøran Øygårdvær ', $hdrs->getValue('signed-off-by') ); $this->assertEquals( 'Jøran Øygårdvær ', $hdrs['from']->value ); $this->assertEquals( 'Jøran Øygårdvær ', $hdrs['cc']->value ); $this->assertEquals( 'Jøran Øygårdvær ', $hdrs['signed-off-by']->value_single ); } /** * @dataProvider undisclosedHeaderParsingProvider */ public function testUndisclosedHeaderParsing($header, $value) { $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader($header, $value); /* @deprecated */ $this->assertEquals( '', $hdrs->getValue($header) ); $this->assertEquals( '', $hdrs[$header]->value ); } public function undisclosedHeaderParsingProvider() { return array( array('To', 'undisclosed-recipients'), array('To', 'undisclosed-recipients:'), array('To', 'undisclosed-recipients:;') ); } public function testMultipleToAddresses() { $msg = file_get_contents(__DIR__ . '/fixtures/multiple_to.txt'); $hdrs = Horde_Mime_Headers::parseHeaders($msg); /* @deprecated */ $this->assertNotEmpty($hdrs->getValue('To')); $this->assertNotEmpty($hdrs['To']->value); } public function testBug12189() { $msg = file_get_contents(__DIR__ . '/fixtures/header_trailing_ws.txt'); $hdrs = Horde_Mime_Headers::parseHeaders($msg); /* @deprecated */ $this->assertNotNull($hdrs->getValue('From')); $this->assertNotNull($hdrs['From']->value); } public function testParseHeadersGivingStreamResource() { $fp = fopen(__DIR__ . '/fixtures/multiple_to.txt', 'r'); $hdrs = Horde_Mime_Headers::parseHeaders($fp); fclose($fp); /* @deprecated */ $this->assertNotEmpty($hdrs->getValue('To')); $this->assertNotEmpty($hdrs['To']->value); } public function testParseHeadersGivingHordeStreamObject() { $stream = new Horde_Stream_Existing(array( 'stream' => fopen(__DIR__ . '/fixtures/multiple_to.txt', 'r') )); $hdrs = Horde_Mime_Headers::parseHeaders($stream); /* @deprecated */ $this->assertNotEmpty($hdrs->getValue('To')); $this->assertNotEmpty($hdrs['To']); } public function testParseHeadersBlankSubject() { $stream = new Horde_Stream_Existing(array( 'stream' => fopen(__DIR__ . '/fixtures/blank_subject.txt', 'r') )); $hdrs = Horde_Mime_Headers::parseHeaders($stream); /* @deprecated */ $this->assertNotEmpty($hdrs->getValue('To')); $this->assertNotEmpty($hdrs['To']); } /** * @dataProvider multiplePriorityHeadersProvider */ public function testMultiplePriorityHeaders($header, $data, $value) { $hdrs = Horde_Mime_Headers::parseHeaders($data); /* @deprecated */ $this->assertInternalType( 'string', $hdrs->getValue($header, Horde_Mime_Headers::VALUE_BASE) ); $this->assertEquals( $value, $hdrs->getValue($header) ); $this->assertInternalType( 'string', $hdrs[$header]->value_single ); $this->assertEquals( $value, $hdrs[$header]->value_single ); } public function multiplePriorityHeadersProvider() { return array( array( 'Importance', "Importance: High\nImportance: Low\n", 'High' ), array( 'X-priority', "X-Priority: 1\nX-priority: 5\n", '1' ) ); } public function testInvalidHeaderParsing() { $data = file_get_contents(__DIR__ . '/fixtures/invalid_hdr.txt'); $hdrs = Horde_Mime_Headers::parseHeaders($data); $this->assertEquals( 'foo@example.com', strval($hdrs['to']) ); $this->assertNull($hdrs['From test2@example.com Sun Apr 5 09']); } /** * @dataProvider addHeaderObProvider */ public function testAddHeaderOb($ob, $valid) { $hdrs = new Horde_Mime_Headers(); try { $hdrs->addHeaderOb($ob, true); if (!$valid) { $this->fail(); } } catch (InvalidArgumentException $e) { if ($valid) { $this->fail(); } return; } $this->assertEquals( $ob, $hdrs[$ob->name] ); } public function addHeaderObProvider() { return array( array( new Horde_Mime_Headers_Addresses('To', 'foo@example.com'), true ), array( new Horde_Mime_Headers_Element_Single('To', 'foo@example.com'), false ) ); } /** * @dataProvider headerGenerationProvider */ public function testHeaderGeneration($label, $data, $class) { $hdrs = new Horde_Mime_Headers(); $this->assertNull($hdrs[$label]); $hdrs->addHeader($label, $data); $ob = $hdrs[$label]; $this->assertNotNull($ob); $this->assertInstanceOf($class, $ob); } public function headerGenerationProvider() { return array( array( 'content-disposition', 'inline', 'Horde_Mime_Headers_ContentParam_ContentDisposition' ), array( 'content-language', 'en', 'Horde_Mime_Headers_ContentLanguage' ), array( 'content-type', 'text/plain', 'Horde_Mime_Headers_ContentParam_ContentType' ) ); } public function testBug14381() { $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader('Date', 'Sat, 22 May 2016 01:41:04 0000'); $this->assertEquals($hdrs->getValue('Date'), 'Sat, 22 May 2016 01:41:04 +0000'); $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader('Date', 'Sat, 22 May 2016 01:41:04 +0000'); $this->assertEquals($hdrs->getValue('Date'), 'Sat, 22 May 2016 01:41:04 +0000'); } } Horde_Mime-2.10.3/test/Horde/Mime/MagicTest.php0000664000175000017500000000147113055000406017205 0ustar janjan * @category Horde * @copyright 2010-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_MagicTest extends PHPUnit_Framework_TestCase { /** * @requires extension fileinfo */ public function testBug325() { $this->assertEquals( 'text/plain', Horde_Mime_Magic::analyzeFile(__DIR__ . '/fixtures/flowed_msg.txt') ); } } Horde_Mime-2.10.3/test/Horde/Mime/MailTest.php0000664000175000017500000004727213055000406017060 0ustar janjan * @category Horde * @copyright 2010-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_MailTest extends PHPUnit_Framework_TestCase { public static function setUpBeforeClass() { $_SERVER['SERVER_NAME'] = 'mail.example.com'; setlocale(LC_ALL, 'C'); } public static function tearDownAfterClass() { unset($_SERVER['SERVER_NAME']); setlocale(LC_ALL, ''); } public function testConstructor() { $mail = new Horde_Mime_Mail(array( 'Subject' => 'My Subject', 'body' => "This is\nthe body", 'To' => 'recipient@example.com', 'From' => 'sender@example.com', 'charset' => 'iso-8859-15' )); $dummy = new Horde_Mail_Transport_Mock(); $mail->send($dummy); $sent = str_replace("\r\n", "\n", $dummy->sentMessages[0]); $this->assertStringMatchesFormat( 'Subject: My Subject To: recipient@example.com From: sender@example.com Message-ID: <%d.%s@mail.example.com> User-Agent: Horde Application Framework %d Date: %s, %d %s %d %d:%d:%d %s Content-Type: text/plain; charset=iso-8859-15; format=flowed; DelSp=Yes MIME-Version: 1.0', $sent['header_text'] ); $this->assertEquals( "This is\nthe body\n", $sent['body'] ); $this->assertEquals( array('recipient@example.com'), $sent['recipients'] ); } public function testMethods() { $mail = new Horde_Mime_Mail(); $mail->addHeader('Subject', 'My Subject'); $mail->setBody("This is\nthe body", 'iso-8859-15'); $mail->addHeader('To', 'recipient@example.com'); $mail->addHeader('Cc', 'null@example.com'); $mail->addHeader('Bcc', 'invisible@example.com'); $mail->addHeader('From', 'sender@example.com'); $mail->removeHeader('Cc'); $dummy = new Horde_Mail_Transport_Mock(); $mail->send($dummy); $sent = str_replace("\r\n", "\n", $dummy->sentMessages[0]); $this->assertStringMatchesFormat( 'Subject: My Subject To: recipient@example.com From: sender@example.com Message-ID: <%d.%s@mail.example.com> User-Agent: Horde Application Framework %d Date: %s, %d %s %d %d:%d:%d %s%d Content-Type: text/plain; charset=iso-8859-15; format=flowed; DelSp=Yes MIME-Version: 1.0', $sent['header_text'] ); $this->assertEquals( "This is\nthe body\n", $sent['body'] ); $this->assertEquals( array('recipient@example.com', 'invisible@example.com'), $sent['recipients'] ); } public function testEncoding() { $mail = new Horde_Mime_Mail(array( 'Subject' => 'Schöner Betreff', 'body' => "Hübsche Umlaute \n und Leerzeichen.", 'To' => 'Empfänger ', 'From' => 'sender@example.com', 'Cc' => 'Der schöne Peter ', 'charset' => 'iso-8859-1' )); $dummy = new Horde_Mail_Transport_Mock(); $mail->send($dummy); $sent = str_replace("\r\n", "\n", $dummy->sentMessages[0]); $this->assertStringMatchesFormat( 'Subject: =?iso-8859-1?b?U2No9m5lcg==?= Betreff To: =?iso-8859-1?b?RW1wZuRuZ2Vy?= From: sender@example.com Cc: Der =?iso-8859-1?b?c2No9m5l?= Peter Message-ID: <%d.%s@mail.example.com> User-Agent: Horde Application Framework %d Date: %s, %d %s %d %d:%d:%d %s%d Content-Type: text/plain; charset=iso-8859-1; format=flowed; DelSp=Yes MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable', $sent['header_text'] ); $this->assertEquals( "H=FCbsche Umlaute\n und Leerzeichen.\n", // Some broken PHP versions will insert =20 instead of spaces. str_replace( '=20', ' ', $sent['body'] ) ); $this->assertEquals( array('recipient@example.com', 'peter@example.com'), $sent['recipients'] ); } public function testAddPart() { $mail = new Horde_Mime_Mail(array( 'Subject' => 'My Subject', 'body' => "This is\nthe body", 'To' => 'recipient@example.com', 'From' => 'sender@example.com', 'charset' => 'iso-8859-15' )); $mail->addPart( 'text/plain', 'This is a plain text', 'iso-8859-1', 'inline' ); $mail->addPart( 'application/octet-stream', file_get_contents(__DIR__ . '/fixtures/attachment.bin'), null, 'attachment' ); $dummy = new Horde_Mail_Transport_Mock(); $mail->send($dummy); $sent = str_replace("\r\n", "\n", $dummy->sentMessages[0]); $this->assertStringMatchesFormat( 'Subject: My Subject To: recipient@example.com From: sender@example.com Message-ID: <%d.%s@mail.example.com> User-Agent: Horde Application Framework %d Date: %s, %d %s %d %d:%d:%d %s%d Content-Type: multipart/mixed; boundary="=_%s" MIME-Version: 1.0', $sent['header_text'] ); $this->assertStringMatchesFormat( "This message is in MIME format. --=_%s Content-Type: text/plain; charset=iso-8859-15; format=flowed; DelSp=Yes This is the body --=_%s Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline This is a plain text --=_%s Content-Type: application/octet-stream Content-Disposition: attachment Content-Transfer-Encoding: base64 WnfDtmxmIEJveGvDpG1wZmVyIGphZ2VuIFZpa3RvciBxdWVyIMO8YmVyIGRlbiBncm/Dn2VuIFN5 bHRlciBEZWljaC4K --=_%s--\n", $sent['body'] ); $this->assertEquals( array('recipient@example.com'), $sent['recipients'] ); } public function testAddHtml() { $mail = new Horde_Mime_Mail(array( 'Subject' => 'My Subject', 'To' => 'recipient@example.com', 'From' => 'sender@example.com', 'charset' => 'iso-8859-1' )); $mail->setBody("This is\nthe plain text body."); $dummy = new Horde_Mail_Transport_Mock(); $mail->send($dummy); $sent = str_replace("\r\n", "\n", $dummy->sentMessages[0]); $this->assertStringMatchesFormat( 'Subject: My Subject To: recipient@example.com From: sender@example.com Message-ID: <%d.%s@mail.example.com> User-Agent: Horde Application Framework %d Date: %s, %d %s %d %d:%d:%d %s%d Content-Type: text/plain; charset=iso-8859-1; format=flowed; DelSp=Yes MIME-Version: 1.0', $sent['header_text'] ); $this->assertEquals( "This is\nthe plain text body.\n", $sent['body'] ); $this->assertEquals( array('recipient@example.com'), $sent['recipients'] ); $mail = new Horde_Mime_Mail(array( 'Subject' => 'My Subject', 'To' => 'recipient@example.com', 'From' => 'sender@example.com' )); $mail->setHTMLBody( "

Header Title

\n

This is
the html text body.

", 'iso-8859-1', false ); $dummy = new Horde_Mail_Transport_Mock(); $mail->send($dummy); $sent = str_replace("\r\n", "\n", $dummy->sentMessages[0]); $this->assertStringMatchesFormat( 'Subject: My Subject To: recipient@example.com From: sender@example.com Message-ID: <%d.%s@mail.example.com> User-Agent: Horde Application Framework %d Date: %s, %d %s %d %d:%d:%d %s%d Content-Type: text/html; charset=iso-8859-1 MIME-Version: 1.0', $sent['header_text'] ); $this->assertEquals( "

Header Title

\n

This is
the html text body.

", $sent['body'] ); $this->assertEquals( array('recipient@example.com'), $sent['recipients'] ); $mail = new Horde_Mime_Mail(array( 'Subject' => 'My Subject', 'To' => 'recipient@example.com', 'From' => 'sender@example.com', 'charset' => 'iso-8859-1' )); $mail->setHTMLBody("

Header Title

\n

This is
the html text body.

"); $dummy = new Horde_Mail_Transport_Mock(); $mail->send($dummy); $sent = str_replace("\r\n", "\n", $dummy->sentMessages[0]); $this->assertStringMatchesFormat( 'Subject: My Subject To: recipient@example.com From: sender@example.com Message-ID: <%d.%s@mail.example.com> User-Agent: Horde Application Framework %d Date: %s, %d %s %d %d:%d:%d %s%d Content-Type: multipart/alternative; boundary="=_%s" MIME-Version: 1.0', $sent['header_text'] ); $this->assertStringMatchesFormat( "This message is in MIME format. --=_%s Content-Type: text/plain; charset=iso-8859-1; format=flowed; DelSp=Yes Content-Description: Plaintext Version of Message HEADER TITLE This is the html text body. --=_%s Content-Type: text/html; charset=iso-8859-1 Content-Description: HTML Version of Message

Header Title

This is
the html text body.

--=_%s--\n", $sent['body'] ); $this->assertEquals( array('recipient@example.com'), $sent['recipients'] ); } public function testAddAttachment() { $mail = new Horde_Mime_Mail(array( 'Subject' => 'My Subject', 'body' => "This is\nthe body", 'To' => 'recipient@example.com', 'From' => 'sender@example.com', 'charset' => 'iso-8859-15' )); $mail->addAttachment(__DIR__ . '/fixtures/attachment.bin'); $mail->addAttachment( __DIR__ . '/fixtures/uudecode.txt', 'my_name.html', 'text/html', 'iso-8859-15' ); $dummy = new Horde_Mail_Transport_Mock(); $mail->send($dummy); $sent = str_replace("\r\n", "\n", $dummy->sentMessages[0]); $this->assertStringMatchesFormat( 'Subject: My Subject To: recipient@example.com From: sender@example.com Message-ID: <%d.%s@mail.example.com> User-Agent: Horde Application Framework %d Date: %s, %d %s %d %d:%d:%d %s%d Content-Type: multipart/mixed; boundary="=_%s" MIME-Version: 1.0', $sent['header_text'] ); $this->assertStringMatchesFormat( "This message is in MIME format. --=_%s Content-Type: text/plain; charset=iso-8859-15; format=flowed; DelSp=Yes This is the body --=_%s Content-Type: application/octet-stream; name=attachment.bin Content-Disposition: attachment; filename=attachment.bin Content-Transfer-Encoding: base64 WnfDtmxmIEJveGvDpG1wZmVyIGphZ2VuIFZpa3RvciBxdWVyIMO8YmVyIGRlbiBncm/Dn2VuIFN5 bHRlciBEZWljaC4K --=_%s Content-Type: text/html; charset=iso-8859-15; name=my_name.html Content-Disposition: attachment; filename=my_name.html Ignore this text. begin 644 test.txt +5&5S=\"!S=')I;F<` ` end More text to ignore. begin 755 test2.txt *,FYD('-TassertEquals( array('recipient@example.com'), $sent['recipients'] ); } public function testReusing() { $mail = new Horde_Mime_Mail(array( 'Subject' => 'My Subject', 'body' => "This is\nthe body", 'To' => 'recipient@example.com', 'From' => 'sender@example.com', 'charset' => 'iso-8859-15' )); $dummy = new Horde_Mail_Transport_Mock(); $mail->send($dummy); $sent1 = str_replace("\r\n", "\n", $dummy->sentMessages[0]); $mail->addHeader('To', 'recipient2@example.com'); $mail->send($dummy); $sent2 = str_replace("\r\n", "\n", $dummy->sentMessages[1]); $mail->setBody("This is\nanother body"); $mail->send($dummy); $sent3 = str_replace("\r\n", "\n", $dummy->sentMessages[2]); $hdrs1 = Horde_Mime_Headers::parseHeaders($sent1['header_text']); $hdrs2 = Horde_Mime_Headers::parseHeaders($sent2['header_text']); $this->assertNotEquals($hdrs1->getValue('message-id'), $hdrs2->getValue('message-id')); $this->assertEquals( array('recipient@example.com'), $sent1['recipients'] ); $this->assertEquals( array('recipient2@example.com'), $sent2['recipients'] ); $this->assertEquals( "This is\nanother body\n", $sent3['body'] ); } public function testFlowedText() { $mail = new Horde_Mime_Mail(array( 'charset' => 'ISO-8859-1', 'Subject' => 'My Subject', 'To' => 'recipient@example.com', 'From' => 'foo@example.com', 'body' => file_get_contents(__DIR__ . '/fixtures/flowed_msg.txt'))); $dummy = new Horde_Mail_Transport_Mock(); $mail->send($dummy); $sent = str_replace("\r\n", "\n", $dummy->sentMessages[0]); $this->assertStringMatchesFormat( 'Subject: My Subject To: recipient@example.com From: foo@example.com Message-ID: <%d.%s@mail.example.com> User-Agent: Horde Application Framework %d Date: %s, %d %s %d %d:%d:%d %s%d Content-Type: text/plain; charset=iso-8859-1; format=flowed; DelSp=Yes MIME-Version: 1.0', $sent['header_text'] ); $this->assertEquals( 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ', $sent['body'] ); $this->assertEquals( array('recipient@example.com'), $sent['recipients'] ); } public function testEmptyBody() { $mail = new Horde_Mime_Mail(array( 'Subject' => 'My Subject', 'To' => 'recipient@example.com', 'From' => 'sender@example.com', 'charset' => 'iso-8859-15' )); $dummy = new Horde_Mail_Transport_Mock(); $mail->send($dummy); $sent = str_replace("\r\n", "\n", $dummy->sentMessages[0]); $this->assertEquals( '', $sent['body'] ); $this->assertEquals( array('recipient@example.com'), $sent['recipients'] ); } public function testParsingAndSending() { $rfc822_in = 'Subject: Test From: mike@theupstairsroom.com Content-Type: text/plain; charset=us-ascii Message-Id: <9517149F-ADF2-4D24-AA6F-0010D6AFA3EE@theupstairsroom.com> Date: Sat, 17 Mar 2012 13:29:10 -0400 To: =?utf-8?Q?Mich=C3=B1el_Rubinsky?= Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (1.0) Testing 123 -- Mike'; $headers = Horde_Mime_Headers::parseHeaders($rfc822_in); $message_part = Horde_Mime_Part::parseMessage($rfc822_in); $this->assertEquals('Michñel Rubinsky ', $headers->getValue('To')); $mail = new Horde_Mime_Mail(); $part = $message_part[$message_part->findBody()]; $body = $part->getContents(); $this->assertEquals('Testing 123 -- Mike', $body); $mail->addHeaders($headers->toArray()); $dummy = new Horde_Mail_Transport_Mock(); $mail->send($dummy); } public function testBug13709() { $p_part = new Horde_Mime_Part(); $p_part->setType('text/plain'); $p_part->setContents('Foo bär'); $h_part = new Horde_Mime_Part(); $h_part->setType('text/html'); $h_part->setContents('Foo

"smith, Jane (IAM)" <Jane.smith@kit.edu> wrote:

Hallo Jörk,

hoffe es geht dir gut und bei HHHH ist alles okay?

Ich wollte gerade auf die XXX III Homepage schauen und haben im Browser nur example.com eingegeben.
Damit bin ich auf einer Seite mit XXX II - Logo gelandet, die sofort Passwort und Nutzername abgefragt hat.
Ist diese Seite auch von Euch?

Liebe Grüße,
Jane





--------------------------------------------------
Dr. Jane smith
( geb. Repper)
Karlsruhe Institute of Technology (KIT) 
IAM-WK@INT 
Hermann-von-Helmholtz-Platz 1, Building 640, 
76344 Eggenstein-Leopoldshafen, Germany

Phone CN: +49 721 608-26960
Phone CS: +49 721 608-47447
Web: http://www.kit.edu/ 

KIT – University of the State of Baden-Wuerttemberg and
National Research Center of the Helmholtz Association



'); $base_part = new Horde_Mime_Part(); $base_part->setType('multipart/alternative'); $base_part[] = $p_part; $base_part[] = $h_part; $headers = $base_part->addMimeHeaders(); $headers->addHeader('From', 'sender@example.com'); $headers->addHeader('Subject', 'My Subject'); $mailer = new Horde_Mail_Transport_Mock(); $base_part->send('recipient@example.com', $headers, $mailer, array('encode' => Horde_Mime_Part::ENCODE_8BIT)); $sent = current($mailer->sentMessages); $sent_mime = Horde_Mime_Part::parseMessage($sent['header_text'] . "\n\n" . $sent['body']); $headers = Horde_Mime_Headers::parseHeaders( $sent_mime[$sent_mime->findBody('plain')]->toString(array( 'headers' => true, 'encode' => Horde_Mime_Part::ENCODE_8BIT )) ); $this->assertEquals('8bit', $headers->getHeader('Content-Transfer-Encoding')->value_single); $headers = Horde_Mime_Headers::parseHeaders( $sent_mime[$sent_mime->findBody('html')]->toString(array( 'headers' => true, 'encode' => Horde_Mime_Part::ENCODE_8BIT )) ); $this->assertEquals('quoted-printable', $headers->getHeader('Content-Transfer-Encoding')); } } Horde_Mime-2.10.3/test/Horde/Mime/MdnTest.php0000664000175000017500000000451713055000406016707 0ustar janjan * @category Horde * @copyright 2014-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_MdnTest extends PHPUnit_Framework_TestCase { /** * @dataProvider getMdnReturnAddrProvider */ public function testGetMdnReturnAddr($email) { $h = new Horde_Mime_Headers(); $ob = new Horde_Mime_Mdn($h); if (!is_null($email)) { $ob->addMdnRequestHeaders($email); } $this->assertEquals( strval($email), $ob->getMdnReturnAddr() ); } public function getMdnReturnAddrProvider() { $email = 'foo1@example.com, Test '; $rfc822 = new Horde_Mail_Rfc822(); $mail_ob = $rfc822->parseAddressList($email); return array( array(null), array('foo@example.com'), array($email), array($mail_ob) ); } /** * @dataProvider UserConfirmationNeededProvider */ public function testUserConfirmationNeeded($h, $expected) { $ob = new Horde_Mime_Mdn($h); if ($expected) { $this->assertTrue($ob->userConfirmationNeeded()); } else { $this->assertFalse($ob->userConfirmationNeeded()); } } public function userConfirmationNeededProvider() { $out = array(); $h = new Horde_Mime_Headers(); $out[] = array(clone $h, true); $h->addHeader('Return-Path', 'foo@example.com'); $out[] = array(clone $h, false); $h->addHeader('Return-Path', 'foo2@example.com'); $out[] = array(clone $h, true); $h->replaceHeader('Return-Path', 'foo@example.com'); $h->addHeader(Horde_Mime_Mdn::MDN_HEADER, 'FOO@example.com'); $out[] = array(clone $h, true); $h->replaceHeader(Horde_Mime_Mdn::MDN_HEADER, 'foo@EXAMPLE.com'); $out[] = array(clone $h, false); return $out; } } Horde_Mime-2.10.3/test/Horde/Mime/MimeIdTest.php0000664000175000017500000000712213055000406017330 0ustar janjan * @category Horde * @copyright 2014-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_MimeIdTest extends PHPUnit_Framework_TestCase { public function testToString() { $id = '2.1'; $id_ob = new Horde_Mime_Id($id); $this->assertEquals( $id, strval($id_ob) ); } /** * @dataProvider idArithmeticProvider */ public function testIdArithmetic($id, $action, $opts, $expected) { $id_ob = new Horde_Mime_Id($id); $this->assertEquals( $expected, $id_ob->idArithmetic($action, $opts) ); } public function idArithmeticProvider() { return array( array( '0', Horde_Mime_Id::ID_DOWN, array(), '1' ), array( '1.1', Horde_Mime_Id::ID_DOWN, array(), '1.1.0' ), array( '1.1', Horde_Mime_Id::ID_DOWN, array('no_rfc822' => true), '1.1.1' ), array( '1.1', Horde_Mime_Id::ID_NEXT, array(), '1.2' ), array( '1.1', Horde_Mime_Id::ID_NEXT, array('count' => 3), '1.4' ), array( '1', Horde_Mime_Id::ID_NEXT, array(), '2' ), array( '1.2', Horde_Mime_Id::ID_PREV, array(), '1.1' ), array( '1.1', Horde_Mime_Id::ID_PREV, array(), null ), array( '2', Horde_Mime_Id::ID_PREV, array(), '1' ), array( '1.1', Horde_Mime_Id::ID_UP, array(), '1.0' ), array( '1.1', Horde_Mime_Id::ID_UP, array('no_rfc822' => true), '1' ), array( '2', Horde_Mime_Id::ID_UP, array(), '0' ) ); } /** * @dataProvider isChildProvider */ public function testIsChild($base, $id, $expected) { $id_ob = new Horde_Mime_Id($base); if ($expected) { $this->assertTrue($id_ob->isChild($id)); } else { $this->assertFalse($id_ob->isChild($id)); } } public function isChildProvider() { return array( array('1', '1.0', true), array('1', '1.1', true), array('1', '1.1.0', true), array('1', '1.1.1.1.1.1.1', true), array('1', '1', false), array('1', '2', false), array('1', '2.1', false), array('1', '10', false), array('1', '10.0', false) ); } } Horde_Mime-2.10.3/test/Horde/Mime/MimeTest.php0000664000175000017500000001266113055000406017057 0ustar janjan * @category Horde * @copyright 2010-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_MimeTest extends PHPUnit_Framework_TestCase { /** * @dataProvider is8bitProvider */ public function testIs8bit($data, $expected) { $this->assertEquals( $expected, Horde_Mime::is8bit($data) ); } public function is8bitProvider() { return array( array('A', false), array('a', false), array('1', false), array('!', false), array("\0", false), array("\10", false), array("\127", false), array("\x80", true), array('ä', true), array('A©B', true), array(' ® ', true), // This string is in Windows-1252 array(base64_decode('UnVubmVyc5IgQWxlcnQh='), true) ); } /** * @dataProvider decodeProvider */ public function testDecode($data, $expected) { $this->assertEquals( $expected, Horde_Mime::decode($data) ); } public function decodeProvider() { return array( array( '=?utf-8?Q?_Fran=C3=A7ois_Xavier=2E_XXXXXX_?= ', ' François Xavier. XXXXXX ' ), /* Adapted from Dovecot's * src/lib-mail/test-message-header-decode.c. */ array( " \t=?utf-8?q?=c3=a4?= =?utf-8?q?=c3=a4?= b \t\r\n ", " \tää b \t\r\n " ), array( "a =?utf-8?q?=c3=a4?= b", "a ä b" ), array( "a =?utf-8?q?=c3=a4?=\t\t\r\n =?utf-8?q?=c3=a4?= b", "a ää b" ), array( "a =?utf-8?q?=c3=a4?= x =?utf-8?q?=c3=a4?= b", "a ä x ä b" ), array( "a =?utf-8?b?w6TDpCDDpA==?= b", "a ää ä b" ), array( "=?utf-8?b?w6Qgw6Q=?=", "ä ä" ), /* Not MIME encoded. */ array( '=? required=?', '=? required=?' ) ); } /** * @dataProvider encodeProvider */ public function testEncode($data, $charset, $expected) { $this->assertEquals( $expected, Horde_Mime::encode($data, $charset) ); } public function encodeProvider() { return array( /* Adapted from Dovecot's * src/lib-mail/test-message-header-encode.c. */ array( 'a b', 'utf-8', 'a b' ), array( 'a bcäde f', 'utf-8', 'a =?utf-8?b?YmPDpGRl?= f' ), array( 'a ää ä b', 'utf-8', 'a =?utf-8?b?w6TDpCDDpA==?= b' ), array( 'ä a ä', 'utf-8', '=?utf-8?b?w6Q=?= a =?utf-8?b?w6Q=?=' ), array( 'ää a ä', 'utf-8', // Dovecot: '=?utf-8?b?w6TDpCBhIMOk?=' '=?utf-8?b?w6TDpA==?= a =?utf-8?b?w6Q=?=' ), array( '=', 'utf-8', '=' ), array( '?', 'utf-8', '?' ), array( 'a=?', 'utf-8', 'a=?' ), array( '=?', 'utf-8', // Dovecot: '=?utf-8?q?=3D=3F?=' '=?utf-8?b?PT8=?=' ), array( '=?x', 'utf-8', // Dovecot: '=?utf-8?q?=3D=3Fx?=' '=?utf-8?b?PT94?=' ), array( "a\n=?", 'utf-8', // Dovecot: "a\n\t=?utf-8?q?=3D=3F?=" "a\n=?utf-8?b?PT8=?=" ), array( "a\t=?", 'utf-8', // Dovecot: "a\t=?utf-8?q?=3D=3F?=" "a\t=?utf-8?b?PT8=?=" ), array( "a =?", 'utf-8', // Dovecot: "a =?utf-8?q?=3D=3F?=" 'a =?utf-8?b?PT8=?=' ), array( "foo\001bar", 'utf-8', // Dovecot: "=?utf-8?q?foo=01bar?=" '=?utf-8?b?Zm9vAWJhcg==?=' ), array( "\x01\x02\x03\x04\x05\x06\x07\x08", 'utf-8', "=?utf-8?b?AQIDBAUGBwg=?=" ), /* Null character in encode output. */ array( "\x00", 'UTF-16LE', '=?utf-16le?b?AAA=?=' ) ); } } Horde_Mime-2.10.3/test/Horde/Mime/PartTest.php0000664000175000017500000006231613055000406017100 0ustar janjan * @category Horde * @copyright 2010-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_PartTest extends PHPUnit_Framework_TestCase { public function testParseMessage() { $msg = file_get_contents(__DIR__ . '/fixtures/sample_msg.txt'); $part = Horde_Mime_Part::parseMessage($msg); $this->assertEquals( 'multipart/mixed', $part->getType() ); $this->assertEquals( '=_k4kgcwkwggwc', $part->getContentTypeParameter('boundary') ); $part_1 = $part[1]; $this->assertEquals( 'text/plain', $part_1->getType() ); $this->assertEquals( 'flowed', $part_1->getContentTypeParameter('format') ); $part_2 = $part[2]; $this->assertEquals( 'message/rfc822', $part_2->getType() ); $part_2_2 = $part['2.2']; $this->assertEquals( 'text/plain', $part_2_2->getType() ); $this->assertEquals( 'test.txt', $part_2_2->getDispositionParameter('filename') ); $part_3 = $part[3]; $this->assertEquals( 'image/png', $part_3->getType() ); $this->assertEquals( "Test text.\r\n\r\n", Horde_Mime_Part::getRawPartText($msg, 'body', '2.1') ); $this->assertEquals( "Content-Type: image/png; name=index.png\r\n" . "Content-Disposition: attachment; filename=index.png\r\n" . 'Content-Transfer-Encoding: base64', Horde_Mime_Part::getRawPartText($msg, 'header', '3') ); // Test the length of the resulting MIME string to ensure // the incoming multipart data was not output twice. $this->assertEquals(1777, strlen($part->toString())); // Message with a single part. $msg = file_get_contents(__DIR__ . '/fixtures/sample_msg3.txt'); $this->assertEquals( "\r\nTest.\r\n", Horde_Mime_Part::getRawPartText($msg, 'body', '1') ); } public function testParsingMultipartAlternativeDoesNotProduceAttachment() { $msg = file_get_contents(__DIR__ . '/fixtures/samplemultipart_msg.txt'); $part = Horde_Mime_Part::parseMessage($msg); $part->isBasePart(true); $msg = $part->toString(array('headers' => true)); $test_part = Horde_Mime_Part::parseMessage($msg); $map = array( 'multipart/alternative', 'text/plain', 'text/html'); $this->assertEquals($map, $test_part->contentTypeMap()); $this->assertEquals( '', $test_part[1]->getDisposition() ); } public function testParsingMimeMessageWithEaiAddress() { $msg = file_get_contents(__DIR__ . '/fixtures/sample_msg_eai_2.txt'); $part = Horde_Mime_Part::parseMessage($msg); /* If we reach this point, there was no Exception. */ $this->assertEquals( "asdf", trim($part->getContents()) ); } public function testParsingMimeMessageWithUtf8ContentDispositionParameter() { $msg = file_get_contents(__DIR__ . '/fixtures/sample_msg_eai.txt'); $part = Horde_Mime_Part::parseMessage($msg); $this->assertEquals( 'blåbærsyltetøy', $part->getDispositionParameter('filename') ); } public function testParsingMultipartMimeMessageWithMultipleEaiComponents() { $msg = file_get_contents(__DIR__ . '/fixtures/sample_msg_eai_3.txt'); $part = Horde_Mime_Part::parseMessage($msg); $this->assertEquals( 2, count($part->getParts()) ); $part1 = $part[1]; $this->assertEquals( 'text/plain', $part1->getType() ); $this->assertEquals( 'flowed', $part1->getContentTypeParameter('format') ); $this->assertEquals( 'abstürzen', $part1->getContentTypeParameter('x-eai-please-do-not') ); $this->assertNull($part1->getContentTypeParameter('filename')); $part1 = $part[2]; $this->assertEquals( 'text/plain', $part1->getType() ); $this->assertEquals( 'blåbærsyltetøy', $part1->getDispositionParameter('filename') ); $this->assertNull($part1->getContentTypeParameter('filename')); } public function testAddingSizeToContentDisposition() { $part = new Horde_Mime_Part(); $part->setType('text/plain'); $part->setContents('123'); $part->setBytes(3); $part->setDisposition('attachment'); $this->assertEquals( "Content-Type: text/plain\r\n" . "Content-Disposition: attachment; size=3\r\n" . "\r\n" . '123', $part->toString(array( 'canonical' => true, 'headers' => true )) ); } public function testArrayAccessImplementation() { $part = $this->_getTestPart(); $this->assertEquals( true, isset($part['1']) ); $this->assertEquals( false, isset($part['4']) ); $this->assertSame( 'text/plain', $part['1']->getType() ); $this->assertSame( 'text/plain', $part['3.1']->getType() ); $part2 = new Horde_Mime_Part(); $part2->setType('text/plain'); $part['2'] = $part2; $this->assertSame( $part2, $part['2'] ); unset($part['3']); $this->assertEquals( null, $part['3'] ); } public function testCountableImplementation() { $part = $this->_getTestPart(); $this->assertEquals( 3, count($part) ); } /** * @dataProvider contentsTransferDecodingProvider */ public function testContentsTransferDecoding($data, $encoding, $text) { $part = new Horde_Mime_Part(); $part->setType('text/plain'); $part->setContents($data, array('encoding' => $encoding)); $this->assertEquals( $text, $part->getContents() ); } public function contentsTransferDecodingProvider() { return array( array( 'xIE=', 'base64', 'ā' ), array( '=C4=81', 'quoted-printable', 'ā' ), array( 'ā', '8bit', 'ā' ) ); } /** * @dataProvider setTypeProvider */ public function testSetType($data, $type, $boundary) { $part = new Horde_Mime_Part(); $part->setType($data); $this->assertEquals( $type, $part->getType() ); $b = $part->getContentTypeParameter('boundary'); if ($boundary) { $this->assertNotEmpty($b); } else { $this->assertEmpty($b); } } public function setTypeProvider() { return array( array( 'text/plain', 'text/plain', false ), array( 'multipart/mixed', 'multipart/mixed', true ), array( 'foo/bar', 'x-foo/bar', false ) ); } public function testAppendContents() { $part = new Horde_Mime_Part(); $part->appendContents('1'); $this->assertEquals( '1', $part->getContents() ); $part->appendContents('2'); $this->assertEquals( '12', $part->getContents() ); $tmp = fopen('php://temp', 'r+'); fwrite($tmp, '3'); rewind($tmp); $part->appendContents($tmp); $this->assertEquals( '123', $part->getContents() ); $tmp = fopen('php://temp', 'r+'); fwrite($tmp, '5'); rewind($tmp); $part->appendContents(array('4', $tmp, '6')); $this->assertEquals( '123456', $part->getContents() ); } public function testAlterPart() { $msg = file_get_contents(__DIR__ . '/fixtures/sample_msg.txt'); $part = Horde_Mime_Part::parseMessage($msg); $map = $part->contentTypeMap(); $this->assertEquals( 'message/rfc822', $map['2'] ); $part2 = new Horde_Mime_Part(); $part2->setType('text/plain'); $part2->setContents('foo'); $part['2'] = $part2; $map = $part->contentTypeMap(); $this->assertEquals( 'text/plain', $map['2'] ); } /** * @dataProvider setDispositionProvider */ public function testSetDisposition($disp) { $part = new Horde_Mime_Part(); $part->setDisposition($disp); $this->assertEquals( $disp, $part->getDisposition() ); } public function setDispositionProvider() { return array( array('attachment'), array('inline'), array('') ); } public function testUnserialize() { $part = new Horde_Mime_Part(); $part->setType('text/plain'); $part->setContentTypeParameter('foo', 'bar'); $part->setContents('Test'); $part1 = unserialize(serialize($part)); $this->assertEquals( 'Test', $part1->getContents() ); $this->assertEquals( array('foo' => 'bar'), $part1->getAllContentTypeParameters() ); $this->assertInternalType( 'resource', $part1->getContents(array('stream' => true)) ); $this->assertEquals( 'Test', $part->getContents() ); } public function testClone() { $part = new Horde_Mime_Part(); $part->setType('multipart/mixed'); $part->setContentTypeParameter('x-foo', 'foo'); $part2 = new Horde_Mime_Part(); $part2->setType('text/plain'); $part2->setContents('Foo'); $part[] = $part2; $part->buildMimeIds(); $part3 = clone $part; $part->setContentTypeParameter('x-foo', 'bar'); $part2->setContents('Bar'); $this->assertEquals( 'foo', $part3->getContentTypeParameter('x-foo') ); $this->assertEquals( 'Foo', $part3[1]->getContents() ); } // Bug #10324 public function testQuotedPrintableNewlines() { $part = new Horde_Mime_Part(); $part->setType('text/plain'); $part->setContents("A\r\nBā\r\nC"); $this->assertEquals( "A\r\nB=C4=81\r\nC", $part->toString() ); $part->setEOL("\r\n"); $this->assertEquals( "A\r\nB=C4=81\r\nC", $part->toString() ); $part2 = new Horde_Mime_Part(); $part2->setType('multipart/mixed'); $part2[] = $part; $this->assertStringMatchesFormat( "This message is in MIME format. --=_%s Content-Type: text/plain Content-Transfer-Encoding: quoted-printable A B=C4=81 C --=_%s--", $part2->toString() ); } public function testFindBody() { $part = $this->_getTestPart(); $part31 = $part['3.1']; $part31->setType('text/html'); $this->assertEquals( '1', $part->findBody() ); $this->assertEquals( '3.1', $part->findBody('html') ); // Bug #10458 $part31->setDisposition('attachment'); $this->assertNull( $part->findBody('html') ); } // Deeply nested creation is OK public function testDeeplyNestedPartCreation() { // Part #1 $base_part = $part = new Horde_Mime_Part(); $part->setType('multipart/mixed'); // Part #2-101 for ($i = 0; $i < 100; ++$i) { $new_part = new Horde_Mime_Part(); $new_part->setType('multipart/mixed'); $part[] = $new_part; $part = $new_part; } // Part #102 $new_part = new Horde_Mime_Part(); $new_part->setType('text/plain'); $new_part->setContents('Test'); $part[] = $new_part; $base_part->isBasePart(true); $base_part->buildMimeIds(); $this->assertEquals( 102, count($base_part->contentTypeMap()) ); } // Deeply nested parsing is limited public function testDeeplyNestedPartParsing() { $msg = file_get_contents(__DIR__ . '/fixtures/deeply_nested.txt'); $part = Horde_Mime_Part::parseMessage($msg); $this->assertEquals( 100, // Actual levels: 102 count($part->contentTypeMap()) ); } public function testBug12161() { $msg = file_get_contents(__DIR__ . '/fixtures/sample_msg2.txt'); $part = Horde_Mime_Part::parseMessage($msg); $this->assertEquals( '=_k4kgcwkwggwc', $part->getContentTypeParameter('boundary') ); $this->assertEquals( 'text/plain', $part['1']->getType() ); } public function testBug12536() { // This is a broken MIME message - it is a multipart with no subparts $msg = file_get_contents(__DIR__ . '/fixtures/bug12536.txt'); $part = Horde_Mime_Part::parseMessage($msg); $this->assertTrue(isset($part['0'])); $this->assertFalse(isset($part['1'])); } public function testBug12842() { $msg = file_get_contents(__DIR__ . '/fixtures/bug12842_a.txt') . str_replace("\n", "\r\n", file_get_contents(__DIR__ . '/fixtures/bug12842_b.txt')); $part = Horde_Mime_Part::parseMessage($msg); $this->assertTrue(isset($part['1'])); $this->assertTrue(isset($part['2'])); } public function testBug13117() { $msg = file_get_contents(__DIR__ . '/fixtures/bug13117.txt'); $part = Horde_Mime_Part::parseMessage($msg); $this->assertTrue(isset($part['2'])); $this->assertTrue(isset($part['2.0'])); $this->assertTrue(isset($part['2.1'])); $this->assertFalse(isset($part['2.2'])); $multipart = $part['2.0']; $multipart[] = new Horde_Mime_Part(); $multipart->buildMimeIds('2.0'); $this->assertTrue(isset($part['2'])); $this->assertTrue(isset($part['2.0'])); $this->assertTrue(isset($part['2.1'])); $this->assertTrue(isset($part['2.2'])); } public function testSettingBytes() { $part = new Horde_Mime_Part(); $part->setBytes(10); $part->setTransferEncoding('base64'); $this->assertEquals( 10, $part->getBytes() ); $this->assertEquals( 7, $part->getBytes(true) ); $part2 = new Horde_Mime_Part(); $part2->setBytes(10); $part2->setTransferEncoding('base64'); $part2->setContents('TestTes', array('encoding' => '7bit')); $this->assertEquals( 7, $part2->getBytes() ); $this->assertEquals( 7, $part2->getBytes(true) ); } public function testMimeMessageWithNoContentType() { $msg = file_get_contents(__DIR__ . '/fixtures/sample_msg4.txt'); $part = Horde_Mime_Part::parseMessage($msg); $this->assertEquals( 'text/plain', $part->getType() ); $this->assertEquals( 'us-ascii', $part->getCharset() ); } public function testAccessingMimePartsInRawText() { $msg = file_get_contents(__DIR__ . '/fixtures/samplemultipart_msg.txt'); $this->assertNotEmpty( Horde_Mime_Part::getRawPartText($msg, 'body', '0') ); $this->assertNotEmpty( Horde_Mime_Part::getRawPartText($msg, 'body', '1') ); $this->assertNotEmpty( Horde_Mime_Part::getRawPartText($msg, 'body', '2') ); } /** * @dataProvider setCharsetProvider */ public function testSetCharset($charset, $expected) { $part = new Horde_Mime_Part(); $part->setType('text/plain'); $part->setCharset($charset); $this->assertEquals( $expected, $part->getType(true) ); } public function setCharsetProvider() { return array( array('utf-8', 'text/plain; charset=utf-8'), array('UtF-8', 'text/plain; charset=utf-8'), array('us-ascii', 'text/plain'), array('', 'text/plain') ); } public function testIdSortingInMessageRfc822Part() { $part = new Horde_Mime_Part(); $part->setType('message/rfc822'); $part1 = new Horde_Mime_Part(); $part1->setType('multipart/alternative'); $part[] = $part1; $part2 = new Horde_Mime_Part(); $part2->setType('text/plain'); $part1[] = $part2; $part3 = new Horde_Mime_Part(); $part3->setType('text/html'); $part1[] = $part3; $part->buildMimeIds(); $this->assertEquals( array('1.0', '1', '1.1', '1.2'), array_keys($part->contentTypeMap(true)) ); } public function testNoOverwriteOfPartContentsWithItsOwnStreamData() { $text = 'foo'; $part = new Horde_Mime_Part(); $part->setType('text/plain'); $part->setContents($text); $stream = $part->getContents(array('stream' => true)); $part->setContents($stream); $this->assertEquals( $text, $part->getContents() ); } public function testNullCharactersNotAllowedInMimeHeaderData() { $part = new Horde_Mime_Part(); $part->setType("text/pl\0ain"); $this->assertEquals( 'text/plain', $part->getType() ); $part->setDisposition("inl\0ine"); $this->assertEquals( 'inline', $part->getDisposition() ); $part->setDispositionParameter('size', '123' . "\0" . '456'); $this->assertEquals( 123456, $part->getDispositionParameter('size') ); $part->setDispositionParameter('foo', "foo\0bar"); $this->assertEquals( 'foobar', $part->getDispositionParameter('foo') ); $part->setCharset("utf\0-8"); $this->assertEquals( 'utf-8', $part->getCharset() ); $part->setName("foo\0bar"); $this->assertEquals( 'foobar', $part->getName() ); $this->assertEquals( 'foobar', $part->getDispositionParameter('filename') ); $this->assertEquals( 'foobar', $part->getContentTypeParameter('name') ); $part->setLanguage("e\0n"); $this->assertEquals( array('en'), $part->getLanguage() ); $part->setLanguage(array("e\0n", "d\0e")); $this->assertEquals( array('en', 'de'), $part->getLanguage() ); $part->setDuration('123' . "\0" . '456'); $this->assertEquals( 123456, $part->getDuration() ); $part->setBytes('123' . "\0" . '456'); $this->assertEquals( 123456, $part->getBytes() ); $part->setDescription("foo\0bar"); $this->assertEquals( 'foobar', $part->getDescription() ); $part->setContentTypeParameter('foo', "foo\0bar"); $this->assertEquals( 'foobar', $part->getContentTypeParameter('foo') ); $part->setContentId("foo\0bar"); $this->assertEquals( 'foobar', $part->getContentId() ); } public function testSerializeUpgradeFromVersion1() { $data = base64_decode( file_get_contents(__DIR__ . '/fixtures/mime_part_v1.txt') ); $part = unserialize($data); $this->assertEquals( 'text/plain', $part->getType() ); $this->assertEquals( array('en'), $part->getLanguage() ); $this->assertEquals( 'foo', $part->getDescription() ); $this->assertEquals( 'attachment', $part->getDisposition() ); $this->assertEquals( 'bar', $part->getDispositionParameter('foo') ); $this->assertEquals( 'foo', $part->getDispositionParameter('filename') ); $this->assertEquals( 'foo', $part->getContentTypeParameter('name') ); $this->assertEquals( 'bar', $part->getContentTypeParameter('foo') ); $this->assertEquals( 'us-ascii', $part->getCharset() ); $this->assertEquals( array(), $part->getParts() ); $this->assertEquals( '1', $part->getMimeId() ); $this->assertEquals( "\n", $part->getEOL() ); $this->assertEquals( 'bar', $part->getMetadata('foo') ); $this->assertEquals( 'svl8CVtZEEO5bgqR-wFIFQ8@bigworm.curecanti.org', $part->getContentId() ); $this->assertEquals( 10, $part->getDuration() ); $this->assertEquals( 'foo', $part->getContents() ); } public function testIteration() { $iterator = $this->_getTestPart()->partIterator(); $ids = array( '0', '1', '2', '3', '3.1', '3.2', '3.2.1', '3.2.2' ); reset($ids); foreach ($iterator as $val) { $this->assertEquals( current($ids), $val->getMimeId() ); next($ids); } $this->assertFalse(current($ids)); } public function testMultipartDigest() { $part = new Horde_Mime_Part(); $part->setType('multipart/digest'); $part->isBasePart(true); $part2 = new Horde_Mime_Part(); $part2->setType('message/rfc822'); $part2->setContents( file_get_contents(__DIR__ . '/fixtures/sample_msg4.txt') ); $part[] = $part2; $this->assertStringMatchesFormat( "Content-Type: multipart/digest; boundary=\"=_%s\" MIME-Version: 1.0 This message is in MIME format. --=_%s Message-ID: Date: Tue, 07 Jul 2013 10:21:48 -0600 From: \"Test Q. User\" To: foo@example.com Subject: Test MIME-Version: 1.0 Test. --=_%s--", $part->toString(array('headers' => true)) ); } protected function _getTestPart() { $part = new Horde_Mime_Part(); $part->setType('multipart/mixed'); $part1 = new Horde_Mime_Part(); $part1->setType('text/plain'); $part1->setContents('Test'); $part[] = $part1; $part2 = new Horde_Mime_Part(); $part2->setType('application/octet-stream'); $part[] = $part2; $part3 = new Horde_Mime_Part(); $part3->setType('multipart/mixed'); $part[] = $part3; $part3_1 = new Horde_Mime_Part(); $part3_1->setType('text/plain'); $part3_1->setContents('Test 2'); $part3[] = $part3_1; $part3_2 = new Horde_Mime_Part(); $part3_2->setType('multipart/mixed'); $part3[] = $part3_2; $part3_2_1 = new Horde_Mime_Part(); $part3_2_1->setType('text/plain'); $part3_2_1->setContents('Test 3.2.1'); $part3_2[] = $part3_2_1; $part3_2_2 = new Horde_Mime_Part(); $part3_2_2->setType('application/octet-stream'); $part3_2_2->setContents('Test 3.2.2'); $part3_2[] = $part3_2_2; $part->buildMimeIds(); return $part; } public function setUp() { Horde_Mime_Part::$defaultCharset = Horde_Mime_Headers::$defaultCharset = 'us-ascii'; } } Horde_Mime-2.10.3/test/Horde/Mime/phpunit.xml0000664000175000017500000000005613055000406017023 0ustar janjan Horde_Mime-2.10.3/test/Horde/Mime/RelatedTest.php0000664000175000017500000000730113055000406017543 0ustar janjan * @category Horde * @copyright 2012-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_RelatedTest extends PHPUnit_Framework_TestCase { /** * @dataProvider startProvider */ public function testStart($ob, $id) { $this->assertEquals( $id, $ob->startId() ); } public function startProvider() { return array( array( new Horde_Mime_Related(Horde_Mime_Part::parseMessage( file_get_contents(__DIR__ . '/fixtures/related_msg.txt') )), 1 ), array( new Horde_Mime_Related(Horde_Mime_Part::parseMessage( file_get_contents(__DIR__ . '/fixtures/related_msg_2.txt') )), 2 ) ); } /** * @dataProvider searchProvider */ public function testSearch($ob, $search, $id) { $this->assertEquals( $id, $ob->cidSearch($search) ); } public function searchProvider() { return array( array( new Horde_Mime_Related(Horde_Mime_Part::parseMessage( file_get_contents(__DIR__ . '/fixtures/related_msg.txt') )), '789', 3 ), array( new Horde_Mime_Related(Horde_Mime_Part::parseMessage( file_get_contents(__DIR__ . '/fixtures/related_msg_2.txt') )), 'abc', 2 ) ); } /** * @dataProvider iteratorProvider */ public function testIterator($ob, $ids) { $this->assertEquals( $ids, iterator_to_array($ob) ); } public function iteratorProvider() { return array( array( new Horde_Mime_Related(Horde_Mime_Part::parseMessage( file_get_contents(__DIR__ . '/fixtures/related_msg.txt') )), array('2' => '456', '3' => '789') ), array( new Horde_Mime_Related(Horde_Mime_Part::parseMessage( file_get_contents(__DIR__ . '/fixtures/related_msg_2.txt') )), array('2' => 'abc') ) ); } public function testReplace() { $part = Horde_Mime_Part::parseMessage( file_get_contents(__DIR__ . '/fixtures/related_msg.txt') ); $related = new Horde_Mime_Related($part); $ob = $related->cidReplace( $part['1']->getContents(), array($this, 'callbackTestReplace') ); $body = $ob->dom->getElementsByTagName('body'); $this->assertEquals( 1, $body->length ); $this->assertEquals( '2', $body->item(0)->getAttribute('background') ); $body = $ob->dom->getElementsByTagName('img'); $this->assertEquals( 1, $body->length ); $this->assertEquals( '3', $body->item(0)->getAttribute('src') ); } public function callbackTestReplace($id) { return $id; } } Horde_Mime-2.10.3/test/Horde/Mime/UudecodeTest.php0000664000175000017500000000305513055000406017722 0ustar janjan * @category Horde * @copyright 2010-2016 Horde LLC * @internal * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_UudecodeTest extends PHPUnit_Framework_TestCase { /** * @dataProvider uudecodeProvider */ public function testUudecode($data, $expected) { $uudecode = new Horde_Mime_Uudecode($data); $this->assertEquals( count($expected), count($uudecode) ); $res = iterator_to_array($uudecode); foreach ($expected as $key => $val) { foreach (array('data', 'name', 'perm') as $key2 => $val2) { $this->assertArrayHasKey($val2, $res[$key]); $this->assertEquals( $val[$key2], $res[$key][$val2] ); } } } public function uudecodeProvider() { return array( array( file_get_contents(__DIR__ . '/fixtures/uudecode.txt'), array( array('Test string', 'test.txt', 644), array('2nd string', 'test2.txt', 755) ) ) ); } }