# 18.6. `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 `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.

## 18.6.1. 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.