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

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

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


Файли Mailcap використовуються для налаштування того, як програми, що підтримують MIME, наприклад програми для читання пошти та веб-браузери, реагують на файли з різними типами MIME. (Назва «mailcap» походить від фрази «можливість пошти».) Наприклад, файл mailcap може містити рядок типу video/mpeg; xmpeg %s. Потім, якщо користувач зустріне повідомлення електронної пошти або веб-документ із типом MIME video/mpeg, %s буде замінено назвою файлу (зазвичай тим, що належить до тимчасового файлу) і :program: Для перегляду файлу можна автоматично запустити програму xmpeg.

Формат mailcap задокументовано в RFC 1524, «Механізм конфігурації агента користувача для інформації про формат мультимедійної пошти», але не є стандартом Інтернету. Однак файли mailcap підтримуються в більшості систем Unix.

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.11: 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'})