GMAIL编码问题中的Python IMAP

GMAIL编码问题中的Python IMAP,python,encoding,imap,Python,Encoding,Imap,我试图在Python中创建一个IMAP连接器,以便在处理邮件之前检索邮件。现在我用GMAIL做测试 以下是我正在尝试处理的邮件: 在我的代码中,我现在做的是: import email import chardet import imaplib for mail_id in data: res, data = self.conn.fetch(mail_id, '(BODY[HEADER.FIELDS (FROM)] BODY[HEADER.FIELDS (TO)] UID BODY[TE

我试图在Python中创建一个IMAP连接器,以便在处理邮件之前检索邮件。现在我用GMAIL做测试

以下是我正在尝试处理的邮件:

在我的代码中,我现在做的是:

import email
import chardet
import imaplib
for mail_id in data:
    res, data = self.conn.fetch(mail_id, '(BODY[HEADER.FIELDS (FROM)] BODY[HEADER.FIELDS (TO)] UID BODY[TEXT])')
    raw_body = data[0][1]
    encoding_body = chardet.detect(raw_body)['encoding']
    body = email.message_from_string(raw_body.decode(encoding_body))
    dest_email = data[1][1]
    sender_email = data[2][1]

    f = open('/home/nathan/PycharmProjects/test.html', 'w+')
    f.write(body.get_payload())
    f.close()
我没有任何错误,但以下是身体的结果:

你知道为什么这里有奇怪的字符吗?此外,带有重音的字符没有正确解码

提前谢谢

编辑:

我已经尝试了以下方法:

res, data = self.conn.fetch(mail_id, '(RFC822)')
msg = email.message_from_bytes(data[0][1])
for part in msg.walk():
    if part.get_content_type() == 'text/html':
        print(part)
我只是有HTML,但编码也有同样的问题

最终编辑:

多亏了@Botje,这封电子邮件似乎是用“引用的可打印”编码的。下面是这种编码的解决方案:

import quopri
res, data = self.conn.fetch(mail_id, '(RFC822)')
msg = email.message_from_bytes(data[0][1])
for part in msg.walk():
    if part.get_content_type() == 'text/html':
        part = quopri.decodestring(part.get_payload()).decode('UTF-8')

这回答了你的问题吗?使用message“u from”字节,获取整个正文[]或RFC822,这样你就可以得到标题,这样解码器就可以正常工作。@Max我用一个新的测试编辑了我的问题,我现在只有HTML,但仍然存在编码问题。.注意
内容传输编码:quoted printable
部分。谢谢@Botj,这就是问题所在!