【发布时间】:2012-10-23 11:18:39
【问题描述】:
我在 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 过滤器)。
我想可能会发生诸如将电子邮件有效负载不正确地转换为字符串或类似的事情,但我检查了所有内容,但找不到可能出现的问题。
我做错了什么?
【问题讨论】: