当前位置:嗨网首页>书籍在线阅读

23-从原始消息中获取正文

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

18.5.6 从原始消息中获取正文

电子邮件可以是纯文本、HTML 或两者的混合。纯文本电子邮件只包含文本:而HTML电子邮件可以有颜色、字体、图像和其他功能,使得电子邮件看起来像一个小网页。如果电子邮件仅仅是纯文本,它的 PyzMessage 对象会将 html_part 属性设为 None 。同样,如果电子邮件只是HTML,它的 PyzMessage 对象会将 text_part 属性设为 None

否则, text_parthtml_part 将有一个 get_payload() 方法,将电子邮件的正文返回为bytes数据类型(bytes数据类型超出了本书的范围)。但是,这仍然不是我们可以使用的字符串。最后一步对 get_payload() 返回的bytes值调用 decode() 方法。 decode() 方法接收一个参数:这条消息的字符编码,它保存在 text_part.charsethtml_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_parthtml_part 属性不等于 None ❶❸。对消息的 text_part 调用 get_payload() ,然后在bytes值上调用 decode() ,返回电子邮件的文本版本的字符串❷。对消息的 html_part 调用 get_payload()decode() ,返回电子邮件的HTML版本的字符串❹。