2011-03-17 68 views
3

我使用EmailMessage对象向Gmail发送邮件。
电子邮件的主题看起来是这样的: U“你从Daėriusęėįęėįęįėęįę--- reply3_433441字母”电子邮件主题中的编码如何工作? (Django/Python)

当我收到一封电子邮件,看邮件信息我可以看到主题行看起来像此:

主题:?= UTF-8b的WW91IGdvdCBhIGxldHRlciBmcm9tIERhxJdyaXVzIMSZxJfEr8SZxJfEr8SZ = = UTF-8b的XK/El8SZxK/EmS0tLXJlcGx5M180MzM0NDE = =

如何这个主题行解码????????

我已经sucesfully解码电子邮件正文(TEX /平)本:

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

相关:https://stackoverflow.com/questions/7331351/python-email-header-decoding- utf-8 – 2018-02-14 06:57:18

回答

0

主题行是UTF8,但你读它的ASCII,你最安全的阅读这一切为UTF8,如ASCII只能作为utf8的子集。

3

您应该看看Python标准库中的email.header module。特别是,在文档的最后,有一个decode_header()函数可以用来为您完成大部分的辛苦工作。

+0

我没有意识到这一点,听起来不错 – theheadofabroom 2011-03-17 18:29:18

4

有关国际化电子邮件标题格式的完整说明,请参阅RFC 2047。基本格式是"=?" charset "?" encoding "?" encoded-text "?="。所以在你的情况下,你有一个base-64编码的UTF-8字符串。

您可以使用email.header.decode_headerstr.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' 
+0

非常感谢。奇迹般有效。我只需手动将主题行分成几个部分,因为每个部分都必须手动解码。用你的例子在15分钟内完成我的任务。 – Darius 2011-03-18 06:10:06