为什么相同的内容会根据邮件客户端进行不同的解码?
Why are the same contents decoded differently according to mail clients?
我的代码检查邮箱,并将每封邮件转发给另一个用户。
但我发现相同的内容根据邮件客户端的不同解码(我的意思是,当用 account@gmail.com、account@naver.com 等发送时)。
例如:
我输入的内容,
主题:主题
内容:这是内容
对于邮件客户端 1:
358 2020-04-22 18:12:23,249: 运行: DEBUG: 主题出现为: =?utf-8?B?c3ViamVjdA==?=
359 2020-04-22 18:12:23,249: 运行: DEBUG: 内容如下:dGhpcyBpcyBjb250ZW50Cg==
对于邮件客户端 2:
178 2020-04-22 18:12:09,636: 运行: DEBUG: 主题出现为: =?utf-8?B?c3ViamVjdA==?=
179 2020-04-22 18:12:09,636: 运行: DEBUG: 内容如下:dGhpcyBpcyBjb250ZW50Cg==
对于邮件客户端 3:
300 2020-04-22 18:12:16,494: 运行: DEBUG: subject has come as: subject
301 2020-04-22 18:12:16,494: 运行: DEBUG: content has come as: this is content
对于 1 和 2,它们是相同的。
但是对于3来说,就不一样了。
我的代码使用 imaplib 示例:
typ, rfc = self.mail.fetch(num, '(RFC822)')
raw_email = rfc[0][1]
raw_email_to_utf8 = raw_email.decode('utf-8')
msg=email.message_from_string(raw_email_to_utf8)
content = msg.get_payload() #This is printed for the above debugging log.
正因为如此,一些邮件发送的内容很奇怪。(主题再次编码良好)
为什么会有这种差异,我怎样才能得到不同解码的内容?
某些东西正在进行不必要的编码。这是不必要的,但不是禁止的。
RFC2047 编码有时是必要的,但总是合法的(因为允许它总是比制定精确的规则更简单)。您必须检测 RFC2047 编码并在存在时对其进行解码。如果一个单词以 =? 开头,以 ?= 结尾,并且恰好包含两个问号,则它是 2047 编码的。大多数或所有语言都有可解码的库或函数,请搜索 "rfc2047".
我的代码检查邮箱,并将每封邮件转发给另一个用户。
但我发现相同的内容根据邮件客户端的不同解码(我的意思是,当用 account@gmail.com、account@naver.com 等发送时)。
例如:
我输入的内容,
主题:主题
内容:这是内容
对于邮件客户端 1:
358 2020-04-22 18:12:23,249: 运行: DEBUG: 主题出现为: =?utf-8?B?c3ViamVjdA==?=
359 2020-04-22 18:12:23,249: 运行: DEBUG: 内容如下:dGhpcyBpcyBjb250ZW50Cg==
对于邮件客户端 2:
178 2020-04-22 18:12:09,636: 运行: DEBUG: 主题出现为: =?utf-8?B?c3ViamVjdA==?=
179 2020-04-22 18:12:09,636: 运行: DEBUG: 内容如下:dGhpcyBpcyBjb250ZW50Cg==
对于邮件客户端 3:
300 2020-04-22 18:12:16,494: 运行: DEBUG: subject has come as: subject
301 2020-04-22 18:12:16,494: 运行: DEBUG: content has come as: this is content
对于 1 和 2,它们是相同的。
但是对于3来说,就不一样了。
我的代码使用 imaplib 示例:
typ, rfc = self.mail.fetch(num, '(RFC822)')
raw_email = rfc[0][1]
raw_email_to_utf8 = raw_email.decode('utf-8')
msg=email.message_from_string(raw_email_to_utf8)
content = msg.get_payload() #This is printed for the above debugging log.
正因为如此,一些邮件发送的内容很奇怪。(主题再次编码良好)
为什么会有这种差异,我怎样才能得到不同解码的内容?
某些东西正在进行不必要的编码。这是不必要的,但不是禁止的。
RFC2047 编码有时是必要的,但总是合法的(因为允许它总是比制定精确的规则更简单)。您必须检测 RFC2047 编码并在存在时对其进行解码。如果一个单词以 =? 开头,以 ?= 结尾,并且恰好包含两个问号,则它是 2047 编码的。大多数或所有语言都有可解码的库或函数,请搜索 "rfc2047".