23-从原始消息中获取正文
18.5.6 从原始消息中获取正文
电子邮件可以是纯文本、HTML 或两者的混合。纯文本电子邮件只包含文本:而HTML电子邮件可以有颜色、字体、图像和其他功能,使得电子邮件看起来像一个小网页。如果电子邮件仅仅是纯文本,它的 PyzMessage
对象会将 html_part
属性设为 None
。同样,如果电子邮件只是HTML,它的 PyzMessage
对象会将 text_part
属性设为 None
。
否则, text_part
或 html_part
将有一个 get_payload()
方法,将电子邮件的正文返回为bytes数据类型(bytes数据类型超出了本书的范围)。但是,这仍然不是我们可以使用的字符串。最后一步对 get_payload()
返回的bytes值调用 decode()
方法。 decode()
方法接收一个参数:这条消息的字符编码,它保存在 text_part.charset
或 html_part.charset
属性中。最后,这返回了邮件正文的字符串。
输入以下代码,继续演示交互式环境的例子:
❶ >>> message.text_part != None
True
>>> message.text_part.get_payload().decode(message.text_part.charset)
❷ 'So long, and thanks for all the fish!\r\n\r\n-Al\r\n'
❸ >>> message.html_part != None
True
❹ >>> message.html_part.get_payload().decode(message.html_part.charset)
'<div dir="ltr"><div>So long, and thanks for all the fish!<br><br></div>-Al
<br></div>\r\n'
我们正在处理的电子邮件包含纯文本和HTML内容,因此保存在 message
中的 PyzMessage
对象的 text_part
和 html_part
属性不等于 None
❶❸。对消息的 text_part
调用 get_payload()
,然后在bytes值上调用 decode()
,返回电子邮件的文本版本的字符串❷。对消息的 html_part
调用 get_payload()
和 decode()
,返回电子邮件的HTML版本的字符串❹。