mailcap — Обробка файлів Mailcap

Вихідний код: Lib/mailcap.py

Застаріло починаючи з версії 3.11: Модуль mailcap є застарілим (докладніше див. PEP 594). Альтернативою є модуль mimetypes.


Mailcap files are used to configure how MIME-aware applications such as mail readers and Web browsers react to files with different MIME types. (The name «mailcap» is derived from the phrase «mail capability».) For example, a mailcap file might contain a line like video/mpeg; xmpeg %s. Then, if the user encounters an email message or Web document with the MIME type video/mpeg, %s will be replaced by a filename (usually one belonging to a temporary file) and the xmpeg program can be automatically started to view the file.

The mailcap format is documented in RFC 1524, «A User Agent Configuration Mechanism For Multimedia Mail Format Information», but is not an Internet standard. However, mailcap files are supported on most Unix systems.

mailcap.findmatch(caps, MIMEtype, key='view', filename='/dev/null', plist=[])

Повернути 2-кортеж; перший елемент — це рядок, що містить командний рядок, який потрібно виконати (який можна передати в os.system()), а другий елемент — це запис mailcap для певного типу MIME. Якщо не вдається знайти відповідний тип MIME, повертається (None, None).

key — ім’я потрібного поля, яке представляє вид діяльності, яку потрібно виконати; значенням за замовчуванням є „view“, оскільки в найбільш поширеному випадку ви просто бажаєте переглянути тіло даних типу MIME. Іншими можливими значеннями можуть бути «компонувати» та «редагувати», якщо ви бажаєте створити нове тіло заданого типу MIME або змінити існуючі дані тіла. Див. RFC 1524 для повного списку цих полів.

ім’я файлу – це ім’я файлу, яке буде замінено на %s у командному рядку; типовим значенням є '/dev/null, що майже напевно не те, що ви хочете, тому зазвичай ви змінюєте його, вказуючи назву файлу.

plist може бути списком, що містить іменовані параметри; стандартним значенням є просто порожній список. Кожен запис у списку має бути рядком, що містить назву параметра, знак рівності ('=') і значення параметра. Записи Mailcap можуть містити іменовані параметри, як-от %{foo}, які буде замінено значенням параметра під назвою «foo». Наприклад, якщо командний рядок showpartial %{id} %{number} %{total} був у файлі mailcap, а plist було встановлено на ['id=1', 'number=2 ', 'total=3'], результат командного рядка буде 'showpartial 1 2 3'.

У файлі mailcap можна додатково вказати поле «test» для перевірки деяких зовнішніх умов (таких як архітектура машини або використовувана віконна система), щоб визначити, чи застосовується рядок mailcap. findmatch() автоматично перевірить такі умови та пропустить запис, якщо перевірка не вдається.

Змінено в версії 3.9.16: To prevent security issues with shell metacharacters (symbols that have special effects in a shell command line), findmatch will refuse to inject ASCII characters other than alphanumerics and @+=:,./-_ into the returned command line.

If a disallowed character appears in filename, findmatch will always return (None, None) as if no entry was found. If such a character appears elsewhere (a value in plist or in MIMEtype), findmatch will ignore all mailcap entries which use that value. A warning will be raised in either case.

mailcap.getcaps()

Повертає словник, що зіставляє типи MIME зі списком записів у файлі mailcap. Цей словник необхідно передати у функцію findmatch(). Запис зберігається як список словників, але немає необхідності знати подробиці цього представлення.

Інформація отримана з усіх файлів mailcap, знайдених у системі. Параметри у файлі mailcap користувача $HOME/.mailcap замінять налаштування у системних файлах mailcap /etc/mailcap, /usr/etc/mailcap і /usr/local/etc/mailcap.

Приклад використання:

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