Skip to main content

A patched mailcap module that conforms to RFC 1524

Project description

Latest Version Supported Python versions Build

A fix has now been merged into Python 3.6.0.
This package remains as a backport for previous versions.


This package patches the python standard library’s mailcap module in order to correctly handle windcard entries.

The bug is documented on the bug tracker here: issue 14977


$ pip install mailcap-fix


Consider a mailcap file that contains the following two lines

image/*; feh %s
image/jpeg; eog %s

Because the image/* entry is defined first, it should take precedence over the image/jpeg entry when searching for a match. This behavior is defined by RFC 1524. However, the standard library’s implementation will always evaluate wildcard entries last.


>>> import mailcap
>>> d = mailcap.getcaps()
>>> # Incorrectly returns the second entry
>>> mailcap.findmatch(d, 'image/jpeg', filename='test.jpg')
('eog test.jpg', {'view': 'eog %s'})


>>> from mailcap_fix import mailcap
>>> d = mailcap.getcaps()
>>> # Correctly returns the wildcard entry
>>> mailcap.findmatch(d, 'image/jpeg', filename='test.jpg')
('feh test.jpg', {'view': 'feh %s', 'lineno': 0})

How it works

The goal of this patch is to conform to RFCC 1524, while preserving as much backwards compatibility as possible and without adding any “magic”.

mailcap_fix adds a new field lineno to each entry in the mailcap dict. This line number is then used to sort entries in descending order when searching for a match. For backwards compatability, if lineno is not present entries will simply not be sorted. Because RFC 1524 defines a whitelist of valid mailcap fieldnames, the addition of lineno should not conflict with any other mailcap fields.


Python 3.4.0
Ubuntu 14.04 LTS 64bit
Intel® Core™ i5-3210M CPU @ 2.50GHz × 4

mailcap.get_caps() - per file
  mailcap mailcap_fix
mailcap_short.txt 0.081881 ms 0.084525 ms
mailcap_long.txt 17.746289 ms 18.407623 ms
mailcap.lookup() - avg function call
  mailcap mailcap_fix
mailcap_short.txt 0.000996 ms 0.003144 ms
mailcap_long.txt 0.000798 ms 0.002731 ms

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for mailcap-fix, version 1.0.1
Filename, size File type Python version Upload date Hashes
Filename, size mailcap_fix-1.0.1-py2.py3-none-any.whl (10.4 kB) File type Wheel Python version py2.py3 Upload date Hashes View
Filename, size mailcap-fix-1.0.1.tar.gz (6.3 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page