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

---

# 18.3. [`mailcap`](https://python-all.ru/2.7/library/mailcap.html#module-mailcap) – Обработка файлов Mailcap

**Исходный код:** [Lib/mailcap.py](https://python-all.ru/src/2.7/Lib/mailcap.py)

---

Файлы mailcap используются для настройки реакции приложений, поддерживающих MIME, таких как почтовые клиенты и веб-браузеры, на файлы с различными MIME-типами. (Название «mailcap» происходит от фразы «mail capability».) Например, файл mailcap может содержать строку вида `video/mpeg; xmpeg %s`. Тогда, если пользователь встретит электронное письмо или веб-документ с MIME-типом *video/mpeg*, `%s` будет заменён на имя файла (обычно временного), и программа **xmpeg** может быть автоматически запущена для просмотра файла.

Формат mailcap описан в [**RFC 1524**](https://python-all.ru/2.7/library/mailcap.html), «A User Agent Configuration Mechanism For Multimedia Mail Format Information», но не является интернет-стандартом. Однако файлы mailcap поддерживаются в большинстве систем Unix.

#### `mailcap.findmatch(caps, MIMEtype[, key[, filename[, plist]]])`

Возвращает кортеж из двух элементов; первый элемент – строка, содержащая команду для выполнения (которую можно передать в [`os.system()`](https://python-all.ru/2.7/library/os.html#os.system)), а второй элемент – запись mailcap для заданного MIME-типа. Если подходящий MIME-тип не найден, возвращается `(None, None)`.

*key* – имя требуемого поля, которое представляет тип выполняемого действия; значение по умолчанию – ‘view’, поскольку в наиболее типичном случае требуется просто просмотреть содержимое данных указанного MIME-типа. Другими возможными значениями могут быть ‘compose’ и ‘edit’, если требуется создать новое содержимое указанного MIME-типа или изменить существующее. Полный список этих полей приведён в [**RFC 1524**](https://python-all.ru/2.7/library/mailcap.html).

*filename* – имя файла, которое подставляется вместо `%s` в командной строке; значение по умолчанию – `'/dev/null'`, что почти наверняка не то, что нужно, поэтому обычно его переопределяют, указывая имя файла.

*plist* может быть списком именованных параметров; значение по умолчанию – просто пустой список. Каждый элемент списка должен быть строкой, содержащей имя параметра, знак равенства (`'='`) и значение параметра. Записи mailcap могут содержать именованные параметры, такие как `%{foo}`, которые заменяются на значение параметра с именем ‘foo’. Например, если в файле mailcap есть командная строка `showpartial %{id} %{number} %{total}`, а *plist* установлен в `['id=1', 'number=2', 'total=3']`, то результирующая командная строка будет `'showpartial 1 2 3'`.

В файле mailcap можно дополнительно указать поле “test” для проверки некоторых внешних условий (например, архитектуры машины или используемой оконной системы), чтобы определить, применима ли данная строка mailcap. [`findmatch()`](https://python-all.ru/2.7/library/mailcap.html#mailcap.findmatch) автоматически проверяет такие условия и пропускает запись, если проверка не пройдена.

#### `mailcap.getcaps()`

Возвращает словарь, сопоставляющий MIME-типы со списком записей файла mailcap. Этот словарь должен быть передан функции [`findmatch()`](https://python-all.ru/2.7/library/mailcap.html#mailcap.findmatch). Запись хранится в виде списка словарей, но знать подробности этого представления не обязательно.

Информация извлекается из всех файлов mailcap, найденных в системе. Настройки в файле mailcap пользователя `$HOME/.mailcap` переопределяют настройки в системных файлах mailcap `/etc/mailcap`, `/usr/etc/mailcap` и `/usr/local/etc/mailcap`.

Пример использования:

```python
>>> import mailcap
>>> d = mailcap.getcaps()
>>> mailcap.findmatch(d, 'video/mpeg', filename='tmp1223')
('xmpeg tmp1223', {'view': 'xmpeg %s'})
```
