我在 Python/Django 中使用 imaplib 获取电子邮件。
我的目标是阅读纯文本和 HTML 电子邮件。
我在用着:
mail.select('inbox', readonly=True)
result, data = mail.uid('fetch', email_uid, '(RFC822)')
raw_email = data[0][1]
email_message = email.message_from_string(raw_email)
#print "EMAIL:",email_message
#print "HEADERS",email_message.items()
subject = get_decoded_header(email_message['Subject'])
from_address = get_decoded_header(email_message['From'])
date = email_message['Date']
date = parse_date(date)
body = ''+get_first_text_block(email_message)
以及 get_first_text_block 的代码(从网上获得):
def get_first_text_block(email_message_instance):
maintype = email_message_instance.get_content_maintype()
if maintype == 'multipart':
for part in email_message_instance.get_payload():
if part.get_content_maintype() == 'text':
return part.get_payload()
elif maintype == 'text':
return email_message_instance.get_payload()
# In cases of emails with empty body
return ''
现在,这个问题是,文本没有出现格式化。具体来说:如果是纯文本电子邮件,则文本显示为一个大的合并字符串,而不是在行间有断点、段落和空行。
如果它是 HTML 文本,则 HTML 根本不会显示,而是显示为带有 HTML 片段的纯文本(即使在 Django 上使用 |safe 过滤器)。
我想可能会发生诸如将电子邮件有效负载不当转换为字符串或类似的事情,但我检查了所有内容,但找不到可能出现的问题。
我究竟做错了什么?