
``mimetools`` --- Tools for parsing MIME messages
*************************************************

Deprecated since version 2.3: The ``email`` package should be used in
preference to the ``mimetools`` module.  This module is present only
to maintain backward compatibility, and it has been removed in 3.x.

This module defines a subclass of the ``rfc822`` module's ``Message``
class and a number of utility functions that are useful for the
manipulation for MIME multipart or encoded message.

It defines the following items:

class class mimetools.Message(fp[, seekable])

   Return a new instance of the ``Message`` class.  This is a subclass
   of the ``rfc822.Message`` class, with some additional methods (see
   below).  The *seekable* argument has the same meaning as for
   ``rfc822.Message``.

mimetools.choose_boundary()

   Return a unique string that has a high likelihood of being usable
   as a part boundary.  The string has the form
   ``'hostipaddr.uid.pid.timestamp.random'``.

mimetools.decode(input, output, encoding)

   Read data encoded using the allowed MIME *encoding* from open file
   object *input* and write the decoded data to open file object
   *output*.  Valid values for *encoding* include ``'base64'``,
   ``'quoted-printable'``, ``'uuencode'``, ``'x-uuencode'``,
   ``'uue'``, ``'x-uue'``, ``'7bit'``, and  ``'8bit'``.  Decoding
   messages encoded in ``'7bit'`` or ``'8bit'`` has no effect.  The
   input is simply copied to the output.

mimetools.encode(input, output, encoding)

   Read data from open file object *input* and write it encoded using
   the allowed MIME *encoding* to open file object *output*. Valid
   values for *encoding* are the same as for ``decode()``.

mimetools.copyliteral(input, output)

   Read lines from open file *input* until EOF and write them to open
   file *output*.

mimetools.copybinary(input, output)

   Read blocks until EOF from open file *input* and write them to open
   file *output*.  The block size is currently fixed at 8192.

See also:

   Module ``email``
      Comprehensive email handling package; supersedes the
      ``mimetools`` module.

   Module ``rfc822``
      Provides the base class for ``mimetools.Message``.

   Module ``multifile``
      Support for reading files which contain distinct parts, such as
      MIME data.

   http://faqs.cs.uu.nl/na-dir/mail/mime-faq/.html
      The MIME Frequently Asked Questions document.  For an overview
      of MIME, see the answer to question 1.1 in Part 1 of this
      document.


Additional Methods of Message Objects
=====================================

The ``Message`` class defines the following methods in addition to the
``rfc822.Message`` methods:

Message.getplist()

   Return the parameter list of the *Content-Type* header. This is a
   list of strings.  For parameters of the form ``key=value``, *key*
   is converted to lower case but *value* is not.  For example, if the
   message contains the header ``Content-type: text/html; spam=1;
   Spam=2; Spam`` then ``getplist()`` will return the Python list
   ``['spam=1', 'spam=2', 'Spam']``.

Message.getparam(name)

   Return the *value* of the first parameter (as returned by
   ``getplist()``) of the form ``name=value`` for the given *name*.
   If *value* is surrounded by quotes of the form '``<``...``>``' or
   '``"``...``"``', these are removed.

Message.getencoding()

   Return the encoding specified in the *Content-Transfer-Encoding*
   message header.  If no such header exists, return ``'7bit'``.  The
   encoding is converted to lower case.

Message.gettype()

   Return the message type (of the form ``type/subtype``) as specified
   in the *Content-Type* header.  If no such header exists, return
   ``'text/plain'``.  The type is converted to lower case.

Message.getmaintype()

   Return the main type as specified in the *Content-Type* header.  If
   no such header exists, return ``'text'``.  The main type is
   converted to lower case.

Message.getsubtype()

   Return the subtype as specified in the *Content-Type* header.  If
   no such header exists, return ``'plain'``.  The subtype is
   converted to lower case.
