How to get get_body() to work? (about email)
Thomas Passin
list1 at tompassin.net
Sun Mar 19 13:34:00 EDT 2023
On 3/18/2023 10:49 PM, Peng Yu wrote:
> Hi,
>
> https://docs.python.org/3/library/email.parser.html
>
> It says "For MIME messages, the root object will return True from its
> is_multipart() method, and the subparts can be accessed via the
> payload manipulation methods, such as get_body(), iter_parts(), and
> walk()."
>
> But when I try the following code, get_body() is not found. How to get
> get_body() to work?
>
> $ python3 -c 'import email, sys; msg =
> email.message_from_string(sys.stdin.read()); print(msg.get_body())'
> <<< some_text
> Traceback (most recent call last):
> File "<string>", line 1, in <module>
> AttributeError: 'Message' object has no attribute 'get_body'
>
A Message object does not have a get_body method, but an EmailMessage
object does.
In the Python 3.10 docs, Just before the part you quoted, there is this
sentence:
"You can pass the parser a bytes, string or file object, and the parser
will return to you the root EmailMessage instance of the object
structure".
So if you want to use get_body(), you should be feeding the parser your
message string, rather than using email.message_from_string(), which
returns a Message, not an EmailMessage.
With a Message object, you could use get_payload(), which will give you
a list of Messages for each MIME part of the document. When a part is
not a multipart, it will give you a string, which sounds like what you
want to end up with.
(see https://docs.python.org/3.10/library/email.compat32-message.html)
More information about the Python-list
mailing list