我正在将带有EmailMessage对象的电子邮件发送到Gmail邮箱 电子邮件的主题看起来像这样: 你“你收到了来自Daėriusęėįęėįęįįįį的信--- reply3_433441”
当我收到一封电子邮件时,查看邮件信息,我可以看到主题行看起来像这样:
主题:=?utf-8?b?WW91IGdvdCBhIGxldHRlciBmcm9tIERhxJdyaXVzIMSZxJfEr8SZxJfEr8SZ?= =?UTF-8 2 B 4 XK / El8SZxK / EmS0tLXJlcGx5M180MzM0NDE =?=
如何解码此主题行?
我已经用以下方法解密了电子邮件正文(tex / plain):
for part in msg.walk():
if part.get_content_type() == 'text/plain':
msg_encoding = part.get_content_charset()
msg_text = part.get_payload().decode('quoted-printable')
msg_text = smart_unicode(msg_text, encoding=msg_encoding, strings_only=False, errors='strict')
答案 0 :(得分:4)
有关国际化电子邮件标头格式的完整说明,请参阅RFC 2047。基本格式为"=?" charset "?" encoding "?" encoded-text "?="
。所以在你的情况下,你有一个base-64编码的UTF-8字符串。
您可以使用email.header.decode_header
和str.decode
函数对其进行解码并获取正确的Unicode字符串:
>>> import email.header
>>> x = email.header.decode_header('=?utf-8?b?WW91IGdvdCBhIGxldHRlciBmcm9tIERhxJdyaXVzIMSZxJfEr8SZxJfEr8SZ?=')
>>> x
[('You got a letter from Da\xc4\x97rius \xc4\x99\xc4\x97\xc4\xaf\xc4\x99\xc4\x97\xc4\xaf\xc4\x99', 'utf-8')]
>>> x[0][0].decode(x[0][1])
u'You got a letter from Da\u0117rius \u0119\u0117\u012f\u0119\u0117\u012f\u0119'
答案 1 :(得分:3)
您应该查看Python标准库中的email.header
module。特别是,在文档的最后,您可以使用decode_header()
函数为您完成大部分艰苦工作。
答案 2 :(得分:0)
主题行是utf8,但你是以ASCII格式读取它,你最安全地读取它作为utf8,因为ASCII实际上只是作为utf8的子集。