email.message.Message: Representing an email message using the compat32 API¶
The Message class is very similar to the
EmailMessage class, without the methods added by that
class, and with the default behavior of certain other methods being slightly
different. We also document here some methods that, while supported by the
EmailMessage class, are not recommended unless you are
dealing with legacy code.
The philosophy and structure of the two classes is otherwise the same.
This document describes the behavior under the default (for Message)
policy Compat32. If you are going to use another policy,
you should be using the EmailMessage class instead.
An email message consists of headers and a payload. Headers must be RFC 5322 style names and values, where the field name and value are separated by a colon. The colon is not part of either the field name or the field value. The payload may be a simple text message, or a binary object, or a structured sequence of sub-messages each with their own set of headers and their own payload. The latter type of payload is indicated by the message having a MIME type such as multipart/* or message/rfc822.
The conceptual model provided by a Message object is that of an
ordered dictionary of headers with additional methods for accessing both
specialized information from the headers, for accessing the payload, for
generating a serialized version of the message, and for recursively walking
over the object tree. Note that duplicate headers are supported but special
methods must be used to access them.
The Message pseudo-dictionary is indexed by the header names, which
must be ASCII values. The values of the dictionary are strings that are
supposed to contain only ASCII characters; there is some special handling for
non-ASCII input, but it doesn't always produce the correct results. Headers
are stored and returned in case-preserving form, but field names are matched
case-insensitively. There may also be a single envelope header, also known as
the Unix-From header or the From_ header. The payload is either a
string or bytes, in the case of simple message objects, or a list of
Message objects, for MIME container documents (e.g.
multipart/* and message/rfc822).
Here are the methods of the Message class:
- class email.message.Message(policy=compat32)¶
If policy is specified (it must be an instance of a
policyclass) use the rules it specifies to update and serialize the representation of the message. If policy is not set, use thecompat32policy, which maintains backward compatibility with the Python 3.2 version of the email package. For more information see thepolicydocumentation.在 3.3 版的變更: 新增 policy 關鍵字引數。
- as_string(unixfrom=False, maxheaderlen=0, policy=None)¶
Return the entire message flattened as a string. When optional unixfrom is true, the envelope header is included in the returned string. unixfrom defaults to
False. For backward compatibility reasons, maxheaderlen defaults to0, so if you want a different value you must override it explicitly (the value specified for max_line_length in the policy will be ignored by this method). The policy argument may be used to override the default policy obtained from the message instance. This can be used to control some of the formatting produced by the method, since the specified policy will be passed to theGenerator.Flattening the message may trigger changes to the
Messageif defaults need to be filled in to complete the transformation to a string (for example, MIME boundaries may be generated or modified).Note that this method is provided as a convenience and may not always format the message the way you want. For example, by default it does not do the mangling of lines that begin with
Fromthat is required by the Unix mbox format. For more flexibility, instantiate aGeneratorinstance and use itsflatten()method directly. For example:from io import StringIO from email.generator import Generator fp = StringIO() g = Generator(fp, mangle_from_=True, maxheaderlen=60) g.flatten(msg) text = fp.getvalue()
If the message object contains binary data that is not encoded according to RFC standards, the non-compliant data will be replaced by unicode "unknown character" code points. (See also
as_bytes()andBytesGenerator.)在 3.4 版的變更: 新增 policy 關鍵字引數。
- __str__()¶
Equivalent to
as_string(). Allowsstr(msg)to produce a string containing the formatted message.
- as_bytes(unixfrom=False, policy=None)¶
Return the entire message flattened as a bytes object. When optional unixfrom is true, the envelope header is included in the returned string. unixfrom defaults to
False. The policy argument may be used to override the default policy obtained from the message instance. This can be used to control some of the formatting produced by the method, since the specified policy will be passed to theBytesGenerator.Flattening the message may trigger changes to the
Messageif defaults need to be filled in to complete the transformation to a string (for example, MIME boundaries may be generated or modified).Note that this method is provided as a convenience and may not always format the message the way you want. For example, by default it does not do the mangling of lines that begin with
Fromthat is required by the Unix mbox format. For more flexibility, instantiate aBytesGeneratorinstance and use itsflatten()method directly. For example:from io import BytesIO from email.generator import BytesGenerator fp = BytesIO() g = BytesGenerator(fp, mangle_from_=True, maxheaderlen=60) g.flatten(msg) text = fp.getvalue()
在 3.4 版被加入.
- __bytes__()¶
Equivalent to
as_bytes(). Allowsbytes(msg)to produce a bytes object containing the formatted message.在 3.4 版被加入.
- is_multipart()¶
Return
Trueif the message's payload is a list of sub-Messageobjects, otherwise returnFalse. Whenis_multipart()returnsFalse, the payload should be a string object (which might be a CTE encoded binary payload). (Note thatis_multipart()returningTruedoes not necessarily mean that "msg.get_content_maintype() == 'multipart'" will return theTrue. For example,is_multipartwill returnTruewhen theMessageis of typemessage/rfc822.)
- set_unixfrom(unixfrom)¶
Set the message's envelope header to unixfrom, which should be a string.
- get_unixfrom()¶
Return the message's envelope header. Defaults to
Noneif the envelope header was never set.
- attach(payload)¶
Add the given payload to the current payload, which must be
Noneor a list ofMessageobjects before the call. After the call, the payload will always be a list ofMessageobjects. If you want to set the payload to a scalar object (e.g. a string), useset_payload()instead.This is a legacy method. On the
EmailMessageclass its functionality is replaced byset_content()and the relatedmakeandaddmethods.
- get_payload(