我目前正在使用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
这不是一个很好的解决方案,而是使用类似的东西
for email_part in message.walk():
part_data = email_part.get_payload(decode=True)
消息是Python email.message.Message obj。然后可能使用像BeautifulSoup这样的东西来有效地分析HTML。希望有所帮助!
我找到了解决方案 - 我停止使用Python中的电子邮件库,并将msg_str
转换为字符串(它的类型为字节)。从那里,我只是从字符串中删除'\r\n'
并用'=3D'
替换'='
。
如果设置了str.decode('utf-8'),maksel的解决方案对我有用。原始代码编码而不是解码字节串。
因此,在python 3.7下我们可以替换如下:
msg = msg.replace('\r\n', '').replace('=3D', '=')
要小心,因为这个解决方案对我的所有html标签都不起作用。