mailcap --- Mailcap 文件处�¶

�代�: Lib/mailcap.py

从 3.11 版起�建议使用,将在 3.13 版中移除: mailcap 模�已被弃用(请�阅 PEP 594 了解详情)。 mimetypes 模��供了一个替代�。


Mailcap 文件�用��置支� MIME 的应用程�例如邮件阅读器和 Web �览器如何�应具有�� MIME 类型的文件。 ("mailcap" 这个�称�自短语 "mail capability"。) 例如,一个 mailcap 文件�能包� video/mpeg; xmpeg %s 这样的行。 然�,如果用户�到 MIME 类型为 video/mpeg 的邮件消�或 Web 文档时,%s 将被替�为一个文件� (通常属于临时文件) 并且会自动�动 xmpeg 程��查看该文件。

mailcap 格�的说明文档� RFC 1524, "A User Agent Configuration Mechanism For Multimedia Mail Format Information",但它并�是一个互�网标准。 �过,mailcap 文件在大多数 Unix 系统上都�到支�。

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

返回一个 2 元组;其中第一个元素是包�所�执行命令的字符串 (它�被传递给 os.system()),第二个元素是对应于给定 MIME 类型的 mailcap �目。 如果找�到匹�的 MIME 类型,则将返回 (None, None)。

key 是所需字段的�称,它代表�执行的活动类型;默认值是 'view',因为在最通常的情况下你�是想�查看 MIME 类型数�的正文。 其他�能的值还有 'compose' 和 'edit',分别用于想�创建给定 MIME 类型正文或修改现有正文数�的情况。 请�阅 RFC 1524 获�这些字段的完整列表。

filename 是在命令行中用�替� %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 版本�生�更: 为了防止使用 shell 元字符(在 shell 命令行中具有特殊效果的符�)的安全问题,findmatch 会拒�把字�数字和 @+=:,./-_ 以外的 ASCII 字符注入被返回的命令行。

如果有�被�许的字符出现在 filename 中,findmatch 将总是返回 (None, None) 就如�未找到任何�目一样。 如果这样的字符出现在其他地方(在 plist 或 MIMEtype 中的值,findmatch 将忽略所有使用这些值的 mailcap �目。 在两�情况下都将引� 警告。

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'})