> **Источник:** https://python-all.ru/2.7/library/mimetools.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 18.6. [`mimetools`](https://python-all.ru/2.7/library/mimetools.html#module-mimetools) – Инструменты для разбора MIME-сообщений

Устарело с версии 2.3: Пакет [`email`](https://python-all.ru/2.7/library/email.html#module-email) следует использовать вместо модуля [`mimetools`](https://python-all.ru/2.7/library/mimetools.html#module-mimetools). Этот модуль присутствует только для поддержания обратной совместимости и был удалён в 3.x.

Этот модуль определяет подкласс класса [`Message`](https://python-all.ru/2.7/library/mimetools.html#mimetools.Message) модуля [`rfc822`](https://python-all.ru/2.7/library/rfc822.html#module-rfc822) и ряд служебных функций, полезных для работы с MIME-сообщениями, состоящими из нескольких частей или закодированными.

Определяются следующие элементы:

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

Возвращает новый экземпляр класса [`Message`](https://python-all.ru/2.7/library/mimetools.html#mimetools.Message). Это подкласс класса [`rfc822.Message`](https://python-all.ru/2.7/library/rfc822.html#rfc822.Message) с некоторыми дополнительными методами (см. ниже). Аргумент *seekable* имеет то же значение, что и для [`rfc822.Message`](https://python-all.ru/2.7/library/rfc822.html#rfc822.Message).

#### `mimetools.choose_boundary()`

Возвращает уникальную строку, которая с высокой вероятностью может быть использована в качестве границы части. Строка имеет вид `'hostipaddr.uid.pid.timestamp.random'`.

#### `mimetools.decode(input, output, encoding)`

Читает данные, закодированные с использованием разрешённой MIME-кодировки *encoding*, из открытого файлового объекта *input* и записывает декодированные данные в открытый файловый объект *output*. Допустимые значения для *encoding* включают `'base64'`, `'quoted-printable'`, `'uuencode'`, `'x-uuencode'`, `'uue'`, `'x-uue'`, `'7bit'` и `'8bit'`. Декодирование сообщений, закодированных в `'7bit'` или `'8bit'`, не даёт эффекта. Входные данные просто копируются в выходные.

#### `mimetools.encode(input, output, encoding)`

Читает данные из открытого файлового объекта *input* и записывает их, закодировав с использованием разрешённой MIME-кодировки *encoding*, в открытый файловый объект *output*. Допустимые значения для *encoding* такие же, как для [`decode()`](https://python-all.ru/2.7/library/mimetools.html#mimetools.decode).

#### `mimetools.copyliteral(input, output)`

Читает строки из открытого файла *input* до конца файла и записывает их в открытый файл *output*.

#### `mimetools.copybinary(input, output)`

Читает блоки до конца файла из открытого файла *input* и записывает их в открытый файл *output*. Размер блока в настоящее время фиксирован и равен 8192.

> **См. также**
>
> **Модуль [`email`](https://python-all.ru/2.7/library/email.html#module-email)**
>
> Комплексный пакет для работы с электронной почтой; заменяет модуль [`mimetools`](https://python-all.ru/2.7/library/mimetools.html#module-mimetools).
>
> **Модуль [`rfc822`](https://python-all.ru/2.7/library/rfc822.html#module-rfc822)**
>
> Предоставляет базовый класс для [`mimetools.Message`](https://python-all.ru/2.7/library/mimetools.html#mimetools.Message).
>
> **Модуль [`multifile`](https://python-all.ru/2.7/library/multifile.html#module-multifile)**
>
> Поддержка чтения файлов, содержащих отдельные части, например, MIME-данные.
>
> **[http://faqs.cs.uu.nl/na-dir/mail/mime-faq/.html](https://python-all.ru/2.7/library/mimetools.html)**
>
> Документ с часто задаваемыми вопросами по MIME. Обзор MIME см. в ответе на вопрос 1.1 в части 1 этого документа.

## 18.6.1. Дополнительные методы объектов Message

Класс [`Message`](https://python-all.ru/2.7/library/mimetools.html#mimetools.Message) определяет следующие методы в дополнение к методам [`rfc822.Message`](https://python-all.ru/2.7/library/rfc822.html#rfc822.Message):

#### `Message.getplist()`

Возвращает список параметров заголовка *Content-Type*. Это список строк. Для параметров вида `key=value`, *key* преобразуется в нижний регистр, а *value* – нет. Например, если сообщение содержит заголовок `Content-type: text/html; spam=1; Spam=2; Spam`, то [`getplist()`](https://python-all.ru/2.7/library/mimetools.html#mimetools.Message.getplist) вернёт список Python `['spam=1', 'spam=2', 'Spam']`.

#### `Message.getparam(name)`

Возвращает *value* первого параметра (возвращаемого функцией [`getplist()`](https://python-all.ru/2.7/library/mimetools.html#mimetools.Message.getplist)) вида `name=value` для заданного *name*. Если *value* окружён кавычками вида '`<`…`>`' или '`"`…`"`', они удаляются.

#### `Message.getencoding()`

Возвращает кодировку, указанную в заголовке сообщения *Content-Transfer-Encoding*. Если такого заголовка нет, возвращает `'7bit'`. Кодировка преобразуется в нижний регистр.

#### `Message.gettype()`

Возвращает тип сообщения (вида `type/subtype`), указанный в заголовке *Content-Type*. Если такого заголовка нет, возвращает `'text/plain'`. Тип преобразуется в нижний регистр.

#### `Message.getmaintype()`

Возвращает основной тип, указанный в заголовке *Content-Type*. Если такого заголовка нет, возвращает `'text'`. Основной тип преобразуется в нижний регистр.

#### `Message.getsubtype()`

Возвращает подтип, указанный в заголовке *Content-Type*. Если такого заголовка нет, возвращает `'plain'`. Подтип преобразуется в нижний регистр.
