我的代码检查一个邮箱,然后把每一封邮件转发给另一个用户。但是我发现,同样的内容,根据不同的邮件客户端会有不同的解码(我的意思是,用[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.
因为这个原因,有些邮件的内容很奇怪(主题又是编码的)
为什么会有这样的区别,如何才能得到不同解码的内容?
有些东西在做不必要的编码。这是不必要的,但并不禁止。
RFC2047编码有时是必要的,但总是合法的(因为允许它总是比制定精确的规则更简单)。你必须检测到RFC2047编码,并在它存在时进行解码。如果一个词的开头是=?,结尾是?=,并且正好包含两个问号,那么它就是2047编码。有一些库或函数可以对大多数或所有语言进行解码,搜索 "rfc2047"。