\section{Standard Module \sectcode{mailcap}}
\stmodindex{mailcap}
\renewcommand{\indexsubitem}{(in module mailcap)}

Mailcap files are used to configure how MIME-aware applications such
as mail readers and Web browsers react to files with different MIME
types. (The name ``mailcap'' is derived from the phrase ``mail
capability''.)  For example, a mailcap file might contain a line like
\verb\video/mpeg; xmpeg %s\.  Then, if the user encounters an email
message or Web document with the MIME type video/mpeg, \verb\%s\ will be
replaced by a filename (usually one belonging to a temporary file) and
the xmpeg program can be automatically started to view the file.

The mailcap format is documented in RFC 1524, ``A User Agent
Configuration Mechanism For Multimedia Mail Format Information'', but
is not an Internet standard.  However, mailcap files are supported on
most Unix systems.

\begin{funcdesc}{findmatch}{caps\, MIMEtype\, key\, filename\, plist}
Return a 2-tuple; the first element is a string containing the command
line to be executed
(which can be passed to \code{os.system()}), and the second element is
the mailcap entry for a given MIME type.  If no matching MIME
type can be found, \code{(None, None)} is returned.

\var{key} is the name of the field desired, which represents the type of
activity to be performed; the default value is 'view', since in the
most common case you simply want to view the body of the MIME-typed
data.  Other possible values might be 'compose' and 'edit', if you
wanted to create a new body of the given MIME type or alter the
existing body data.  See RFC1524 for a complete list of these fields.

\var{filename} is the filename to be substituted for \%s in the
command line; the default value is
\file{/dev/null} which is almost certainly not what you want, so
usually you'll override it by specifying a filename.

\var{plist} can be a list containing named parameters; the default
value is simply an empty list.  Each entry in the list must be a
string containing the parameter name, an equals sign (=), and the
parameter's value.  Mailcap entries can contain 
named parameters like \verb\%{foo}\, which will be replaced by the
value of the parameter named 'foo'.  For example, if the command line
\verb\showpartial %{id} %{number} %{total}\
was in a mailcap file, and \var{plist} was set to \code{['id=1',
'number=2', 'total=3']}, the resulting command line would be 
\code{"showpartial 1 2 3"}.  

In a mailcap file, the "test" field can optionally be specified to
test some external condition (e.g., the machine architecture, or the
window system in use) to determine whether or not the mailcap line
applies.  \code{findmatch()} will automatically check such conditions
and skip the entry if the check fails.
\end{funcdesc}

\begin{funcdesc}{getcaps}{}
Returns a dictionary mapping MIME types to a list of mailcap file
entries. This dictionary must be passed to the \code{findmatch}
function.  An entry is stored as a list of dictionaries, but it
shouldn't be necessary to know the details of this representation.

The information is derived from all of the mailcap files found on the
system. Settings in the user's mailcap file \file{\$HOME/.mailcap}
will override settings in the system mailcap files
\file{/etc/mailcap}, \file{/usr/etc/mailcap}, and
\file{/usr/local/etc/mailcap}.
\end{funcdesc}

An example usage:
\begin{verbatim}
>>> import mailcap
>>> d=mailcap.getcaps()
>>> mailcap.findmatch(d, 'video/mpeg', filename='/tmp/tmp1223')
('xmpeg /tmp/tmp1223', {'view': 'xmpeg %s'})
\end{verbatim}
