为什么同样的内容,根据邮件客户端的不同,解码方式也不同?

问题描述 投票:0回答:1

我的代码检查一个邮箱,然后把每一封邮件转发给另一个用户。但是我发现,同样的内容,根据不同的邮件客户端会有不同的解码(我的意思是,用[email protected],用[email protected],等等)。

例如:我输入的内容,主题:主题内容:这是内容

对于邮件客户端1:358 2020-04-22 18:12:23,249: run.DEBUG: subject has come as: =??utf-8?B?c3ViamVjdA==? DEBUG: subject has come as: =?utf-8?B?c3ViamVjdA==?= 359 2020-04-22 18:12:23,249: run: DEBUG: content has come as: dGhpcyBpcyBjb250ZW50Cg==。

对于邮件客户端2: 178 2020-04-22 18:12:09,636: run.DEBUG: subject has come as: =?utf-8?B?c3ViamVjdA==? DEBUG: subject has come as: =?utf-8?B?c3ViamVjdA==?= 179 2020-04-22 18:12:09,636: run: DEBUG: content has come as: dGhpcyBpcyBjb250ZW50Cg==。

对于邮件客户端3:300 2020-04-22 18:12:16,494: run: DEBUG: subject has come as: subject 301 2020-04-22 18:12:16,494: run: 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.

因为这个原因,有些邮件的内容很奇怪(主题又是编码的)

为什么会有这样的区别,如何才能得到不同解码的内容?

email smtp imap rfc imaplib
1个回答
1
投票

有些东西在做不必要的编码。这是不必要的,但并不禁止。

RFC2047编码有时是必要的,但总是合法的(因为允许它总是比制定精确的规则更简单)。你必须检测到RFC2047编码,并在它存在时进行解码。如果一个词的开头是=?,结尾是?=,并且正好包含两个问号,那么它就是2047编码。有一些库或函数可以对大多数或所有语言进行解码,搜索 "rfc2047"。

© www.soinside.com 2019 - 2024. All rights reserved.