package.xml0000644000175000007640000014566112243576212013210 0ustar slusarzslusarz 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 2013-11-21 2.2.8 2.2.0 stable stable LGPL-2.1 * [mms] Fix parsing MIME message that contains mixed EOLs (Bug #12842). 5.3.0 1.7.0 Horde_Exception pear.horde.org 2.0.0 3.0.0alpha1 3.0.0alpha1 Horde_Mail pear.horde.org 2.1.1 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.0.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). Horde_Mime-2.2.8/doc/Horde/Mime/COPYING0000644000175000007640000005764612243576212017305 0ustar slusarzslusarz 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.2.8/doc/Horde/Mime/UPGRADING0000644000175000007640000000377112243576212017503 0ustar slusarzslusarz====================== 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.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.2.8/lib/Horde/Mime/Exception.php0000644000175000007640000000074112243576212020702 0ustar slusarzslusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ class Horde_Mime_Exception extends Horde_Exception_Wrapped { } Horde_Mime-2.2.8/lib/Horde/Mime/Headers.php0000644000175000007640000005633712243576212020333 0ustar slusarzslusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ class Horde_Mime_Headers implements Serializable { /* Serialized version. */ const VERSION = 2; /* Constants for getValue(). */ const VALUE_STRING = 1; const VALUE_BASE = 2; const VALUE_PARAMS = 3; /** * The default charset to use when parsing text parts with no charset * information. * * @var string */ static public $defaultCharset = 'us-ascii'; /** * The internal headers array. * * Keys are the lowercase header name. * Values are: * - h: The case-sensitive header name. * - p: Parameters for this header. * - v: The value of the header. Values are stored in UTF-8. * * @var array */ protected $_headers = array(); /** * The sequence to use as EOL for the headers. * 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 = "\n"; /** * The User-Agent string to use. * * @var string */ protected $_agent = null; /** * List of single header fields. * * @var array */ protected $_singleFields = array( // Mail: RFC 5322 'to', 'from', 'cc', 'bcc', 'date', 'sender', 'reply-to', 'message-id', 'in-reply-to', 'references', 'subject', 'x-priority', // MIME: RFC 1864 'content-md5', // MIME: RFC 2045 'mime-version', 'content-type', 'content-transfer-encoding', 'content-id', 'content-description', // MIME: RFC 2110 'content-base', // MIME: RFC 2183 'content-disposition', // MIME: RFC 2424 'content-duration', // MIME: RFC 2557 'content-location', // MIME: RFC 2912 [3] 'content-features', // MIME: RFC 3282 'content-language', // MIME: RFC 3297 'content-alternative' ); /** * Returns the internal header array in array format. * * @param array $opts Optional parameters: * - canonical: (boolean) Use canonical (RFC 822/2045) line endings? * DEFAULT: Uses $this->_eol * - charset: (string) Encodes the headers using this charset. If empty, * encodes using internal charset (UTF-8). * DEFAULT: No encoding. * - defserver: (string) The default domain to append to mailboxes. * DEFAULT: No default name. * - nowrap: (integer) Don't wrap the headers. * DEFAULT: Headers are wrapped. * * @return array The headers in array format. */ public function toArray(array $opts = array()) { $address_keys = $this->addressFields(); $charset = array_key_exists('charset', $opts) ? (empty($opts['charset']) ? 'UTF-8' : $opts['charset']) : null; $eol = empty($opts['canonical']) ? $this->_eol : "\r\n"; $mime = $this->mimeParamFields(); $ret = array(); foreach ($this->_headers as $header => $ob) { $val = is_array($ob['v']) ? $ob['v'] : array($ob['v']); foreach (array_keys($val) as $key) { if (in_array($header, $address_keys) ) { /* Address encoded headers. */ $rfc822 = new Horde_Mail_Rfc822(); $text = $rfc822->parseAddressList($val[$key], array( 'default_domain' => empty($opts['defserver']) ? null : $opts['defserver'] ))->writeAddress(array( 'encode' => $charset, 'idn' => true )); } elseif (in_array($header, $mime) && !empty($ob['p'])) { /* MIME encoded headers (RFC 2231). */ $text = $val[$key]; foreach ($ob['p'] as $name => $param) { foreach (Horde_Mime::encodeParam($name, $param, array('charset' => $charset, 'escape' => true)) as $name2 => $param2) { $text .= '; ' . $name2 . '=' . $param2; } } } else { $text = is_null($charset) ? $val[$key] : Horde_Mime::encode($val[$key], $charset); } if (empty($opts['nowrap'])) { /* Remove any existing linebreaks and wrap the line. */ $header_text = $ob['h'] . ': '; $text = ltrim(substr(wordwrap($header_text . strtr(trim($text), array("\r" => '', "\n" => '')), 76, $eol . ' '), strlen($header_text))); } $val[$key] = $text; } $ret[$ob['h']] = (count($val) == 1) ? reset($val) : $val; } return $ret; } /** * Returns the internal header array in string format. * * @param array $opts Optional parameters: * - canonical: (boolean) Use canonical (RFC 822/2045) line endings? * DEFAULT: Uses $this->_eol * - charset: (string) Encodes the headers using this charset. * DEFAULT: No encoding. * - defserver: (string) The default domain to append to mailboxes. * DEFAULT: No default name. * - nowrap: (integer) Don't wrap the headers. * DEFAULT: Headers are wrapped. * * @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) { if (!is_array($val)) { $val = array($val); } foreach ($val as $entry) { $text .= $key . ': ' . $entry . $eol; } } return $text . $eol; } /** * Generate the 'Received' header for the Web browser->Horde hop * (attempts to conform to guidelines in RFC 5321 [4.4]). * * @param array $opts Additional opts: * - dns: (Net_DNS2_Resolver) Use the DNS resolver object to lookup * hostnames. * DEFAULT: Use gethostbyaddr() function. * - server: (string) Use this server name. * DEFAULT: Auto-detect using current PHP values. */ 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'; } $received = 'from ' . $remote . ' (' . $remote_ident . '[' . $remote_addr . ']) ' . 'by ' . $server_name . ' (Horde Framework) with HTTP; ' . date('r'); $this->addHeader('Received', $received); } /** * Generate the 'Message-ID' header. */ public function addMessageIdHeader() { $this->addHeader('Message-ID', Horde_Mime::generateMessageId()); } /** * Generate the user agent description header. */ public function addUserAgentHeader() { $this->addHeader('User-Agent', $this->getUserAgent()); } /** * Returns the user agent description header. * * @return string The user agent header. */ public function getUserAgent() { if (is_null($this->_agent)) { $this->_agent = 'Horde Application Framework 5'; } return $this->_agent; } /** * Explicitly sets the User-Agent string. * * @param string $agent The User-Agent string to use. */ public function setUserAgent($agent) { $this->_agent = $agent; } /** * Add a header to the header array. * * @param string $header The header name. * @param string $value The header value (UTF-8). * @param array $opts Additional options: * - params: (array) MIME parameters for Content-Type or * Content-Disposition. * DEFAULT: None * - sanity_check: (boolean) Do sanity-checking on header value? * DEFAULT: false */ public function addHeader($header, $value, array $opts = array()) { $header = trim($header); $lcHeader = Horde_String::lower($header); if (!isset($this->_headers[$lcHeader])) { $this->_headers[$lcHeader] = array( 'h' => $header ); } $ptr = &$this->_headers[$lcHeader]; if (!empty($opts['sanity_check'])) { $value = $this->_sanityCheck($value); } // Fields defined in RFC 2822 that contain address information if (in_array($lcHeader, $this->addressFields())) { $rfc822 = new Horde_Mail_Rfc822(); $addr_list = $rfc822->parseAddressList($value); switch ($lcHeader) { 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; } $value = strval($addr_list); } else { $value = Horde_Mime::decode($value); } if (isset($ptr['v'])) { if (!is_array($ptr['v'])) { $ptr['v'] = array($ptr['v']); } $ptr['v'][] = $value; } else { $ptr['v'] = $value; } if (!empty($opts['params'])) { $ptr['p'] = $opts['params']; } } /** * Remove a header from the header array. * * @param string $header The header name. */ public function removeHeader($header) { unset($this->_headers[Horde_String::lower(trim($header))]); } /** * Replace a value of a header. * * @param string $header The header name. * @param string $value The header value. * @param array $opts Additional options: * - params: (array) MIME parameters for Content-Type or * Content-Disposition. * DEFAULT: None * - sanity_check: (boolean) Do sanity-checking on header value? * DEFAULT: false */ public function replaceHeader($header, $value, array $opts = array()) { $this->removeHeader($header); $this->addHeader($header, $value, $opts); } /** * Attempts to return the header in the correct case. * * @param string $header The header to search for. * * @return string The value for the given header. * If the header is not found, returns null. */ public function getString($header) { $lcHeader = Horde_String::lower($header); return (isset($this->_headers[$lcHeader])) ? $this->_headers[$lcHeader]['h'] : null; } /** * Attempt to return the value for a given header. * The following header fields can only have 1 entry, so if duplicate * entries exist, the first value will be used: * * To, From, Cc, Bcc, Date, Sender, Reply-to, Message-ID, In-Reply-To, * References, Subject (RFC 2822 [3.6]) * * All List Headers (RFC 2369 [3]) * The values are not MIME encoded. * * @param string $header The header to search for. * @param integer $type The type of return: * - VALUE_STRING: Returns a string representation of the entire header. * - VALUE_BASE: Returns a string representation of the base value of * the header. If this is not a header that allows * parameters, this will be equivalent to VALUE_STRING. * - VALUE_PARAMS: Returns the list of parameters for this header. If * this is not a header that allows parameters, this * will be an empty array. * * @return mixed The value for the given header. * If the header is not found, returns null. */ public function getValue($header, $type = self::VALUE_STRING) { $header = Horde_String::lower($header); if (!isset($this->_headers[$header])) { return null; } $ptr = &$this->_headers[$header]; if (is_array($ptr['v']) && in_array($header, $this->singleFields(true))) { if (in_array($header, $this->addressFields())) { $base = str_replace(';,', ';', implode(', ', $ptr['v'])); } else { $base = $ptr['v'][0]; } } else { $base = $ptr['v']; } $params = isset($ptr['p']) ? $ptr['p'] : array(); switch ($type) { case self::VALUE_BASE: return $base; case self::VALUE_PARAMS: return $params; case self::VALUE_STRING: foreach ($params as $key => $val) { $base .= '; ' . $key . '=' . $val; } return $base; } } /** * Returns the list of RFC defined header fields that contain address * info. * * @return array The list of headers, in lowercase. */ static public function addressFields() { return array( 'from', 'to', 'cc', 'bcc', 'reply-to', 'resent-to', 'resent-cc', 'resent-bcc', 'resent-from', 'sender' ); } /** * Returns the list of RFC defined header fields that can only contain * a single value. * * @param boolean $list Return list-related headers also? * * @return array The list of headers, in lowercase. */ public function singleFields($list = true) { return $list ? array_merge($this->_singleFields, array_keys($this->listHeaders())) : $this->_singleFields; } /** * Returns the list of RFC defined MIME header fields that may contain * parameter info. * * @return array The list of headers, in lowercase. */ static public function mimeParamFields() { return array('content-type', 'content-disposition'); } /** * Returns the list of valid mailing list headers. * * @deprecated Use Horde_ListHeaders#headers() instead. * * @return array The list of valid mailing list headers. */ static public function listHeaders() { return array( /* RFC 2369 */ 'list-help' => Horde_Mime_Translation::t("List-Help"), 'list-unsubscribe' => Horde_Mime_Translation::t("List-Unsubscribe"), 'list-subscribe' => Horde_Mime_Translation::t("List-Subscribe"), 'list-owner' => Horde_Mime_Translation::t("List-Owner"), 'list-post' => Horde_Mime_Translation::t("List-Post"), 'list-archive' => Horde_Mime_Translation::t("List-Archive"), /* RFC 2919 */ 'list-id' => Horde_Mime_Translation::t("List-Id") ); } /** * Do any mailing list headers exist? * * @return boolean True if any mailing list headers exist. */ public function listHeadersExist() { return (bool)count(array_intersect(array_keys($this->listHeaders()), array_keys($this->_headers))); } /** * 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 an address object for a header. * * @param string $field The header to return as an object. * * @return Horde_Mail_Rfc822_List The object for the requested field. * Returns null if field doesn't exist. */ public function getOb($field) { if (($value = $this->getValue($field)) === null) { return null; } $rfc822 = new Horde_Mail_Rfc822(); return $rfc822->parseAddressList($value); } /** * Perform sanity checking on a raw header (e.g. handle 8-bit characters). * * @param string $data The header data. * * @return string The cleaned header data. */ protected function _sanityCheck($data) { $charset_test = array( 'windows-1252', self::$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; } } } return $data; } /* Static methods. */ /** * Builds a Horde_Mime_Headers object from header text. * This function can be called statically: * $headers = Horde_Mime_Headers::parseHeaders(). * * @param string $text A text string containing the headers. * * @return Horde_Mime_Headers A new Horde_Mime_Headers object. */ static public function parseHeaders($text) { $currheader = $currtext = null; $mime = self::mimeParamFields(); $to_process = array(); foreach (explode("\n", $text) as $val) { $val = rtrim($val, "\r\n"); if (empty($val)) { break; } if (($val[0] == ' ') || ($val[0] == "\t")) { $currtext .= ' ' . ltrim($val); } else { if (!is_null($currheader)) { $to_process[] = array($currheader, rtrim($currtext)); } $pos = strpos($val, ':'); $currheader = substr($val, 0, $pos); $currtext = ltrim(substr($val, $pos + 1)); } } if (!is_null($currheader)) { $to_process[] = array($currheader, $currtext); } $headers = new Horde_Mime_Headers(); reset($to_process); while (list(,$val) = each($to_process)) { /* Ignore empty headers. */ if (!strlen($val[1])) { continue; } if (in_array(Horde_String::lower($val[0]), $mime)) { $res = Horde_Mime::decodeParam($val[0], $val[1]); $headers->addHeader($val[0], $res['val'], array( 'params' => $res['params'], 'sanity_check' => true )); } else { $headers->addHeader($val[0], $val[1], array( 'sanity_check' => true )); } } return $headers; } /* Serializable methods. */ /** * Serialization. * * @return string Serialized data. */ public function serialize() { $data = array( // Serialized data ID. self::VERSION, $this->_headers, $this->_eol ); if (!is_null($this->_agent)) { $data[] = $this->_agent; } 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 = $data[1]; $this->_eol = $data[2]; if (isset($data[3])) { $this->_agent = $data[3]; } } } Horde_Mime-2.2.8/lib/Horde/Mime/Magic.php0000644000175000007640000001621212243576212017764 0ustar slusarzslusarz * @author Michael Slusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ class Horde_Mime_Magic { /** * The MIME extension map. * * @var array */ static protected $_map = null; /** * Returns a copy of the MIME extension map. * * @return array The MIME extension map. */ static protected 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. */ static public 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. */ static public 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. */ static public 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. */ static public 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. */ static public 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.2.8/lib/Horde/Mime/Mail.php0000644000175000007640000003354312243576212017634 0ustar slusarzslusarz * @category Horde * @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); } } /** * 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. */ $has_header = $this->_headers->getValue('Message-ID'); if (!$resend || !$has_header) { if ($has_header) { $this->_headers->removeHeader('Message-ID'); } $this->_headers->addMessageIdHeader(); } if (!$this->_headers->getValue('User-Agent')) { $this->_headers->addUserAgentHeader(); } $has_header = $this->_headers->getValue('Date'); if (!$resend || !$has_header) { if ($has_header) { $this->_headers->removeHeader('Date'); } $this->_headers->addHeader('Date', date('r')); } 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->addPart($this->_body); $this->_htmlBody->setDescription(Horde_Mime_Translation::t("HTML Version of Message")); $body->addPart($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->addPart($body); } foreach ($this->_parts as $mime_part) { $basepart->addPart($mime_part); } } else { $basepart = $body; $basepart->isBasePart(true); } } $basepart->setHeaderCharset($this->_charset); /* Build recipients. */ $recipients = clone $this->_recipients; foreach (array('to', 'cc') as $header) { $recipients->add($this->_headers->getOb($header)); } 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; } /** * 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.2.8/lib/Horde/Mime/Mdn.php0000644000175000007640000002275312243576212017471 0ustar slusarzslusarz * @category Horde * @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 to return the MDN to. * * @return string The address 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 $this->_headers->getValue(self::MDN_HEADER); } /** * 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->getValue('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 (empty($return_path) || is_array($return_path)) { return true; } /* RFC 3798 [2.1]: Explicit confirmation is needed if there is more * than one distinct address in the Disposition-Notification-To * header. */ $rfc822 = new Horde_Mail_Rfc822(); $addr_ob = $rfc822->parseAddressList($this->getMdnReturnAddr()); 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); return ($ret_ob->valid && ($addr_ob->bare_address == $ret_ob->bare_address)); } /** * 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 Mail $mailer A Mail driver. * @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. * * @throws Horde_Mime_Exception */ 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); $to = $this->getMdnReturnAddr(); $ua = $this->_headers->getUserAgent(); $orig_recip = $this->_headers->getValue('Original-Recipient'); if (!empty($orig_recip) && is_array($orig_recip)) { $orig_recip = $orig_recip[0]; } $msg_id = $this->_headers->getValue('Message-ID'); /* Create the Disposition field now (RFC 3798 [3.2.6]). */ $dispo = 'Disposition: ' . (($action) ? 'manual-action' : 'automatic-action') . '/' . (($sending) ? 'MDN-sent-manually' : 'MDN-sent-automatically') . '; ' . $type; if (!empty($mod)) { $dispo .= '/' . implode(', ', $mod); } /* Set up the mail headers. */ $msg_headers = new Horde_Mime_Headers(); $msg_headers->addMessageIdHeader(); $msg_headers->addUserAgentHeader($ua); $msg_headers->addHeader('Date', date('r')); if ($opts['from_addr']) { $msg_headers->addHeader('From', $opts['from_addr']); } $msg_headers->addHeader('To', $this->getMdnReturnAddr()); $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->getValue('Date'), $this->_headers->getValue('To'), $this->_headers->getValue('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->addPart($part_one); /* The second part is a machine-parseable description. */ $part_two = new Horde_Mime_Part(); $part_two->setType('message/disposition-notification'); $part_two_text = array('Reporting-UA: ' . $name . '; ' . $ua . "\n"); if (!empty($orig_recip)) { $part_two_text[] = 'Original-Recipient: rfc822;' . $orig_recip . "\n"; } if ($opts['from_addr']) { $part_two_text[] = 'Final-Recipient: rfc822;' . $opts['from_addr'] . "\n"; } if (!empty($msg_id)) { $part_two_text[] = 'Original-Message-ID: rfc822;' . $msg_id . "\n"; } $part_two_text[] = $dispo . "\n"; if (in_array('error', $mod) && isset($err['error'])) { $part_two_text[] = 'Error: ' . $err['error'] . "\n"; } $part_two->setContents($part_two_text); $msg->addPart($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($this->_headers->toString()); if (!empty($this->_msgtext)) { $part_three_text[] = $part_three->getEOL() . $this->_msgtext; } $part_three->setContents($part_three_text); $msg->addPart($part_three); return $msg->send($to, $msg_headers, $mailer); } /** * Add a MDN (read receipt) request headers to the Horde_Mime_Headers:: * object. * * @param string $to The address 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.2.8/lib/Horde/Mime/mime.mapping.php0000644000175000007640000021107712243576212021333 0ustar slusarzslusarz' where is the unknown file extension. * * Generated: 06/12/13 15:54:33 by slusarz on bigworm.curecanti.org * * @category Horde * @package Horde_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/pkix-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', 'csr' => 'application/pkcs10', 'css' => 'text/css', 'cssl' => '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', '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', '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', 'j2k' => 'image/jp2', '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', 'jpc' => 'image/jp2', 'jpg' => 'image/jpeg', 'jpe' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'jpf' => 'image/jp2', 'jpgm' => 'video/jpm', 'jpgv' => 'video/jpeg', 'jpm' => 'video/jpm', 'jpr' => 'application/x-jbuilder-project', 'jpx' => 'application/x-jbuilder-project', 'js' => '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', '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', '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', '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', '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', 'pkcs8' => 'application/pkcs8', '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', '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', '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', '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', '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/x-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', 'spkac' => 'application/x-spkac', '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/x-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', '123' => 'application/vnd.lotus-1-2-3', '602' => 'application/x-t602', '669' => 'audio/x-mod' );Horde_Mime-2.2.8/lib/Horde/Mime/Part.php0000644000175000007640000021731112243576212017655 0ustar slusarzslusarz * @author Michael Slusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ class Horde_Mime_Part implements ArrayAccess, Countable, Serializable { /* Serialized version. */ const VERSION = 1; /* 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; /* Unknown types. */ const UNKNOWN = 'x-unknown'; /* MIME nesting limit. */ const NESTING_LIMIT = 100; /** * The default charset to use when parsing text parts with no charset * information. * * @var string */ static public $defaultCharset = 'us-ascii'; /** * Valid encoding types. * * @var array */ static public $encodingTypes = array( '7bit', '8bit', 'base64', 'binary', 'quoted-printable', // Non-RFC types, but old mailers may still use 'uuencode', 'x-uuencode', 'x-uue' ); /** * The memory limit for use with the PHP temp stream. * * @var integer */ static public $memoryLimit = 2097152; /** * Valid MIME types. * * @var array */ static public $mimeTypes = array( 'text', 'multipart', 'message', 'application', 'audio', 'image', 'video', 'model' ); /** * The type (ex.: text) of this part. * Per RFC 2045, the default is 'application'. * * @var string */ protected $_type = 'application'; /** * The subtype (ex.: plain) of this part. * Per RFC 2045, the default is 'octet-stream'. * * @var string */ protected $_subtype = 'octet-stream'; /** * The body of the part. Always stored in binary format. * * @var resource */ protected $_contents; /** * The desired transfer encoding of this part. * * @var string */ protected $_transferEncoding = self::DEFAULT_ENCODING; /** * The language(s) of this part. * * @var array */ protected $_language = array(); /** * The description of this part. * * @var string */ protected $_description = ''; /** * The disposition of this part (inline or attachment). * * @var string */ protected $_disposition = ''; /** * The disposition parameters of this part. * * @var array */ protected $_dispParams = array(); /** * The content type parameters of this part. * * @var Horde_Support_CaseInsensitiveArray */ protected $_contentTypeParams; /** * The subparts of this part. * * @var array */ protected $_parts = array(); /** * The MIME ID of this part. * * @var string */ protected $_mimeid = null; /** * 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. * It is not crucial here since the PHP/PEAR mailing functions will handle * the EOL details. * * @var string */ protected $_eol = self::EOL; /** * Internal temp array. * * @var array */ protected $_temp = array(); /** * Metadata. * * @var array */ protected $_metadata = array(); /** * Unique Horde_Mime_Part boundary string. * * @var string */ protected $_boundary = null; /** * Default value for this Part's size. * * @var integer */ protected $_bytes; /** * The content-ID for this part. * * @var string */ protected $_contentid = null; /** * The duration of this part's media data (RFC 3803). * * @var integer */ protected $_duration; /** * Do we need to reindex the current part? * * @var boolean */ protected $_reindex = false; /** * Is this the base MIME part? * * @var boolean */ protected $_basepart = false; /** * The charset to output the headers in. * * @var string */ protected $_hdrCharset = null; /** * The list of member variables to serialize. * * @var array */ protected $_serializedVars = array( '_type', '_subtype', '_transferEncoding', '_language', '_description', '_disposition', '_dispParams', '_contentTypeParams', '_parts', '_mimeid', '_eol', '_metadata', '_boundary', '_bytes', '_contentid', '_duration', '_reindex', '_basepart', '_hdrCharset' ); /** * Constructor. */ public function __construct() { $this->_init(); } /** * Initialization tasks. */ protected function _init() { $this->_contentTypeParams = new Horde_Support_CaseInsensitiveArray(); } /** * Function to run on clone. */ public function __clone() { reset($this->_parts); while (list($k, $v) = each($this->_parts)) { $this->_parts[$k] = clone $v; } $this->_contentTypeParams = clone $this->_contentTypeParams; } /** * 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) { if (empty($disposition)) { $this->_disposition = ''; } else { $disposition = Horde_String::lower($disposition); if (in_array($disposition, array('inline', 'attachment'))) { $this->_disposition = $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->_disposition; } /** * Add a disposition parameter to this part. * * @param string $label The disposition parameter label. * @param string $data The disposition parameter data. */ public function setDispositionParameter($label, $data) { $this->_dispParams[$label] = $data; switch ($label) { case 'size': // RFC 2183 [2.7] - size parameter $this->_bytes = intval($data); break; } } /** * 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) { return (isset($this->_dispParams[$label])) ? $this->_dispParams[$label] : null; } /** * 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->_dispParams; } /** * 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()) { $this->clearContents(); if (empty($options['encoding'])) { $options['encoding'] = $this->_transferEncoding; } $fp = (empty($options['usestream']) || !is_resource($contents)) ? $this->_writeStream($contents) : $contents; $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': $stream = new Horde_Stream_Existing(array( 'stream' => $fp )); /* 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 (($this->_transferEncoding == self::UNKNOWN) || (strpos($type, '/') === false)) { return; } list($this->_type, $this->_subtype) = explode('/', Horde_String::lower($type)); if (in_array($this->_type, self::$mimeTypes)) { /* Set the boundary string for 'multipart/*' parts. */ if ($this->_type == 'multipart') { if (!$this->getContentTypeParameter('boundary')) { $this->setContentTypeParameter('boundary', $this->_generateBoundary()); } } else { $this->clearContentTypeParameter('boundary'); } } else { $this->_type = self::UNKNOWN; $this->clearContentTypeParameter('boundary'); } } /** * 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 mimetype of this part (ex.: text/plain; * charset=us-ascii) or false. */ public function getType($charset = false) { if (empty($this->_type) || empty($this->_subtype)) { return false; } $ptype = $this->getPrimaryType(); $type = $ptype . '/' . $this->getSubType(); if ($charset && ($ptype == 'text') && ($charset = $this->getCharset())) { $type .= '; charset=' . $charset; } return $type; } /** * 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->_type; } /** * Get the subtype of this part. * * @return string The MIME subtype of this part. */ public function getSubType() { return $this->_subtype; } /** * 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. Returns null if there * is no character set. */ public function getCharset() { $charset = $this->getContentTypeParameter('charset'); if (is_null($charset) && $this->getPrimaryType() != 'text') { return null; } $charset = Horde_String::lower($charset); if ($this->getPrimaryType() == 'text') { $d_charset = Horde_String::lower(self::$defaultCharset); if ($d_charset != 'us-ascii' && (!$charset || $charset == 'us-ascii')) { return $d_charset; } } return $charset; } /** * 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. */ 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->_language = is_array($lang) ? $lang : array($lang); } /** * Get the language(s) of this part. * * @param array The list of languages. */ public function getLanguage() { return $this->_language; } /** * 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->_duration); } else { $this->_duration = intval($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 isset($this->_duration) ? $this->_duration : null; } /** * Set the description of this part. * * @param string $description The description of this part. */ public function setDescription($description) { $this->_description = $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) { $desc = $this->_description; if ($default && empty($desc)) { $desc = $this->getName(); } return $desc; } /** * 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; } $encoding = Horde_String::lower($encoding); if (in_array($encoding, self::$encodingTypes)) { if (empty($options['send'])) { $this->_transferEncoding = $encoding; } else { $this->_temp['sendEncoding'] = $encoding; } } elseif (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 = self::UNKNOWN; } } /** * Add a MIME subpart. * * @param Horde_Mime_Part $mime_part Add a subpart to the current object. */ public function addPart($mime_part) { $this->_parts[] = $mime_part; $this->_reindex = true; } /** * Get a list of all MIME subparts. * * @return array An array of the Horde_Mime_Part subparts. */ public function getParts() { return $this->_parts; } /** * Retrieve a specific MIME part. * * @param string $id The MIME ID to get. * * @return Horde_Mime_Part The part requested or null if the part doesn't * exist. */ public function getPart($id) { return $this->_partAction($id, 'get'); } /** * Remove a subpart. * * @param string $id The MIME ID to delete. * * @param boolean Success status. */ public function removePart($id) { return $this->_partAction($id, 'remove'); } /** * Alter a current MIME subpart. * * @param string $id The MIME ID to alter. * @param Horde_Mime_Part $mime_part The MIME part to store. * * @param boolean Success status. */ public function alterPart($id, $mime_part) { return $this->_partAction($id, 'alter', $mime_part); } /** * Function used to find a specific MIME part by ID and perform an action * on it. * * @param string $id The MIME ID. * @param string $action The action to perform ('get', * 'remove', or 'alter'). * @param Horde_Mime_Part $mime_part The object to use for 'alter'. * * @return mixed See calling functions. */ protected function _partAction($id, $action, $mime_part = null) { $this_id = $this->getMimeId(); /* Need strcmp() because, e.g., '2.0' == '2'. */ if (($action == 'get') && (strcmp($id, $this_id) === 0)) { return $this; } if ($this->_reindex) { $this->buildMimeIds(is_null($this_id) ? '1' : $this_id); } foreach (array_keys($this->_parts) as $val) { $partid = $this->_parts[$val]->getMimeId(); if (strcmp($id, $partid) === 0) { switch ($action) { case 'alter': $mime_part->setMimeId($this->_parts[$val]->getMimeId()); $this->_parts[$val] = $mime_part; return true; case 'get': return $this->_parts[$val]; case 'remove': unset($this->_parts[$val]); $this->_reindex = true; return true; } } if ((strpos($id, $partid . '.') === 0) || (strrchr($partid, '.') === '.0')) { return $this->_parts[$val]->_partAction($id, $action, $mime_part); } } return ($action == 'get') ? null : false; } /** * Add a content type parameter to this part. * * @param string $label The disposition parameter label. * @param string $data The disposition parameter data. */ public function setContentTypeParameter($label, $data) { $this->_contentTypeParams[$label] = $data; } /** * Clears a content type parameter from this part. * * @param string $label The disposition parameter label. * @param string $data The disposition parameter data. */ public function clearContentTypeParameter($label) { unset($this->_contentTypeParams[$label]); } /** * 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) { return isset($this->_contentTypeParams[$label]) ? $this->_contentTypeParams[$label] : null; } /** * 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->_contentTypeParams->getArrayCopy(); } /** * 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: See self::_getTransferEncoding() * - 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()) { $headers = empty($options['headers']) ? new Horde_Mime_Headers() : $options['headers']; /* Get the Content-Type itself. */ $ptype = $this->getPrimaryType(); $c_params = $this->getAllContentTypeParameters(); if ($ptype != 'text') { unset($c_params['charset']); } $headers->replaceHeader('Content-Type', $this->getType(), array('params' => $c_params)); /* Add the language(s), if set. (RFC 3282 [2]) */ if ($langs = $this->getLanguage()) { $headers->replaceHeader('Content-Language', implode(',', $langs)); } /* Get the description, if any. */ if (($descrip = $this->getDescription())) { $headers->replaceHeader('Content-Description', $descrip); } /* Set the duration, if it exists. (RFC 3803) */ if (($duration = $this->getDuration()) !== null) { $headers->replaceHeader('Content-Duration', $duration); } /* Per RFC 2046 [4], this MUST appear in the base message headers. */ if ($this->_basepart) { $headers->replaceHeader('MIME-Version', '1.0'); } /* message/* parts require no additional header information. */ if ($ptype == 'message') { return $headers; } /* Don't show Content-Disposition unless a disposition has explicitly * been set or there are parameters. * If there is a name, but no disposition, default to 'attachment'. * RFC 2183 [2] indicates that default is no requested disposition - * the receiving MUA is responsible for display choice. */ $disposition = $this->getDisposition(); $disp_params = $this->getAllDispositionParameters(); $name = $this->getName(); if ($disposition || !empty($name) || !empty($disp_params)) { if (!$disposition) { $disposition = 'attachment'; } if ($name) { $disp_params['filename'] = $name; } $headers->replaceHeader('Content-Disposition', $disposition, array('params' => $disp_params)); } else { $headers->removeHeader('Content-Disposition'); } /* Add transfer encoding information. RFC 2045 [6.1] indicates that * default is 7bit. No need to send the header in this case. */ $encoding = $this->_getTransferEncoding(empty($options['encode']) ? null : $options['encode']); if ($encoding == '7bit') { $headers->removeHeader('Content-Transfer-Encoding'); } else { $headers->replaceHeader('Content-Transfer-Encoding', $encoding); } /* Add content ID information. */ if (!is_null($this->_contentid)) { $headers->replaceHeader('Content-ID', '<' . $this->_contentid . '>'); } 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->getPart($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->getPart($prev_id); if (!$prev_part) { return $contents; } $boundary = trim($this->getContentTypeParameter('boundary'), '"'); $parts = array( $eol . '--' . $boundary . $eol, $contents ); if (!$this->getPart(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'), '"'); reset($this->_parts); while (list(,$part) = each($this->_parts)) { $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)); $hdr_ob->setEOL($eol); if (!empty($this->_temp['toString'])) { $hdr_ob->replaceHeader('Content-Transfer-Encoding', $this->_temp['toString']); } array_unshift($parts, $hdr_ob->toString(array('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 { $nobinary = false; 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 message/* * 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. */ $encoding = '7bit'; $nobinary = true; break; case 'text': $eol = $this->getEOL(); if ($this->_scanStream($this->_contents, '8bit')) { $encoding = ($encode & self::ENCODE_8BIT || $encode & self::ENCODE_BINARY) ? '8bit' : 'quoted-printable'; } elseif ($this->_scanStream($this->_contents, 'preg', "/(?:" . $eol . "|^)[^" . $eol . "]{999,}(?:" . $eol . "|$)/")) { /* 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 = 'quoted-printable'; } else { $encoding = '7bit'; } break; default: /* If transfer encoding has changed from the default, use that * value. */ if ($this->_transferEncoding != self::DEFAULT_ENCODING) { $encoding = $this->_transferEncoding; } else { $encoding = ($encode & self::ENCODE_8BIT || $encode & self::ENCODE_BINARY) ? '8bit' : 'base64'; } break; } /* Need to do one last check for binary data if encoding is 7bit * or 8bit. If the message contains a NULL character at all, the * message MUST be in binary format. RFC 2046 [2.7, 2.8, 2.9]. Q-P * and base64 can handle binary data fine so no need to switch * those encodings. */ if (!$nobinary && in_array($encoding, array('8bit', '7bit')) && $this->_scanStream($this->_contents, 'binary')) { $encoding = ($encode & self::ENCODE_BINARY) ? 'binary' : 'base64'; } } $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. * * @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) { $bytes = 0; if (isset($this->_bytes)) { $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; } } elseif ($this->getPrimaryType() == 'multipart') { reset($this->_parts); while (list(,$part) = each($this->_parts)) { $bytes += $part->getBytes($approx); } } elseif ($this->_contents) { fseek($this->_contents, 0, SEEK_END); $bytes = ftell($this->_contents); /* Base64 transfer encoding is approx. 33% larger than original * data size (RFC 2045 [6.8]). */ if ($approx && ($this->_transferEncoding == 'base64')) { $bytes *= 0.75; } } return $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) { $this->setDispositionParameter('size', $bytes); } /** * Output the size of this MIME part in KB. * * @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($this->_contentid)) { $this->_contentid = is_null($cid) ? (strval(new Horde_Support_Randomid()) . '@' . $_SERVER['SERVER_NAME']) : trim($cid, '<>'); } return $this->_contentid; } /** * Returns the Content-ID for this part. * * @return string The Content-ID for this part. */ public function getContentId() { return $this->_contentid; } /** * 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) { 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'); $id = '1.'; } else { $this->setMimeId($id . '0'); } $i = 1; foreach (array_keys($this->_parts) as $val) { $this->_parts[$val]->buildMimeIds($id . ($i++)); } } } else { $this->setMimeId($id); $id = $id ? $id . '.' : ''; if ($this->getType() == 'message/rfc822') { if (count($this->_parts)) { reset($this->_parts); $this->_parts[key($this->_parts)]->buildMimeIds($id, true); } } elseif (!empty($this->_parts)) { $i = 1; foreach (array_keys($this->_parts) as $val) { $this->_parts[$val]->buildMimeIds($id . ($i++)); } } } $this->_reindex = false; } /** * Generate the unique boundary string (if not already done). * * @return string The boundary string. */ protected function _generateBoundary() { if (is_null($this->_boundary)) { $this->_boundary = '=_' . strval(new Horde_Support_Randomid()); } return $this->_boundary; } /** * Returns a mapping of all MIME IDs to their content-types. * * @param boolean $sort Sort by MIME ID? * * @return array Keys: MIME ID; values: content type. */ public function contentTypeMap($sort = true) { $map = array($this->getMimeId() => $this->getType()); foreach ($this->_parts as $val) { $map += $val->contentTypeMap(false); } if ($sort) { uksort($map, 'strnatcmp'); } return $map; } /** * Is this the base MIME part? * * @param boolean $base True if this is the base MIME part. */ public function isBasePart($base) { $this->_basepart = $base; } /** * 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: * - 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_basepart = $this->_basepart; $this->_basepart = 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 (!$headers->getValue('MIME-Version')) { $headers = $this->addMimeHeaders(array('encode' => $encode, 'headers' => $headers)); } if (!empty($this->_temp['toString'])) { $headers->replaceHeader('Content-Transfer-Encoding', $this->_temp['toString']); switch ($this->_temp['toString']) { case '8bit': if ($mailer instanceof Horde_Mail_Transport_Smtp) { $mailer->addServiceExtensionParameter('BODY', '8BITMIME'); } elseif ($mailer instanceof Horde_Mail_Transport_Smtphorde) { $mailer->send8bit = true; } break; } } $this->_basepart = $old_basepart; $rfc822 = new Horde_Mail_Rfc822(); try { $mailer->send($rfc822->parseAddressList($email)->writeAddress(array( 'encode' => $this->getHeaderCharset(), 'idn' => true )), $headers->toArray(array( 'canonical' => $canonical, 'charset' => $this->getHeaderCharset() )), $msg); } 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) { $initial_id = $this->getMimeId(); $this->buildMimeIds(); foreach ($this->contentTypeMap() as $mime_id => $mime_type) { if ((strpos($mime_type, 'text/') === 0) && (!$initial_id || (intval($mime_id) == 1)) && (is_null($subtype) || (substr($mime_type, 5) == $subtype)) && ($part = $this->getPart($mime_id)) && ($part->getDisposition() != 'attachment')) { return $mime_id; } } return null; } /** * 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); } if (!empty($options['filter'])) { $append_filter = array(); foreach ($options['filter'] as $key => $val) { $append_filter[] = stream_filter_append($fp, $key, STREAM_FILTER_WRITE, $val); } } if (!empty($options['error'])) { set_error_handler(array($this, '_writeStreamErrorHandler')); $error = null; } try { reset($data); while (list(,$d) = each($data)) { if (is_resource($d)) { rewind($d); while (!feof($d)) { fwrite($fp, fread($d, 8192)); } } else { $len = strlen($d); $i = 0; while ($i < $len) { fwrite($fp, substr($d, $i, 8192)); $i += 8192; } } } } catch (ErrorException $e) { $error = $e; } if (!empty($options['filter'])) { foreach ($append_filter as $val) { stream_filter_remove($val); } } if (!empty($options['error'])) { restore_error_handler(); if ($error) { throw $error; } } return $fp; } /** * Error handler for _writeStream(). * * @param integer $errno Error code. * @param string $errstr Error text. * * @throws ErrorException */ protected function _writeStreamErrorHandler($errno, $errstr) { throw new ErrorException($errstr, $errno); } /** * 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 the requested data. * * @param resource $fp A stream resource. * @param string $type Either '8bit', 'binary', or 'preg'. * @param mixed $data Any additional data needed to do the scan. * * @param boolean The result of the scan. */ protected function _scanStream($fp, $type, $data = null) { rewind($fp); while (is_resource($fp) && !feof($fp)) { $line = fread($fp, 8192); switch ($type) { case '8bit': if (Horde_Mime::is8bit($line)) { return true; } break; case 'binary': if (strpos($line, "\0") !== false) { return true; } break; case 'preg': if (preg_match($data, $line)) { return true; } break; } } return false; } /** * Attempts to build a Horde_Mime_Part object from message text. * This function can be called statically via: * $mime_part = Horde_Mime_Part::parseMessage(); * * @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 */ static public 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. */ static protected function _getStructure($header, $body, array $opts = array()) { $opts = array_merge(array( 'ctype' => 'application/octet-stream', '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'] && !$hdrs->getValue('mime-version')) { $ob->setType('text/plain'); if (!$opts['no_body'] && !empty($body)) { $ob->setContents($body); } return $ob; } /* Content type. */ if ($tmp = $hdrs->getValue('content-type', Horde_Mime_Headers::VALUE_BASE)) { $ob->setType($tmp); $ctype_params = $hdrs->getValue('content-type', Horde_Mime_Headers::VALUE_PARAMS); foreach ($ctype_params as $key => $val) { $ob->setContentTypeParameter($key, $val); } } else { $ob->setType($opts['ctype']); } /* Content transfer encoding. */ if ($tmp = $hdrs->getValue('content-transfer-encoding')) { $ob->setTransferEncoding($tmp); } /* Content-Description. */ if ($tmp = $hdrs->getValue('content-description')) { $ob->setDescription($tmp); } /* Content-Disposition. */ if ($tmp = $hdrs->getValue('content-disposition', Horde_Mime_Headers::VALUE_BASE)) { $ob->setDisposition($tmp); foreach ($hdrs->getValue('content-disposition', Horde_Mime_Headers::VALUE_PARAMS) as $key => $val) { $ob->setDispositionParameter($key, $val); } } /* Content-Duration */ if ($tmp = $hdrs->getValue('content-duration')) { $ob->setDuration($tmp); } /* Content-ID. */ if ($tmp = $hdrs->getValue('content-id')) { $ob->setContentId($tmp); } if (!$opts['no_body'] && !empty($body) && ($ob->getPrimaryType() != 'multipart')) { $ob->setContents($body); } if (++$opts['level'] >= self::NESTING_LIMIT) { return $ob; } /* Process subparts. */ switch ($ob->getPrimaryType()) { case 'message': if ($ob->getSubType() == 'rfc822') { $ob->addPart(self::parseMessage($body, array('forcemime' => true))); } 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->addPart(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. * This function can be called statically via: * $data = Horde_Mime_Part::getRawPartText(); * * @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 */ static public 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 ($hdr_ob->getValue('Content-Type', Horde_Mime_Headers::VALUE_BASE) == 'message/rfc822') { return self::getRawPartText(substr($rawtext, $curr_pos + 1), $type, $id); } $base_pos = strpos($id, '.'); $orig_id = $id; if ($base_pos !== false) { $base_pos = substr($id, 0, $base_pos); $id = substr($id, $base_pos); } else { $base_pos = $id; $id = 0; } $params = $hdr_ob->getValue('Content-Type', Horde_Mime_Headers::VALUE_PARAMS); if (!isset($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, $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. */ static protected 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'. */ static protected 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; } /* ArrayAccess methods. */ public function offsetExists($offset) { return ($this->getPart($offset) !== null); } public function offsetGet($offset) { return $this->getPart($offset); } public function offsetSet($offset, $value) { $this->alterPart($offset, $value); } public function offsetUnset($offset) { $this->removePart($offset); } /* Countable methods. */ /** * Returns the number of message parts. * * @return integer Number of message parts. */ public function count() { return count($this->_parts); } /* Serializable methods. */ /** * Serialization. * * @return string Serialized data. */ public function serialize() { $data = array( // Serialized data ID. self::VERSION ); foreach ($this->_serializedVars as $val) { switch ($val) { case '_contentTypeParams': $data[] = $this->$val->getArrayCopy(); break; default: $data[] = $this->$val; break; } } 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]) || (array_shift($data) != self::VERSION)) { throw new Exception('Cache version change'); } $this->_init(); foreach ($this->_serializedVars as $key => $val) { switch ($val) { case '_contentTypeParams': $this->$val = new Horde_Support_CaseInsensitiveArray($data[$key]); break; default: $this->$val = $data[$key]; break; } } // $key now contains the last index of _serializedVars. if (isset($data[++$key])) { $this->setContents($data[$key]); } } } Horde_Mime-2.2.8/lib/Horde/Mime/Related.php0000644000175000007640000001026112243576212020322 0ustar slusarzslusarz * @category Horde * @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'); } $ids = array_keys($mime_part->contentTypeMap()); $related_id = $mime_part->getMimeId(); $id = null; /* Build a list of parts -> CIDs. */ foreach ($ids as $val) { if ((strcmp($related_id, $val) !== 0) && ($cid = $mime_part->getPart($val)->getContentId())) { $this->_cids[$val] = $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]). */ $start = $mime_part->getContentTypeParameter('start'); if (!empty($start)) { $id = $this->cidSearch($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.2.8/lib/Horde/Mime/Translation.php0000644000175000007640000000355112243576212021244 0ustar slusarzslusarz * @category Mime * @copyright 2010-2013 Horde LLC * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime */ class Horde_Mime_Translation extends Horde_Translation { /** * Returns the translation of a message. * * @var string $message The string to translate. * * @return string The string translation, or the original string if no * translation exists. */ static public function t($message) { self::$_domain = 'Horde_Mime'; self::$_directory = '@data_dir@' == '@'.'data_dir'.'@' ? __DIR__ . '/../../../locale' : '@data_dir@/Horde_Mime/locale'; return parent::t($message); } /** * Returns the plural translation of a message. * * @param string $singular The singular version to translate. * @param string $plural The plural version to translate. * @param integer $number The number that determines singular vs. plural. * * @return string The string translation, or the original string if no * translation exists. */ static public function ngettext($singular, $plural, $number) { self::$_domain = 'Horde_Mime'; self::$_directory = '@data_dir@' == '@'.'data_dir'.'@' ? __DIR__ . '/../../../locale' : '@data_dir@/Horde_Mime/locale'; return parent::ngettext($singular, $plural, $number); } } Horde_Mime-2.2.8/lib/Horde/Mime.php0000644000175000007640000006002012243576212016740 0ustar slusarzslusarz * Copyright (c) 2003-2006, PEAR * All rights reserved. * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - Neither the name of the authors, nor the names of its contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGE. * * ----- * * This file contains code adapted from PEAR's PHP_Compat library (v1.6.0a3). * * http://pear.php.net/package/PHP_Compat * * This code appears in Horde_Mime::_uudecode(). * * This code was originally released under the LGPL 2.1 * * ----- * * Copyright 1999-2013 Horde LLC (http://www.horde.org/) * * See the enclosed file COPYING for license information (LGPL). If you * did not receive this file, see http://www.horde.org/licenses/lgpl21. * * @author Chuck Hagenbuch * @author Michael Slusarz * @category Horde * @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"; /** * The list of characters required to be quoted in MIME parameters * (regular expression). * * @since 2.1.0 * * @var string */ const MIME_PARAM_QUOTED = '/[\x01-\x20\x22\x28\x29\x2c\x2f\x3a-\x40\x5b-\x5d]/'; /** * 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. See: * http://lists.horde.org/archives/dev/Week-of-Mon-20040426/014240.html * * @var boolean */ static public $brokenRFC2231 = false; /** * Use windows-1252 charset when decoding ISO-8859-1 data? * * @var boolean */ static public $decodeWindows1252 = false; /** * 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. * * @return boolean True if string contains non US-ASCII characters. */ static public function is8bit($string, $charset = null) { return ($string != Horde_String::convertCharset($string, $charset, 'US-ASCII')); } /** * 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). */ static public function encode($text, $charset = 'UTF-8') { /* The null character is valid US-ASCII, but was removed from the * allowed e-mail header characters in RFC 2822. */ if (!self::is8bit($text, 'UTF-8') && (strpos($text, null) === false)) { return $text; } $charset = Horde_String::lower($charset); $text = Horde_String::convertCharset($text, 'UTF-8', $charset); /* Get the list of elements in the string. */ $size = preg_match_all('/([^\s]+)([\s]*)/', $text, $matches, PREG_SET_ORDER); $line = ''; /* Return if nothing needs to be encoded. */ foreach ($matches as $key => $val) { if (self::is8bit($val[1], $charset)) { if ((($key + 1) < $size) && self::is8bit($matches[$key + 1][1], $charset)) { $line .= self::_encode($val[1] . $val[2], $charset) . ' '; } else { $line .= self::_encode($val[1], $charset) . $val[2]; } } else { $line .= $val[1] . $val[2]; } } return rtrim($line); } /** * Internal helper function to MIME encode a string. * * @param string $text The text to encode. * @param string $charset The character set of the text. * * @return string The MIME encoded text. */ static protected function _encode($text, $charset) { $encoded = trim(base64_encode($text)); $c_size = strlen($charset) + 7; if ((strlen($encoded) + $c_size) > 75) { $parts = explode(self::EOL, rtrim(chunk_split($encoded, intval((75 - $c_size) / 4) * 4))); } else { $parts[] = $encoded; } $p_size = count($parts); $out = ''; foreach ($parts as $key => $val) { $out .= '=?' . $charset . '?b?' . $val . '?='; if ($p_size > $key + 1) { /* RFC 2047 [2]: no encoded word can be more than 75 * characters long. If longer, you must split the word with * CRLF SPACE. */ $out .= self::EOL . ' '; } } return $out; } /** * Encodes a line 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. */ static public function quotedPrintableEncode($text, $eol = self::EOL, $wrap = 76) { $curr_length = 0; $output = ''; /* We need to go character by character through the data. */ for ($i = 0, $length = strlen($text); $i < $length; ++$i) { $char = $text[$i]; /* If we have reached the end of the line, reset counters. */ if ($char == "\n") { $output .= $eol; $curr_length = 0; continue; } elseif ($char == "\r") { continue; } /* Spaces or tabs at the end of the line are NOT allowed. Also, * ASCII characters below 32 or above 126 AND 61 must be * encoded. */ $ascii = ord($char); if ((($ascii === 32) && ($i + 1 != $length) && (($text[$i + 1] == "\n") || ($text[$i + 1] == "\r"))) || (($ascii < 32) || ($ascii > 126) || ($ascii === 61))) { $char_len = 3; $char = '=' . Horde_String::upper(sprintf('%02s', dechex($ascii))); } else { $char_len = 1; } /* Lines must be $wrap characters or less. */ $curr_length += $char_len; if ($curr_length > $wrap) { $output .= '=' . $eol; $curr_length = $char_len; } $output .= $char; } return $output; } /** * Decodes a MIME encoded (RFC 2047) string. * * @param string $string The MIME encoded text. * * @return string The decoded text. */ static public function decode($string) { /* Take out any spaces between multiple encoded words. */ $string = preg_replace('|\?=\s+=\?|', '?==?', $string); $out = ''; $old_pos = 0; while (($pos = strpos($string, '=?', $old_pos)) !== false) { /* Save any preceding text. */ $out .= substr($string, $old_pos, $pos - $old_pos); /* 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( preg_replace_callback( '/=([0-9a-f]{2})/i', function($ord) { return chr(hexdec($ord[1])); }, 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); } /** * Encodes a MIME parameter string pursuant to RFC 2183 & 2231 * (Content-Type and Content-Disposition headers). * * @param string $name The parameter name. * @param string $val The parameter value (UTF-8). * @param array $opts Additional options: * - 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). */ static public function encodeParam($name, $val, array $opts = array()) { $curr = 0; $encode = $wrap = false; $output = array(); $charset = isset($opts['charset']) ? $opts['charset'] : 'UTF-8'; // 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']) && !self::is8bit($val, 'UTF-8')) { $string = $val; } else { $cval = Horde_String::convertCharset($val, 'UTF-8', $charset); $string = Horde_String::lower($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) { $output[$name . (($wrap) ? ('*' . $i) : '') . (($encode) ? '*' : '')] = $line; } if (self::$brokenRFC2231 && !isset($output[$name])) { $output = array_merge(array( $name => self::encode($val, $charset) ), $output); } /* Escape certain characters in params (See RFC 2045 [Appendix A]). * Must be quoted-string if one of these exists. * Forbidden: SPACE, CTLs, ()<>@,;:\"/[]?= */ foreach ($output as $k => $v) { if (preg_match(self::MIME_PARAM_QUOTED, $v)) { $output[$k] = '"' . addcslashes($v, '\\"') . '"'; } } return $output; } /** * Decodes a MIME parameter string pursuant to RFC 2183 & 2231 * (Content-Type and Content-Disposition headers). * * @param string $type Either 'Content-Type' or 'Content-Disposition' * (case-insensitive). * @param mixed $data The text of the header or an array of param name * => param values. * * @return array An array with the following entries (all strings in * UTF-8): * - params: (array) The header's parameter values. * - val: (string) The header's "base" value. */ static public function decodeParam($type, $data) { $convert = array(); $ret = array('params' => array(), 'val' => ''); $splitRegex = '/([^;\'"]*[\'"]([^\'"]*([^\'"]*)*)[\'"][^;\'"]*|([^;]+))(;|$)/'; $type = Horde_String::lower($type); if (is_array($data)) { // Use dummy base values $ret['val'] = ($type == 'content-type') ? 'text/plain' : 'attachment'; $params = $data; } else { /* This code was adapted from PEAR's Mail_mimeDecode::. */ if (($pos = strpos($data, ';')) === false) { $ret['val'] = trim($data); return $ret; } $ret['val'] = trim(substr($data, 0, $pos)); $data = trim(substr($data, ++$pos)); $params = $tmp = array(); if (strlen($data) > 0) { /* This splits on a semi-colon, if there's no preceeding * backslash. */ preg_match_all($splitRegex, $data, $matches); for ($i = 0, $cnt = count($matches[0]); $i < $cnt; ++$i) { $param = $matches[0][$i]; while (substr($param, -2) == '\;') { $param .= $matches[0][++$i]; } $tmp[] = $param; } for ($i = 0, $cnt = count($tmp); $i < $cnt; ++$i) { $pos = strpos($tmp[$i], '='); $p_name = trim(substr($tmp[$i], 0, $pos), "'\";\t\\ "); $p_val = trim(str_replace('\;', ';', substr($tmp[$i], $pos + 1)), "'\";\t\\ "); if (strlen($p_val) && ($p_val[0] == '"')) { $p_val = substr($p_val, 1, -1); } $params[$p_name] = $p_val; } } /* End of code adapted from PEAR's Mail_mimeDecode::. */ } /* Sort the params list. Prevents us from having to manually keep * track of continuation values below. */ uksort($params, 'strnatcasecmp'); foreach ($params as $name => $val) { /* Asterisk at end indicates encoded value. */ if (substr($name, -1) == '*') { $name = substr($name, 0, -1); $encode = true; } else { $encode = false; } /* This asterisk indicates continuation parameter. */ if (($pos = strrpos($name, '*')) !== false) { $name = substr($name, 0, $pos); } if (!isset($ret['params'][$name]) || ($encode && !isset($convert[$name]))) { $ret['params'][$name] = ''; } $ret['params'][$name] .= $val; if ($encode) { $convert[$name] = true; } } foreach (array_keys($convert) as $name) { $val = $ret['params'][$name]; $quote = strpos($val, "'"); $orig_charset = substr($val, 0, $quote); if (self::$decodeWindows1252 && (Horde_String::lower($orig_charset) == 'iso-8859-1')) { $orig_charset = 'windows-1252'; } /* Ignore language. */ $quote = strpos($val, "'", $quote + 1); substr($val, $quote + 1); $ret['params'][$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. */ if (empty($convert)) { foreach (array_diff(array_keys($ret['params']), array_keys($convert)) as $name) { $ret['params'][$name] = self::decode($ret['params'][$name]); } } return $ret; } /** * Generates a Message-ID string conforming to RFC 2822 [3.6.4] and the * standards outlined in 'draft-ietf-usefor-message-id-01.txt'. * * @param string A message ID string. */ static public function generateMessageId() { return '<' . strval(new Horde_Support_Guid(array('prefix' => 'Horde'))) . '>'; } /** * Performs MIME ID "arithmetic" on a given ID. * * @param string $id The MIME ID string. * @param string $action One of the following: * - down: ID of child. Note: 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", down will traverse to "$id.1". This behavior * can be avoided if 'norfc822' option is set. * - next: ID of next sibling. * - prev: ID of previous sibling. * - up: ID of parent. Note: 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", down will traverse to "$id". This behavior can be * avoided if 'norfc822' option is set. * @param array $options Additional options: * - count: (integer) How many levels to traverse. * DEFAULT: 1 * - norfc822: (boolean) Don't traverse rfc822 sub-levels * DEFAULT: false * * @return mixed The resulting ID string, or null if that ID can not * exist. */ static public function mimeIdArithmetic($id, $action, $options = array()) { $pos = strrpos($id, '.'); $end = ($pos === false) ? $id : substr($id, $pos + 1); switch ($action) { case 'down': if ($end == '0') { $id = ($pos === false) ? 1 : substr_replace($id, '1', $pos + 1); } else { $id .= empty($options['norfc822']) ? '.0' : '.1'; } break; case 'next': ++$end; $id = ($pos === false) ? $end : substr_replace($id, $end, $pos + 1); break; case 'prev': if (($end == '0') || (empty($options['norfc822']) && ($end == '1'))) { $id = null; } elseif ($pos === false) { $id = --$end; } else { $id = substr_replace($id, --$end, $pos + 1); } break; case 'up': if ($pos === false) { $id = ($end == '0') ? null : '0'; } elseif (!empty($options['norfc822']) || ($end == '0')) { $id = substr($id, 0, $pos); } else { $id = substr_replace($id, '0', $pos + 1); } break; } return (!is_null($id) && !empty($options['count']) && --$options['count']) ? self::mimeIdArithmetic($id, $action, $options) : $id; } /** * Determines if a given MIME ID lives underneath a base ID. * * @param string $base The base MIME ID. * @param string $id The MIME ID to query. * * @return boolean Whether $id lives underneath $base. */ static public function isChild($base, $id) { $base = (substr($base, -2) == '.0') ? substr($base, 0, -1) : rtrim($base, '.') . '.'; return ((($base == 0) && ($id != 0)) || (strpos(strval($id), strval($base)) === 0)); } /** * Scans $input for uuencoded data and converts it to unencoded data. * * @param string $input The input data * * @return array 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. */ static public function uudecode($input) { $data = array(); /* Find all uuencoded sections. */ if (preg_match_all("/begin ([0-7]{3}) (.+)\r?\n(.+)\r?\nend/Us", $input, $matches, PREG_SET_ORDER)) { reset($matches); while (list(,$v) = each($matches)) { $data[] = array( 'data' => self::_uudecode($v[3]), 'name' => $v[2], 'perm' => $v[1] ); } } return $data; } /** * PHP 5's built-in convert_uudecode() is broken. Need this wrapper. * * @param string $input UUencoded input. * * @return string Decoded string. */ static 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"); } } Horde_Mime-2.2.8/locale/ar/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000057312243576212021533 0ustar slusarzslusarz$,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.2.8/locale/ar/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000314312243576212021532 0ustar slusarzslusarz# Arabic 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. # 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.2.8/locale/bg/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000057312243576212021521 0ustar slusarzslusarz$,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.2.8/locale/bg/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000312112243576212021514 0ustar slusarzslusarz# Bulgarian 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. # 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.2.8/locale/bs/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000057312243576212021535 0ustar slusarzslusarz$,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.2.8/locale/bs/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000332412243576212021535 0ustar slusarzslusarz# Bosnian 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. # 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.2.8/locale/ca/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000137612243576212021516 0ustar slusarzslusarz 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.2.8/locale/ca/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000352112243576212021513 0ustar slusarzslusarz# Catalan 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. # 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.2.8/locale/cs/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000154712243576212021540 0ustar slusarzslusarz 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.2.8/locale/cs/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000371112243576212021536 0ustar slusarzslusarz# Czech 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. # 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.2.8/locale/da/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000144412243576212021513 0ustar slusarzslusarz 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); OverdragelsesnotitsListe-ArchiveList-HelpList-IdList-OwnerList-PostList-SubscribeList-UnsubscribeHorde_Mime-2.2.8/locale/da/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000361112243576212021514 0ustar slusarzslusarz# Danish 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. # 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 "Overdragelsesnotits" #: 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 destination." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "Liste-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 "" "Beskeden, som er sendt den %s til %s med emnet \"%s\" er blevet vist.\n" "Dette er ingen garanti for, at beskeden rent faktisk er blevet læst eller " "forstået." Horde_Mime-2.2.8/locale/de/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000243512243576212021520 0ustar slusarzslusarz | !: R _i q |wJ   '6GXr    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: 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 NachrichtListen-ArchivListen-HilfeListen-IdListen-BesitzerListen-AdresseListen-AnmeldungListen-AbmeldungTextversion 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.2.8/locale/de/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000354712243576212021530 0ustar slusarzslusarz# German 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. # Automatically generated, 2010. # 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: 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:421 msgid "HTML Version of Message" msgstr "HTML-Version der Nachricht" #: lib/Horde/Mime/Headers.php:542 msgid "List-Archive" msgstr "Listen-Archiv" #: lib/Horde/Mime/Headers.php:537 msgid "List-Help" msgstr "Listen-Hilfe" #: lib/Horde/Mime/Headers.php:544 msgid "List-Id" msgstr "Listen-Id" #: lib/Horde/Mime/Headers.php:540 msgid "List-Owner" msgstr "Listen-Besitzer" #: lib/Horde/Mime/Headers.php:541 msgid "List-Post" msgstr "Listen-Adresse" #: lib/Horde/Mime/Headers.php:539 msgid "List-Subscribe" msgstr "Listen-Anmeldung" #: lib/Horde/Mime/Headers.php:538 msgid "List-Unsubscribe" msgstr "Listen-Abmeldung" #: lib/Horde/Mime/Mail.php:419 msgid "Plaintext Version of Message" msgstr "Textversion der Nachricht" #: 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 "" "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.2.8/locale/el/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000077312243576212021533 0ustar slusarzslusarz,<PQlj#Disposition 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); Ενημέρωση ΔιάταξηςHorde_Mime-2.2.8/locale/el/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000377712243576212021545 0ustar slusarzslusarz# Greek 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. # 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 "Ακυρη διεύθυνση προορισμού." #: 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 #, 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.2.8/locale/en/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000250212243576212021525 0ustar slusarzslusarz 01J(b    l (! J Wa i t~    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=ASCII Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); 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.Horde_Mime-2.2.8/locale/en/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000366512243576212021543 0ustar slusarzslusarz# English 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. # 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=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 "HTML Version of Message" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "Invalid character in e-mail address: %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 "Plaintext Version of 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 "" "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." Horde_Mime-2.2.8/locale/es/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000243512243576212021537 0ustar slusarzslusarz | !: 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.2.8/locale/es/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000355112243576212021542 0ustar slusarzslusarz# 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.2.8/locale/et/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000244012243576212021534 0ustar slusarzslusarz 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.2.8/locale/et/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000362412243576212021544 0ustar slusarzslusarz# Estonian 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. # 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.2.8/locale/eu/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000246112243576212021540 0ustar slusarzslusarz | !: 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.2.8/locale/eu/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000357712243576212021554 0ustar slusarzslusarz# Basque 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. # 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.2.8/locale/fa/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000147512243576212021521 0ustar slusarzslusarz 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.2.8/locale/fa/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000371312243576212021521 0ustar slusarzslusarz# Persian 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. # 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.2.8/locale/fi/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000242012243576212021520 0ustar slusarzslusarz | !: 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.2.8/locale/fi/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000353712243576212021535 0ustar slusarzslusarz# Finnish 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. # 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.2.8/locale/fr/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000262112243576212021534 0ustar slusarzslusarz 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.2.8/locale/fr/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000377512243576212021552 0ustar slusarzslusarz# French 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. # 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.2.8/locale/gl/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000057312243576212021533 0ustar slusarzslusarz$,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.2.8/locale/gl/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000312512243576212021532 0ustar slusarzslusarz# Galician 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. # 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.2.8/locale/he/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000064612243576212021526 0ustar slusarzslusarz$,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.2.8/locale/he/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000316212243576212021525 0ustar slusarzslusarz# Hebrew 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. # 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.2.8/locale/hr/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000263312243576212021541 0ustar slusarzslusarz 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.2.8/locale/hr/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000414712243576212021546 0ustar slusarzslusarz# Croatian 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. # 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.2.8/locale/hu/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000273312243576212021545 0ustar slusarzslusarz 01J(b    l.48m}  *    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); Értesítés a kézbesített levél sorsárólA levél HTML változataHibás/elfogadhatalan karakter az email címben: %s.Lista archívumLista segítségkérésLista azonosítóLista tulajdonosLista levélírásLista feliratkozás (subscribe)Lista leiratkozás (unsubscribe)A levél sima text 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. Arra nincs garancia, hogy el is olvasták. ill. hogy megértették.Horde_Mime-2.2.8/locale/hu/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000411712243576212021546 0ustar slusarzslusarz# 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. # 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 "Értesítés a kézbesített levél sorsáról" #: lib/Horde/Mime/Mail.php:460 msgid "HTML Version of Message" msgstr "A levél HTML változata" #: lib/Horde/Mime/Mail.php:404 #, php-format msgid "Invalid character in e-mail address: %s." msgstr "Hibás/elfogadhatalan karakter az email címben: %s." #: lib/Horde/Mime/Headers.php:519 msgid "List-Archive" msgstr "Lista archívum" #: lib/Horde/Mime/Headers.php:514 msgid "List-Help" msgstr "Lista segítségkérés" #: lib/Horde/Mime/Headers.php:521 msgid "List-Id" msgstr "Lista azonosító" #: lib/Horde/Mime/Headers.php:517 msgid "List-Owner" msgstr "Lista tulajdonos" #: lib/Horde/Mime/Headers.php:518 msgid "List-Post" msgstr "Lista levélírás" #: lib/Horde/Mime/Headers.php:516 msgid "List-Subscribe" msgstr "Lista feliratkozás (subscribe)" #: lib/Horde/Mime/Headers.php:515 msgid "List-Unsubscribe" msgstr "Lista leiratkozás (unsubscribe)" #: lib/Horde/Mime/Mail.php:458 msgid "Plaintext Version of Message" msgstr "A levél sima text változata" #: 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 "" "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" "Arra nincs garancia, hogy el is olvasták. ill. hogy megértették." Horde_Mime-2.2.8/locale/id/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000057312243576212021525 0ustar slusarzslusarz$,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.2.8/locale/id/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000326112243576212021525 0ustar slusarzslusarz# Indonesian 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. # 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.2.8/locale/is/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000057312243576212021544 0ustar slusarzslusarz$,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.2.8/locale/is/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000317512243576212021550 0ustar slusarzslusarz# Icelandic 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. # 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.2.8/locale/it/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000255212243576212021544 0ustar slusarzslusarz 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.2.8/locale/it/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000373512243576212021553 0ustar slusarzslusarz# Italian 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. # 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.2.8/locale/ja/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000251312243576212021517 0ustar slusarzslusarz | !: 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.2.8/locale/ja/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000361512243576212021526 0ustar slusarzslusarz# Japanese translation for Horde. # Copyright 2004-2013 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.2.8/locale/km/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000057312243576212021540 0ustar slusarzslusarz$,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.2.8/locale/km/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000331012243576212021533 0ustar slusarzslusarz# Khmer 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. # 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.2.8/locale/ko/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000063712243576212021543 0ustar slusarzslusarz$,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.2.8/locale/ko/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000351512243576212021544 0ustar slusarzslusarz# Korean 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. # 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.2.8/locale/lt/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000275312243576212021552 0ustar slusarzslusarz 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.2.8/locale/lt/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000415412243576212021552 0ustar slusarzslusarz# Lithuanian 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. # 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.2.8/locale/lv/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000302412243576212021544 0ustar slusarzslusarz 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.2.8/locale/lv/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000423412243576212021553 0ustar slusarzslusarz# Latvian translations for Horde_Mime package. # Copyright 2011-2013 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.2.8/locale/mk/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000057312243576212021540 0ustar slusarzslusarz$,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.2.8/locale/mk/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000315012243576212021535 0ustar slusarzslusarz# Macedonian 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. # 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.2.8/locale/nb/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000075212243576212021527 0ustar slusarzslusarz,<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.2.8/locale/nb/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000330612243576212021530 0ustar slusarzslusarz# Norwegian Bokmal 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. # 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.2.8/locale/nl/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000245612243576212021544 0ustar slusarzslusarz | !: 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.2.8/locale/nl/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000361512243576212021545 0ustar slusarzslusarz# Dutch 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. # # 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.2.8/locale/nn/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000064612243576212021545 0ustar slusarzslusarz$,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.2.8/locale/nn/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000321012243576212021536 0ustar slusarzslusarz# Norwegian Nynorsk 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. # 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.2.8/locale/pl/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000074012243576212021540 0ustar slusarzslusarz$,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.2.8/locale/pl/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000365312243576212021551 0ustar slusarzslusarz# Polish 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. # 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.2.8/locale/pt/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000152512243576212021552 0ustar slusarzslusarz 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.2.8/locale/pt/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000367312243576212021563 0ustar slusarzslusarz# Portuguese 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. # 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.2.8/locale/pt_BR/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000235012243576212022132 0ustar slusarzslusarz | !: 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: 2012-08-29 13:30+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.2.8/locale/pt_BR/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000346312243576212022143 0ustar slusarzslusarz# Portuguese 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. # 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: 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:419 msgid "HTML Version of Message" msgstr "Versão HTML da Mensagem" #: 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 "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.2.8/locale/ro/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000072412243576212021547 0ustar slusarzslusarz$,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.2.8/locale/ro/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000326712243576212021557 0ustar slusarzslusarz# Romanian 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. # 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.2.8/locale/ru/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000076012243576212021555 0ustar slusarzslusarz$,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.2.8/locale/ru/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000421712243576212021561 0ustar slusarzslusarz# Russian 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. # 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.2.8/locale/sk/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000243312243576212021543 0ustar slusarzslusarz | !: 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.2.8/locale/sk/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000364012243576212021547 0ustar slusarzslusarz# Slovak 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. # 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.2.8/locale/sl/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000222112243576212021537 0ustar slusarzslusarz 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.2.8/locale/sl/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000371612243576212021554 0ustar slusarzslusarz# Slovenian 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. # 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.2.8/locale/sv/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000064612243576212021562 0ustar slusarzslusarz$,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.2.8/locale/sv/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000326112243576212021561 0ustar slusarzslusarz# Swedish 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. # 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.2.8/locale/tr/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000256612243576212021562 0ustar slusarzslusarz 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.2.8/locale/tr/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000375112243576212021562 0ustar slusarzslusarz# Turkish 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. # 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.2.8/locale/uk/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000277312243576212021554 0ustar slusarzslusarz 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.2.8/locale/uk/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000415712243576212021555 0ustar slusarzslusarz# Ukrainian 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. # 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.2.8/locale/zh_CN/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000200312243576212022120 0ustar slusarzslusarz 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.2.8/locale/zh_CN/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000345412243576212022136 0ustar slusarzslusarz# Chinese 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. # 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.2.8/locale/zh_TW/LC_MESSAGES/Horde_Mime.mo0000644000175000007640000000253512243576212022164 0ustar slusarzslusarz 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.2.8/locale/zh_TW/LC_MESSAGES/Horde_Mime.po0000644000175000007640000000371412243576212022167 0ustar slusarzslusarz# Chinese 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. # 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.2.8/locale/Horde_Mime.pot0000644000175000007640000000273012243576212017530 0ustar slusarzslusarz# 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: 2013-10-29 10:13+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:421 msgid "HTML Version of Message" msgstr "" #: lib/Horde/Mime/Headers.php:542 msgid "List-Archive" msgstr "" #: lib/Horde/Mime/Headers.php:537 msgid "List-Help" msgstr "" #: lib/Horde/Mime/Headers.php:544 msgid "List-Id" msgstr "" #: lib/Horde/Mime/Headers.php:540 msgid "List-Owner" msgstr "" #: lib/Horde/Mime/Headers.php:541 msgid "List-Post" msgstr "" #: lib/Horde/Mime/Headers.php:539 msgid "List-Subscribe" msgstr "" #: lib/Horde/Mime/Headers.php:538 msgid "List-Unsubscribe" msgstr "" #: lib/Horde/Mime/Mail.php:419 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 "" Horde_Mime-2.2.8/test/Horde/Mime/fixtures/attachment.bin0000644000175000007640000000010512243576212023131 0ustar slusarzslusarzZwölf Boxkämpfer jagen Viktor quer über den großen Sylter Deich. Horde_Mime-2.2.8/test/Horde/Mime/fixtures/bug12536.txt0000644000175000007640000000066312243576212022237 0ustar slusarzslusarzFrom: 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.2.8/test/Horde/Mime/fixtures/bug12842_a.txt0000644000175000007640000000015312243576212022531 0ustar slusarzslusarzContent-Type: multipart/related; boundary="=_123" MIME-Version: 1.0 --=_123 Content-Type: text/plain FOO Horde_Mime-2.2.8/test/Horde/Mime/fixtures/bug12842_b.txt0000644000175000007640000000006212243576212022531 0ustar slusarzslusarz --=_123 Content-Type: text/plain BAR --=_123-- Horde_Mime-2.2.8/test/Horde/Mime/fixtures/deeply_nested.txt0000644000175000007640000003766512243576212023721 0ustar slusarzslusarzContent-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.2.8/test/Horde/Mime/fixtures/flowed_msg.txt0000644000175000007640000000067712243576212023214 0ustar slusarzslusarzLorem 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.2.8/test/Horde/Mime/fixtures/header_trailing_ws.txt0000644000175000007640000000014712243576212024710 0ustar slusarzslusarzSubject: This subject has a trailing whitespace From: "Test User" Body Text. Horde_Mime-2.2.8/test/Horde/Mime/fixtures/multiple_to.txt0000644000175000007640000002040412243576212023411 0ustar slusarzslusarzMessage-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.2.8/test/Horde/Mime/fixtures/related_msg.txt0000644000175000007640000000272412243576212023347 0ustar slusarzslusarzContent-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.2.8/test/Horde/Mime/fixtures/samplemultipart_msg.txt0000644000175000007640000000161012243576212025143 0ustar slusarzslusarzSubject: 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.2.8/test/Horde/Mime/fixtures/sample_msg.txt0000644000175000007640000000451012243576212023203 0ustar slusarzslusarzReturn-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.2.8/test/Horde/Mime/fixtures/sample_msg2.txt0000644000175000007640000000140412243576212023264 0ustar slusarzslusarzReturn-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.2.8/test/Horde/Mime/fixtures/sample_msg3.txt0000644000175000007640000000035612243576212023272 0ustar slusarzslusarzMessage-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.2.8/test/Horde/Mime/fixtures/uudecode.txt0000644000175000007640000000020312243576212022644 0ustar slusarzslusarz Ignore this text. begin 644 test.txt +5&5S="!S=')I;F<` ` end More text to ignore. begin 755 test2.txt *,FYD('-Trun(); Horde_Mime-2.2.8/test/Horde/Mime/bootstrap.php0000644000175000007640000000014312243576212021166 0ustar slusarzslusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ /** * @author Michael Slusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_HeadersTest extends PHPUnit_Framework_TestCase { public function testSerialize() { $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader('Subject', 'My Subject'); $hdrs->addHeader('To', 'recipient@example.com'); $hdrs->addHeader('Cc', 'null@example.com'); $hdrs->addHeader('Bcc', 'invisible@example.com'); $hdrs->addHeader('From', 'sender@example.com'); $stored = serialize($hdrs); $hdrs2 = unserialize($stored); $this->assertEquals( 'null@example.com', $hdrs2->getValue('cc') ); } public function testHeaderDecode() { $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader( 'Test', '=?iso-8859-15?b?VmVyc2nzbg==?=', array( 'decode' => true ) ); $this->assertEquals( 'Versión', $hdrs->getValue('Test') ); } public function testHeaderAutoDetectCharset() { $hdrs = Horde_Mime_Headers::parseHeaders( // This string is in Windows-1252 'Test: ' . base64_decode('UnVubmVyc5IgQWxlcnQh=') ); $this->assertEquals( 'Runners’ Alert!', $hdrs->getValue('Test') ); } public function testHeaderCharsetConversion() { $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader('To', 'Empfänger '); $hdr_array = $hdrs->toArray(array( 'charset' => 'iso-8859-1' )); $this->assertEquals( '=?iso-8859-1?b?RW1wZuRuZ2Vy?= ', $hdr_array['To'] ); } public function testMultipleContentType() { $hdrs = Horde_Mime_Headers::parseHeaders( "Content-Type: multipart/mixed\n" . "Content-Type: multipart/mixed\n" ); $this->assertInternalType( 'string', $hdrs->getValue('content-type', Horde_Mime_Headers::VALUE_BASE) ); } public function testMultivalueHeaders() { $hdrs = Horde_Mime_Headers::parseHeaders( "To: recipient1@example.com, recipient2@example.com" ); $this->assertEquals( 'recipient1@example.com, recipient2@example.com', $hdrs->getValue('to') ); $hdrs = Horde_Mime_Headers::parseHeaders( "To: recipient1@example.com To: recipient2@example.com" ); $this->assertEquals( 'recipient1@example.com, recipient2@example.com', $hdrs->getValue('to') ); } public function testAddHeaderWithGroup() { $email = 'Test: foo@example.com, bar@example.com;'; $rfc822 = new Horde_Mail_Rfc822(); $ob = $rfc822->parseAddressList($email); $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader('To', $ob); $this->assertEquals( $email, $hdrs->getValue('to') ); } public function testUnencodedMimeHeader() { // The header is base64 encoded to preserve charset data. $hdr = 'RnJvbTogqSBWSUFHUkEgriBPZmZpY2lhbCBTaXRlIDxzbHVzYXJza2lAZ29sZGVud2FyZS5jb20+DQo='; $hdrs = Horde_Mime_Headers::parseHeaders(base64_decode($hdr)); $this->assertEquals( '© VIAGRA ® Official Site ', $hdrs->getValue('from') ); } public function testUndisclosedHeaderParsing() { $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader('To', 'undisclosed-recipients'); $this->assertEquals( '', $hdrs->getValue('To') ); $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader('To', 'undisclosed-recipients:'); $this->assertEquals( '', $hdrs->getValue('To') ); $hdrs = new Horde_Mime_Headers(); $hdrs->addHeader('To', 'undisclosed-recipients:;'); $this->assertEquals( '', $hdrs->getValue('To') ); } public function testMultipleToAddresses() { $msg = file_get_contents(__DIR__ . '/fixtures/multiple_to.txt'); $hdrs = Horde_Mime_Headers::parseHeaders($msg); $this->assertNotEmpty($hdrs->getValue('To')); } public function testBug12189() { $msg = file_get_contents(__DIR__ . '/fixtures/header_trailing_ws.txt'); $hdrs = Horde_Mime_Headers::parseHeaders($msg); $this->assertNotNull($hdrs->getValue('From')); } } Horde_Mime-2.2.8/test/Horde/Mime/MagicTest.php0000644000175000007640000000155512243576212021041 0ustar slusarzslusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ /** * @author Michael Slusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_MagicTest extends PHPUnit_Framework_TestCase { public function testBug325() { if (!extension_loaded('fileinfo')) { $this->markTestSkipped('The fileinfo extension is not available.'); } $this->assertEquals( 'text/plain', Horde_Mime_Magic::analyzeFile(__DIR__ . '/fixtures/flowed_msg.txt') ); } } Horde_Mime-2.2.8/test/Horde/Mime/MailTest.php0000644000175000007640000003763712243576212020715 0ustar slusarzslusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ /** * @author Michael Slusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_MailTest extends PHPUnit_Framework_TestCase { static public function setUpBeforeClass() { $_SERVER['SERVER_NAME'] = 'mail.example.com'; setlocale(LC_ALL, 'C'); } static public 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->getPart($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); } } Horde_Mime-2.2.8/test/Horde/Mime/MimeTest.php0000644000175000007640000001027512243576212020707 0ustar slusarzslusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ /** * @author Michael Slusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_MimeTest extends PHPUnit_Framework_TestCase { public function setUp() { Horde_Mime::$brokenRFC2231 = false; } public function testUudecode() { $data = Horde_Mime::uudecode(file_get_contents(__DIR__ . '/fixtures/uudecode.txt')); $this->assertEquals( 2, count($data) ); $this->assertArrayHasKey('data', $data[0]); $this->assertEquals( 'Test string', $data[0]['data'] ); $this->assertArrayHasKey('name', $data[0]); $this->assertEquals( 'test.txt', $data[0]['name'] ); $this->assertArrayHasKey('perm', $data[0]); $this->assertEquals( '644', $data[0]['perm'] ); $this->assertArrayHasKey('data', $data[1]); $this->assertEquals( '2nd string', $data[1]['data'] ); $this->assertArrayHasKey('name', $data[1]); $this->assertEquals( 'test2.txt', $data[1]['name'] ); $this->assertArrayHasKey('perm', $data[1]); $this->assertEquals( '755', $data[1]['perm'] ); } public function testRfc2231() { // Horde_Mime RFC 2231 & workaround for broken MUA's $pname = 'test'; $str = str_repeat('a', 100) . '.txt'; $expected = array( 'test' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt', 'test*0' =>'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'test*1' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt' ); Horde_Mime::$brokenRFC2231 = true; $this->assertEquals(Horde_Mime::encodeParam($pname, $str), $expected); Horde_Mime::$brokenRFC2231 = false; unset($expected['test']); $this->assertEquals(Horde_Mime::encodeParam($pname, $str), $expected); } public function testDecode() { $this->assertEquals( ' François Xavier. XXXXXX ', Horde_Mime::decode('=?utf-8?Q?_Fran=C3=A7ois_Xavier=2E_XXXXXX_?= ') ); /* Not MIME encoded. */ $this->assertEquals( '=? required=?', Horde_Mime::decode('=? required=?') ); } public function testIsChild() { $this->assertTrue(Horde_Mime::isChild('1', '1.0')); $this->assertTrue(Horde_Mime::isChild('1', '1.1')); $this->assertTrue(Horde_Mime::isChild('1', '1.1.0')); $this->assertFalse(Horde_Mime::isChild('1', '1')); $this->assertFalse(Horde_Mime::isChild('1', '2.1')); $this->assertFalse(Horde_Mime::isChild('1', '10.0')); } public function testEncodeParamQuotesQuote() { $this->assertEquals( array('foo' => "\"\x01\""), Horde_Mime::encodeParam('foo', "\x01") ); } public function testBug12127() { Horde_Mime::$brokenRFC2231 = true; $this->assertEquals( array( 'foo' => 'test' ), Horde_Mime::encodeParam('foo', 'test', array( 'charset' => 'UTF-16LE' )) ); $this->assertEquals( array( 'foo*' => "utf-16le''%01%01", 'foo' => '"=?utf-16le?b?AQE=?="' ), Horde_Mime::encodeParam('foo', 'ā', array( 'charset' => 'UTF-16LE' )) ); } public function testNullCharacterInEncodeOutput() { $this->assertEquals( '=?utf-16le?b?AAA=?=', Horde_Mime::encode("\x00", 'UTF-16LE') ); } } Horde_Mime-2.2.8/test/Horde/Mime/PartTest.php0000644000175000007640000002377012243576212020732 0ustar slusarzslusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ /** * @author Michael Slusarz * @category Horde * @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->getPart(1); $this->assertEquals( 'text/plain', $part_1->getType() ); $this->assertEquals( 'flowed', $part_1->getContentTypeParameter('format') ); $part_2 = $part->getPart(2); $this->assertEquals( 'message/rfc822', $part_2->getType() ); $part_2_2 = $part->getPart('2.2'); $this->assertEquals( 'text/plain', $part_2_2->getType() ); $this->assertEquals( 'test.txt', $part_2_2->getDispositionParameter('filename') ); $part_3 = $part->getPart(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()); $part_one = $test_part->getPart(1); $this->assertEquals('', $test_part->getPart(1)->getDisposition()); } public function testAddingSizeToContentDisposition() { $part = new Horde_Mime_Part(); $part->setType('text/plain'); $part->setContents('123'); $part->setBytes(3); $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( $part->getPart('1'), $part['1'] ); $this->assertSame( $part->getPart('3.1'), $part['3.1'] ); $part2 = new Horde_Mime_Part(); $part2->setType('text/plain'); $part['2'] = $part2; $this->assertSame( $part2, $part->getPart('2') ); unset($part['3']); $this->assertEquals( null, $part->getPart('3') ); } public function testCountableImplementation() { $part = $this->_getTestPart(); $this->assertEquals( 3, count($part) ); } 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->alterPart('2', $part2); $map = $part->contentTypeMap(); $this->assertEquals( 'text/plain', $map['2'] ); } public function testUnserialize() { $part = new Horde_Mime_Part(); $part->setType('text/plain'); $part->setContents('Test'); $part1 = unserialize(serialize($part)); $this->assertEquals( 'Test', $part1->getContents() ); $this->assertInternalType( 'resource', $part1->getContents(array('stream' => true)) ); $this->assertEquals( 'Test', $part->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->addPart($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->getPart('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->addPart($new_part); $part = $new_part; } // Part #102 $new_part = new Horde_Mime_Part(); $new_part->setType('text/plain'); $new_part->setContents('Test'); $part->addPart($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') ); $part_1 = $part->getPart(1); $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->assertNotEmpty($part->getPart(0)); $this->assertEmpty($part->getPart(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'])); } 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->addPart($part1); $part2 = new Horde_Mime_Part(); $part2->setType('application/octet-stream'); $part->addPart($part2); $part3 = new Horde_Mime_Part(); $part3->setType('multipart/mixed'); $part->addPart($part3); $part3_1 = new Horde_Mime_Part(); $part3_1->setType('text/plain'); $part3_1->setContents('Test 2'); $part3->addPart($part3_1); $part->buildMimeIds(); return $part; } } Horde_Mime-2.2.8/test/Horde/Mime/phpunit.xml0000644000175000007640000000005612243576212020654 0ustar slusarzslusarz Horde_Mime-2.2.8/test/Horde/Mime/RelatedTest.php0000644000175000007640000000370212243576212021375 0ustar slusarzslusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ /** * @author Michael Slusarz * @category Horde * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 * @package Mime * @subpackage UnitTests */ class Horde_Mime_RelatedTest extends PHPUnit_Framework_TestCase { private $_part; private $_relatedOb; public function setUp() { $this->_part = Horde_Mime_Part::parseMessage(file_get_contents(__DIR__ . '/fixtures/related_msg.txt')); $this->_relatedOb = new Horde_Mime_Related($this->_part); } public function tearDown() { unset($this->_part, $this->_relatedOb); } public function testStart() { $this->assertEquals( 1, $this->_relatedOb->startId() ); } public function testSearch() { $this->assertEquals( 3, $this->_relatedOb->cidSearch('789') ); } public function testIterator() { $this->assertEquals( array('2' => '456', '3' => '789'), iterator_to_array($this->_relatedOb) ); } public function testReplace() { $ob = $this->_relatedOb->cidReplace( $this->_part->getPart('1')->getContents(), array($this, 'callbackTestReplace') ); $expected = <<
Foo.
EOT; $this->assertEquals( $expected, $ob->returnHtml() ); } public function callbackTestReplace($id) { return $id; } }