|
Message object structures can be created in one of two ways: they can be
created from whole cloth by instantiating Message objects and
stringing them together via attach() and
set_payload() calls, or they can be created by parsing a flat text
representation of the email message.
The email package provides a standard parser that understands
most email document structures, including MIME documents. You can
pass the parser a string or a file object, and the parser will return
to you the root Message instance of the object structure. For
simple, non-MIME messages the payload of this root object will likely
be a string containing the text of the message. For MIME
messages, the root object will return True from its
is_multipart() method, and the subparts can be accessed via
the get_payload() and walk() methods.
There are actually two parser interfaces available for use, the classic
Parser API and the incremental FeedParser API. The classic
Parser API is fine if you have the entire text of the message in
memory as a string, or if the entire message lives in a file on the file
system. FeedParser is more appropriate for when you're reading the
message from a stream which might block waiting for more input (e.g. reading
an email message from a socket). The FeedParser can consume and parse
the message incrementally, and only returns the root object when you close the
parser12.1.
Note that the parser can be extended in limited ways, and of course
you can implement your own parser completely from scratch. There is
no magical connection between the email package's bundled
parser and the Message class, so your custom parser can create
message object trees any way it finds necessary.
Footnotes
- ...
parser12.1
- As of email package version 3.0, introduced in
Python 2.4, the classic Parser was re-implemented in terms of the
FeedParser, so the semantics and results are identical between the two
parsers.
Release 2.4.5, documentation updated on 18 October 2006.
See About this document... for information on suggesting changes.
|