从Gmail API解码MIME电子邮件 - \ r \ n和3D - Python

时间:2017-08-06 23:21:58

标签: python email gmail-api mime

我目前正在使用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

3 个答案:

答案 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)

如果设置了str.decode('utf-8'),

maksel的解决方案对我有用。原始代码编码而不是解码字节字符串。

因此,在python 3.7下,我们可以替换如下:

msg = msg.replace('\r\n', '').replace('=3D', '=')

请警惕,因为在我的情况下,此解决方案不适用于所有html标签。