我的Python应用程序使用email.header.Header(http://docs.python.org/2/library/email.header.html)对所有外发电子邮件的标头进行编码(包括From标头),如下所示:Encoding mail subject (SMTP) in Python with non-ASCII characters
它适用于ASCII发件人名称,但适用于
等发件人AdrianPłonka< pokemon@myservice.com>
它产生
来自:=?utf-8?q?Adrian_P = C5 = 82onka_ = 3Cpokemon = 40myservice = 2Ecom = 3E?=
不幸的是,Gmail显然不喜欢这种编码方式,因为它将发件人显示为(未知)并将整个邮件标记为垃圾邮件。
如何正确编码非ASCII发件人?
答案 0 :(得分:4)
编码的正确方法是
From: =?utf-8?q?Adrian_P=C5=82onka?= <pokemon@myservice.com>
也就是说,只有名称部分,而不是实际的电子邮件终端,可能是RFC2047编码的。
答案 1 :(得分:1)
为了实现@ tripleee答案的结果,我能想到的最优雅的方式是:
message['From'] = formataddr((charset.header_encode('Adrian Płonka'), 'pokemon@myservice.com'))
其中charset
是email.charset.Charset
对象,我创建了:
charset = email.charset.Charset()
charset.body_encoding = email.charset.QP
charset.header_encoding = email.charset.QP
charset.input_charset = 'utf-8'
charset.output_charset = 'utf-8'
charset.input_codec = 'utf-8'
charset.output_codec = 'utf-8'
它可以正确显示Gmail以及其他提供商。
这对我来说是非常重要的,希望它有所帮助...