\section{Standard Module \sectcode{mimify}}
\stmodindex{mimify}
\renewcommand{\indexsubitem}{(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.

