Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么Gmail没有';是否显示从标题编码的我的RFC 2047?_Python_Email_Encoding_Gmail_Rfc - Fatal编程技术网

Python 为什么Gmail没有';是否显示从标题编码的我的RFC 2047?

Python 为什么Gmail没有';是否显示从标题编码的我的RFC 2047?,python,email,encoding,gmail,rfc,Python,Email,Encoding,Gmail,Rfc,我的Python应用程序使用email.header.header()对传出电子邮件的所有标题(包括来自标题)进行编码,如下所示: 它适用于ASCII发送者名称,但适用于像 阿德里安·蓬卡 它产生 From:=?utf-8?q?Adrian_p=C5=82onka_=3Cpokemon=40myservice=2Ecom=3E= 不幸的是,Gmail显然不喜欢这种编码方式,因为它将发件人显示为(未知),并将整个邮件标记为垃圾邮件 如何正确编码非ASCII发件人?正确的编码方法是 From: =?

我的Python应用程序使用email.header.header()对传出电子邮件的所有标题(包括来自标题)进行编码,如下所示:

它适用于ASCII发送者名称,但适用于像

阿德里安·蓬卡

它产生

From:=?utf-8?q?Adrian_p=C5=82onka_=3Cpokemon=40myservice=2Ecom=3E=

不幸的是,Gmail显然不喜欢这种编码方式,因为它将发件人显示为(未知),并将整个邮件标记为垃圾邮件


如何正确编码非ASCII发件人?

正确的编码方法是

From: =?utf-8?q?Adrian_P=C5=82onka?= <pokemon@myservice.com>
From:=?utf-8?q?Adrian_P=C5=82onka?=

也就是说,只有名称部分,而不是实际的电子邮件终端,可以进行RFC2047编码。

为了从@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以及其他提供商一起正确显示


这对我来说是非常重要的,希望它能帮助…

显示您用于编码的调用。我正在使用
message['From']=email.header.header(email.utils.formataddr((u'Adrian płonka',u'pokemon@myservice.com“),charset))
。无论如何,结果(正如我在日志和Gmail的“显示原始消息”中看到的那样)is:
=?utf-8?q?Adrian\u P=C5=82onka\u=3Cpokemon=40myservice=2Ecom=3E?=
如果电子邮件地址具有国际字符,例如:。施設@在带有的地址中支持blah.jpUTF-8,并且此格式的地址将在不编码的情况下嵌入;但是这个工具只存在了有限的时间,所以它不可能在许多客户中很好地工作。但在支持此功能的系统上,可以在整个头文件中使用裸UTF-8。参见Python 3.5中引入的
email
library大修是否改变了这一点,并在3.6中实现了默认实现?为了迟到地回答我自己的问题,看起来像OP的原始代码
str(Header(formataddr)((u'Adrian Płonka',u'pokemon@myservice.com),‘utf-8’))
现在将返回自Python 3.5.1起的正确值。新的“正确”方法可能更简单。