\section{Standard Module \sectcode{mimify}}
\label{module-mimify}
\stmodindex{mimify}
\setindexsubitem{(in module mimify)}

The mimify module defines two functions to convert mail messages to
and from MIME format.  The mail message can be either a simple message
or a so-called multipart message.  Each part is treated separately.
Mimifying (a part of) a message entails encoding the message as
quoted-printable if it contains any characters that cannot be
represented using 7-bit ASCII.  Unmimifying (a part of) a message
entails undoing the quoted-printable encoding.  Mimify and unmimify
are especially useful when a message has to be edited before being
sent.  Typical use would be:

\begin{verbatim}
unmimify message
edit message
mimify message
send message
\end{verbatim}

The modules defines the following user-callable functions and
user-settable variables:

\begin{funcdesc}{mimify}{infile, outfile}
Copy the message in \var{infile} to \var{outfile}, converting parts to
quoted-printable and adding MIME mail headers when necessary.
\var{infile} and \var{outfile} can be file objects (actually, any
object that has a \code{readline} method (for \var{infile}) or a
\code{write} method (for \var{outfile})) or strings naming the files.
If \var{infile} and \var{outfile} are both strings, they may have the
same value.
\end{funcdesc}

\begin{funcdesc}{unmimify}{infile, outfile, decode_base64 = 0} 
Copy the message in \var{infile} to \var{outfile}, decoding all
quoted-printable parts.  \var{infile} and \var{outfile} can be file
objects (actually, any object that has a \code{readline} method (for
\var{infile}) or a \code{write} method (for \var{outfile})) or strings
naming the files.  If \var{infile} and \var{outfile} are both strings,
they may have the same value.
If the \var{decode_base64} argument is provided and tests true, any
parts that are coded in the base64 encoding are decoded as well.
\end{funcdesc}

\begin{funcdesc}{mime_decode_header}{line}
Return a decoded version of the encoded header line in \var{line}.
\end{funcdesc}

\begin{funcdesc}{mime_encode_header}{line}
Return a MIME-encoded version of the header line in \var{line}.
\end{funcdesc}

\begin{datadesc}{MAXLEN}
By default, a part will be encoded as quoted-printable when it
contains any non-ASCII characters (i.e., characters with the 8th bit
set), or if there are any lines longer than \code{MAXLEN} characters
(default value 200).  
\end{datadesc}

\begin{datadesc}{CHARSET}
When not specified in the mail headers, a character set must be filled
in.  The string used is stored in \code{CHARSET}, and the default
value is ISO-8859-1 (also known as Latin1 (latin-one)).
\end{datadesc}

This module can also be used from the command line.  Usage is as
follows:
\begin{verbatim}
mimify.py -e [-l length] [infile [outfile]]
mimify.py -d [-b] [infile [outfile]]
\end{verbatim}
to encode (mimify) and decode (unmimify) respectively.  \var{infile}
defaults to standard input, \var{outfile} defaults to standard output.
The same file can be specified for input and output.

If the \code{-l} option is given when encoding, if there are any lines
longer than the specified \var{length}, the containing part will be
encoded.

If the \code{-b} option is given when decoding, any base64 parts will
be decoded as well.

