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

问题描述 投票:1回答:3

我目前正在使用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
python email gmail-api mime
3个回答
1
投票

这不是一个很好的解决方案,而是使用类似的东西

for email_part in message.walk(): 
    part_data = email_part.get_payload(decode=True) 

消息是Python email.message.Message obj。然后可能使用像BeautifulSoup这样的东西来有效地分析HTML。希望有所帮助!


0
投票

我找到了解决方案 - 我停止使用Python中的电子邮件库,并将msg_str转换为字符串(它的类型为字节)。从那里,我只是从字符串中删除'\r\n'并用'=3D'替换'='


0
投票

如果设置了str.decode('utf-8'),maksel的解决方案对我有用。原始代码编码而不是解码字节串。

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

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

要小心,因为这个解决方案对我的所有html标签都不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.