我目前正在使用Gmail API在Python中读取一些HTML电子邮件。我用:
解码了他们的身体base64.urlsafe_b64decode
打印出生成的HTML电子邮件后," \ r \ n"和" 3D"分散在HTML周围。我无法删除" \ r \ n"因为\和r和\和n注册为不同的字符(?)而且我不确定" 3D"来自。
我是如何解码它的?
以下是代码:
results = service.users().messages().list(userId='me', q = 'is: unread').execute()
for index in range(len(results['messages'])):
message = service.users().messages().get(userId='me', id=results['messages'][index]['id'], format='raw').execute()
msg_str = base64.urlsafe_b64decode(message['raw'].encode('UTF-8'))
mime_msg = email.message_from_string(str(msg_str))
print(mime_msg)
service.users().messages().modify(userId='me', id=results['messages'][index]['id'], body = {'removeLabelIds': ['UNREAD']}).execute() # mark message as read
答案 0 :(得分:1)
这不是一个很好的解决方案,而是使用像
这样的东西for email_part in message.walk():
part_data = email_part.get_payload(decode=True)
其中message是Python email.message.Message obj。然后可能使用像BeautifulSoup这样的东西来有效地分析HTML。 希望有所帮助!
答案 1 :(得分:0)
我找到了解决方案 - 我停止使用Python中的电子邮件库,并将msg_str
转换为字符串(它是字节类型)。从那里开始,我只是从字符串中删除了'\r\n'
,并将'=3D'
替换为'='
。
答案 2 :(得分:0)
maksel的解决方案对我有用。原始代码编码而不是解码字节字符串。
因此,在python 3.7下,我们可以替换如下:
msg = msg.replace('\r\n', '').replace('=3D', '=')
请警惕,因为在我的情况下,此解决方案不适用于所有html标签。