gmailapi解码来自每个人的消息

2024-09-29 01:29:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python中的gmailapi来检索用法语编写的邮件,实际上我遇到了重音符号的问题。在

我用这个检索邮件:

 message = service.users().messages().get(userId="me", id=i, format="raw").execute()

我只想得到邮件的正文,所以我从以下几点开始:

^{pr2}$

对于某些邮件,我会检索所有邮件数据,包括法语文本,例如:

"Cette semaine, vous vous êtes servis du module de révision 0 fois"

对于其他人,我会引用打印编码,比如:

"Salut, =E7a farte?"

引用的打印编码不是问题,因为我使用quopri模块构建了一个简单的解码函数。这里的主要问题是最后一句话对于引用的打印编码是错误的,编码字符是ç,应该这样编码:

"Salut, =C3=A7a farte?"

所以用了一个错误的编码句子,我就得到了这样的结果:

Salut, �a farte?

我怀疑来源是不同的邮件客户端,我的第一个示例是从Gmail客户端发送到Outlook地址的邮件,第二个示例则相反;Outlook邮件发送到Gmail地址。在

有没有可能解决我的问题?在


Tags: 客户端示例message编码地址错误邮件gmail
2条回答

问题是,quopri正确地将邮件正文从7位数据转换为8位数据,但随后用于将bytestring转换为unicode字符串的编码不是正确的。在您的示例中,它似乎是ISO-8859-1:

In [1]: import quopri

In [2]: quopri.decodestring('Salut, =E7a farte?').decode('iso-8859-1')
Out[2]: 'Salut, ça farte?'

通常您应该能够使用Content-Type报头获得正确的编码。在使用可打印UTF-8编码的邮件中是这样的:

^{pr2}$

试试这个:

message = service.users().messages().get(userId='me', id=i).execute()
content = message['payload']['body']['data']
print(base64.b64decode(content).decode('utf-8'))

这将获得电子邮件的内容。在

相关问题 更多 >