在Python 2.6中,如果给定了一个RFC822消息,如何获取正确的文本/纯文本内容部分?基本上,我想要的算法是这样的:
message = email.message_from_string(raw_message)
if has_mime_part(message, "text/plain"):
mime_part = get_mime_part(message, "text/plain")
text_content = decode_mime_part(mime_part)
elif has_mime_part(message, "text/html"):
mime_part = get_mime_part(message, "text/html")
html = decode_mime_part(mime_part)
text_content = render_html_to_plaintext(html)
else:
# fallback
text_content = str(message)
return text_content
这些方法中,我已经掌握了get_mime_part
和has_mime_part
,但我不太确定如何从MIME部分获取解码后的文本。我可以使用get_payload()
获取编码文本,但如果我尝试在text/plain部分上调用get_payload()
方法的decode
参数(参见文档),就会出现错误:
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/
email/message.py", line 189, in get_payload
raise TypeError('Expected list, got %s' % type(self._payload))
TypeError: Expected list, got <type 'str'>
此外,我不知道如何尽可能地将HTML渲染为文本。