使用App Engine Python接收非ascii电子邮件会导致奇怪的字符编码

Fed*_*les 1 python email google-app-engine encoding ascii

我正在接收使用Google App Engine Python的电子邮件,并将其存储在数据存储区中.

class LogSenderHandler(InboundMailHandler):
    def receive(self, mail_message):
        logging.info("Received a message from: " + mail_message.sender)
Run Code Online (Sandbox Code Playgroud)

当我收到来自ASCII地址的电子邮件时,一切正常:

我[me@gmail.com]存储为Me [me@gmail.com]

但是,如果发送方值包含非ascii字符,则存储的数据值如下所示:

Kröber先生[mr.kroeber@gmail.com]存储为=?ISO-8859-1?Q?Mr_Kr = F6ber?= [mr.kroeber@gmail.com]

Mar*_*nen 6

根据RFC 2047对受试者进行编码.请参阅电子邮件模块的国际化标题部分.

以下是将主题解码为Unicode的示例:

>>> s='=?ISO-8859-1?Q?Mr_Kr=F6ber?= [mr.kroeber@gmail.com]'
>>> from email.header import decode_header
>>> decode_header(s)
[('Mr Kr\xf6ber', 'iso-8859-1'), ('[mr.kroeber@gmail.com]', None)]
>>> u = u' '.join(w.decode(e or 'ascii') for w,e in decode_header(s))
>>> u
u'Mr Kr\xf6ber [mr.kroeber@gmail.com]'
>>> print u
Mr Kröber [mr.kroeber@gmail.com]
Run Code Online (Sandbox Code Playgroud)