从电子邮件中提取正文时的键错误

时间:2014-07-22 03:16:06

标签: python gmail-api

对于某些消息,我认为没有'部分'零件。我认为下面的代码涵盖了大多数消息,但仍然存在一些错误:'数据'当试图得到一些消息。我查看了这些消息的json结果,它们都包含数据',不确定发生了什么。 Traceback显示keyerror来自包含'部分的消息。

回溯

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 :(得分:0)

经过一番调查,这是我现在能做的最好的,如果有人有更好的解决方案请发帖。

看起来导致失败的问题有一个附件,也许附件是有点混淆了消息结构的东西。我已经能够看到附件消息中'Parts'中的mimeType与非附件消息(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']