在多部分电子邮件中,
email.message.Message.get_payload()返回一个列表,其中每个部分都有一个项目。最简单的方法是遍历消息并获取每个部分的有效负载:
import emailmsg = email.message_from_string(raw_message)for part in msg.walk(): # each part is a either non-multipart, or another multipart message # that contains further parts... Message is organized like a tree if part.get_content_type() == 'text/plain': print part.get_payload() # prints the raw text
对于非多部分消息,无需进行所有遍历。无论content_type如何,您都可以直接进入get_payload()。
msg = email.message_from_string(raw_message)msg.get_payload()
如果内容已编码,则需要
None将第一个参数传递给
get_payload(),然后传递True(解码标志是第二个参数)。例如,假设我的电子邮件包含MS
Word文档附件:
msg = email.message_from_string(raw_message)for part in msg.walk(): if part.get_content_type() == 'application/msword': name = part.get_param('name') or 'MyDoc.doc' f = open(name, 'wb') f.write(part.get_payload(None, True)) # You need None as the first param # because part.is_multipart() # is False f.close()至于获得HTML部分的合理的纯文本近似,我发现html2text的效果很好。



