为什么Gmail不显示我的RFC 2047编码的From标头?

时间:2013-11-17 16:09:27

标签: python email encoding gmail rfc

我的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发件人?

2 个答案:

答案 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'))

其中charsetemail.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以及其他提供商。

这对我来说是非常重要的,希望它有所帮助...