# 19.3. `mailcap` - Mailcap文件处理

源代码： Lib / mailcap.py

Mailcap文件用于配置MIME感知应用程序（如邮件阅读器和Web浏览器）对具有不同MIME类型的文件的反应。（名称“mailcap”源自短语“邮件功能”。）例如，mailcap文件可能包含像`video / mpeg； xmpeg ％s`的行。然后，如果用户遇到MIME类型为video / mpeg的电子邮件或Web文档，则`%s`将替换为文件名（通常属于临时文件）和xmpeg程序可以自动启动以查看文件。

mailcap格式记录在 RFC 1524“用于多媒体邮件格式信息的用户代理配置机制”中，但不是Internet标准。但是，大多数Unix系统都支持mailcap文件。

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

  返回一个2元组；第一个元素是包含要执行的命令行的字符串（可以传递到`os.system()`），第二个元素是给定MIME类型的mailcap条目。如果未找到匹配的MIME类型，则返回`（无， 无）`。

  键是所需字段的名称，表示要执行的活动类型；默认值是'view'，因为在最常见的情况下，你只需要查看MIME类型数据的主体。如果要创建给定MIME类型的新实体或更改现有实体数据，其他可能的值可能是“compose”和“edit”。有关这些字段的完整列表，请参见 RFC 1524。

  filename是要替换命令行中`%s`的文件名；默认值是`'/dev/null'`，这几乎肯定不是你想要的，所以通常你会通过指定一个文件名来覆盖它。

  plist可以是包含命名参数的列表；默认值只是一个空列表。列表中的每个条目必须是包含参数名称，等号（`'='`）和参数值的字符串。Mailcap条目可以包含诸如`%{foo}`的命名参数，它将被名为“foo”的参数的值替换。For example, if the command line `showpartial %{id} %{number} %{total}` was in a mailcap file, and plist was set to `['id=1', 'number=2', 'total=3']`, the resulting command line would be `'showpartial 1 2 3'`.

  在mailcap文件中，可以可选地指定“测试”字段以测试某些外部条件（例如机器架构或正在使用的窗口系统），以确定是否应用邮件帽线。`findmatch()`将自动检查这些条件，如果检查失败，则跳过该条目。

`mailcap.``getcaps`()

  返回将MIME类型映射到mailcap文件条目列表的字典。此字典必须传递到`findmatch()`函数。条目存储为字典列表，但不必知道该表示的细节。

  该信息衍生自系统上找到的所有mailcap文件。Settings in the user’s mailcap file `$HOME/.mailcap` will override settings in the system mailcap files `/etc/mailcap`, `/usr/etc/mailcap`, and `/usr/local/etc/mailcap`.

示例用法：

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