mailcap --- Mailcap 文件處理?

源代碼: Lib/mailcap.py

Deprecated since version 3.11, will be removed in version 3.13: The mailcap module is deprecated (see PEP 594 for details). The mimetypes module provides an alternative.


Mailcap 文件可用來配置支持 MIME 的應(yīng)用程序例如郵件閱讀器和 Web 瀏覽器如何響應(yīng)具有不同 MIME 類型的文件。 ("mailcap" 這個(gè)名稱源自短語 "mail capability"。) 例如,一個(gè) mailcap 文件可能包含 video/mpeg; xmpeg %s 這樣的行。 然后,如果用戶遇到 MIME 類型為 video/mpeg 的郵件消息或 Web 文檔時(shí),%s 將被替換為一個(gè)文件名 (通常屬于臨時(shí)文件) 并且會(huì)自動(dòng)啟動(dòng) xmpeg 程序來查看該文件。

mailcap 格式的說明文檔見 RFC 1524, "A User Agent Configuration Mechanism For Multimedia Mail Format Information",但它并不是一個(gè)互聯(lián)網(wǎng)標(biāo)準(zhǔn)。 不過,mailcap 文件在大多數(shù) Unix 系統(tǒng)上都受到支持。

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

返回一個(gè) 2 元組;其中第一個(gè)元素是包含所要執(zhí)行命令的字符串 (它可被傳遞給 os.system()),第二個(gè)元素是對(duì)應(yīng)于給定 MIME 類型的 mailcap 條目。 如果找不到匹配的 MIME 類型,則將返回 (None, None)。

key 是所需字段的名稱,它代表要執(zhí)行的活動(dòng)類型;默認(rèn)值是 'view',因?yàn)樵谧钔ǔ5那闆r下你只是想要查看 MIME 類型數(shù)據(jù)的正文。 其他可能的值還有 'compose' 和 'edit',分別用于想要?jiǎng)?chuàng)建給定 MIME 類型正文或修改現(xiàn)有正文數(shù)據(jù)的情況。 請(qǐng)參閱 RFC 1524 獲取這些字段的完整列表。

filename 是在命令行中用來替換 %s 的文件名;默認(rèn)值 '/dev/null' 幾乎肯定不是你想要的,因此通常你要通過指定一個(gè)文件名來重載它。

plist 可以是一個(gè)包含命名形參的列表;默認(rèn)值只是一個(gè)空列表。 列表中的每個(gè)條目必須為包含形參名稱的字符串、等于號(hào) ('=') 以及形參的值。 Mailcap 條目可以包含形如 %{foo} 的命名形參,它將由名為 'foo' 的形參的值所替換。 例如,如果命令行 showpartial %{id} %{number} %{total} 是在一個(gè) mailcap 文件中,并且 plist 被設(shè)為 ['id=1', 'number=2', 'total=3'],則結(jié)果命令行將為 'showpartial 1 2 3'。

在 mailcap 文件中,可以指定可選的 "test" 字段來檢測(cè)某些外部條件(例如所使用的機(jī)器架構(gòu)或窗口系統(tǒng))來確定是否要應(yīng)用 mailcap 行。 findmatch() 將自動(dòng)檢查此類條件并在檢查未通過時(shí)跳過條目。

mailcap.getcaps()?

返回一個(gè)將 MIME 類型映射到 mailcap 文件條目列表的字典。 此字典必須被傳給 findmatch() 函數(shù)。 條目會(huì)被存儲(chǔ)為字典列表,但并不需要了解此表示形式的細(xì)節(jié)。

此信息來自在系統(tǒng)中找到的所有 mailcap 文件。 用戶的 mailcap 文件 $HOME/.mailcap 中的設(shè)置將覆蓋系統(tǒng) mailcap 文件 /etc/mailcap, /usr/etc/mailcap/usr/local/etc/mailcap 中的設(shè)置。

一個(gè)用法示例:

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