summaryrefslogtreecommitdiffstats
path: root/Doc/lib/emailparser.tex
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2001-09-26 05:23:47 (GMT)
committerBarry Warsaw <barry@python.org>2001-09-26 05:23:47 (GMT)
commit5e634638e623e25aeb84d82e0b89891173a0a5f7 (patch)
tree2a67012e75126ff5a81772caf32fbb1a78b29620 /Doc/lib/emailparser.tex
parent26991a7f77b43cbc529f4304c1702737b2999174 (diff)
downloadcpython-5e634638e623e25aeb84d82e0b89891173a0a5f7.zip
cpython-5e634638e623e25aeb84d82e0b89891173a0a5f7.tar.gz
cpython-5e634638e623e25aeb84d82e0b89891173a0a5f7.tar.bz2
The email package documentation, currently organized the way I think
Fred prefers. I'm not sure I like this organization, so it may change.
Diffstat (limited to 'Doc/lib/emailparser.tex')
-rw-r--r--Doc/lib/emailparser.tex96
1 files changed, 96 insertions, 0 deletions
diff --git a/Doc/lib/emailparser.tex b/Doc/lib/emailparser.tex
new file mode 100644
index 0000000..c96c3b3
--- /dev/null
+++ b/Doc/lib/emailparser.tex
@@ -0,0 +1,96 @@
+\section{\module{email.Parser} ---
+ Parsing flat text email messages}
+
+\declaremodule{standard}{email.Parser}
+\modulesynopsis{Parse flat text email messages to produce a message
+ object tree.}
+\sectionauthor{Barry A. Warsaw}{barry@zope.com}
+
+\versionadded{2.2}
+
+The \module{Parser} module provides a single class, the \class{Parser}
+class, which is used to take a message in flat text form and create
+the associated object model. The resulting object tree can then be
+manipulated using the \class{Message} class interface as described in
+\refmodule{email.Message}, and turned over
+to a generator (as described in \refmodule{emamil.Generator}) to
+return the textual representation of the message. It is intended that
+the \class{Parser} to \class{Generator} path be idempotent if the
+object model isn't modified in between.
+
+\subsection{Parser class API}
+
+\begin{classdesc}{Parser}{\optional{_class}}
+The constructor for the \class{Parser} class takes a single optional
+argument \var{_class}. This must be callable factory (i.e. a function
+or a class), and it is used whenever a sub-message object needs to be
+created. It defaults to \class{Message} (see
+\refmodule{email.Message}). \var{_class} will be called with zero
+arguments.
+\end{classdesc}
+
+The other public \class{Parser} methods are:
+
+\begin{methoddesc}[Parser]{parse}{fp}
+Read all the data from the file-like object \var{fp}, parse the
+resulting text, and return the root message object. \var{fp} must
+support both the \method{readline()} and the \method{read()} methods
+on file-like objects.
+
+The text contained in \var{fp} must be formatted as a block of \rfc{2822}
+style headers and header continuation lines, optionally preceeded by a
+\emph{Unix-From} header. The header block is terminated either by the
+end of the data or by a blank line. Following the header block is the
+body of the message (which may contain MIME-encoded subparts).
+\end{methoddesc}
+
+\begin{methoddesc}[Parser]{parsestr}{text}
+Similar to the \method{parse()} method, except it takes a string
+object instead of a file-like object. Calling this method on a string
+is exactly equivalent to wrapping \var{text} in a \class{StringIO}
+instance first and calling \method{parse()}.
+\end{methoddesc}
+
+Since creating a message object tree from a string or a file object is
+such a common task, two functions are provided as a convenience. They
+are available in the top-level \module{email} package namespace.
+
+\begin{funcdesc}{message_from_string}{s\optional{, _class}}
+Return a message object tree from a string. This is exactly
+equivalent to \code{Parser().parsestr(s)}. Optional \var{_class} is
+interpreted as with the \class{Parser} class constructor.
+\end{funcdesc}
+
+\begin{funcdesc}{message_from_file}{fp\optional{, _class}}
+Return a message object tree from an open file object. This is exactly
+equivalent to \code{Parser().parse(fp)}. Optional \var{_class} is
+interpreted as with the \class{Parser} class constructor.
+\end{funcdesc}
+
+Here's an example of how you might use this at an interactive Python
+prompt:
+
+\begin{verbatim}
+>>> import email
+>>> msg = email.message_from_string(myString)
+\end{verbatim}
+
+\subsection{Additional notes}
+
+Here are some notes on the parsing semantics:
+
+\begin{itemize}
+\item Most non-\code{multipart} type messages are parsed as a single
+ message object with a string payload. These objects will return
+ 0 for \method{is_multipart()}.
+\item One exception is for \code{message/delivery-status} type
+ messages. Because such the body of such messages consist of
+ blocks of headers, \class{Parser} will create a non-multipart
+ object containing non-multipart subobjects for each header
+ block.
+\item Another exception is for \code{message/*} types (i.e. more
+ general than \code{message/delivery-status}. These are
+ typically \code{message/rfc822} type messages, represented as a
+ non-multipart object containing a singleton payload, another
+ non-multipart \class{Message} instance.
+\end{itemize}