提取邮件正文时出现键错误
对于某些消息,我认为没有“parts”这个部分。我原以为下面的代码可以处理大部分消息,但在尝试获取某些消息时,仍然出现了一个关键错误:'data'。我查看了这些消息的json结果,发现它们都包含'data',不太明白这是怎么回事。错误追踪显示,这个关键错误是来自那些确实包含'parts'的消息。
错误追踪
Traceback (most recent call last):
File "gmail.py", line 168, in <module>
final_message_list.append(GetMessage(gmail_service, 'me', message_id))
File "gmail.py", line 150, in GetMessage
message_raw = message['payload']['parts'][0]['body']['data']
(在GetMessage内部)
# Pull Raw Message Body from Response, some emails may not contain 'parts'
if 'parts' in message['payload']:
message_raw = message['payload']['parts'][0]['body']['data']
else:
message_raw = message['payload']['body']['data']
1 个回答
0
经过一番调查,这是我目前能想到的最好办法,如果有人有更好的解决方案,请分享一下。
看起来导致失败的那个消息有一个附件,可能正是这个附件让消息的结构有点乱。我发现,对于带附件的消息,'Parts'中的mimeType是不同的(是multipart/alternative),而没有附件的消息则是text/plain。因此,我在尝试解析消息内容之前,添加了一个'if'语句来处理这种情况,具体代码如下。
if 'parts' in message['payload']:
if message['payload']['parts'][0]['mimeType'] == 'multipart/alternative':
message_raw = message['payload']['parts'][0]['parts'][0]['body']['data']
else:
message_raw = message['payload']['parts'][0]['body']['data']
else:
message_raw = message['payload']['body']['data']