以 HTML、imaplib 和 Django 的形式获取文本

5 django imaplib

我在 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)
Run Code Online (Sandbox Code Playgroud)

以及 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 ''
Run Code Online (Sandbox Code Playgroud)

现在,问题是,文本没有显示格式。具体来说:如果是纯文本电子邮件,则文本显示为一个大的合并字符串,而不是在行之间有中断、段落和空行。

如果是 HTML 文本,则 HTML 根本不显示,而是显示为纯文本,其中包含 HTML 片段(即使在 Django 上使用 |safe 过滤器)。

我想可能会发生将电子邮件有效负载错误地转换为字符串或类似的事情,但我检查了所有内容,但无法找出可能是什么问题。

我究竟做错了什么?

mau*_*k13 2

问题是您仅使用电子邮件正文的第一个文本块。请尝试以下方法,看看是否有效。这不是 Django 的问题。

body = email_message.get_payload()[1].get_payload()
Run Code Online (Sandbox Code Playgroud)

尝试更改索引并测试看看是否可以看到 html。

基于此,您必须修改函数来获取电子邮件正文。

编辑:我假设您正在查看多部分消息