1

一部のメッセージについては、「パーツ」コンポーネントがないと思います。以下のコードがほとんどのメッセージをカバーしていると思いましたが、いくつかのメッセージを取得しようとすると、まだ keyerror: 'data' がスローされています。これらのメッセージの json の結果を確認しましたが、すべて「データ」が含まれており、何が起こっているのかわかりません。トレースバックは、キーエラーが「パーツ」を含むメッセージから来ていることを示しています

トレースバック

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']
4

1 に答える 1

0

いくつかの調査の後、これが今のところ私ができる最善の方法です。誰かがより良い解決策を持っている場合は投稿してください。

失敗の原因となった問題のメッセージには添付ファイルがあるようで、おそらく添付ファイルがメッセージの構造を少し混乱させているのでしょう。'Parts' 内の mimeType は、添付メッセージと非添付メッセージ (text/plain) では異なる (multipart/alternative) ことを確認できました。したがって、以下に示すように、メッセージ本文を解析する前に「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']
于 2014-07-22T22:52:42.957 に答える