我正在尝试使用检索到的ID来获取收件人的电子邮件。下面是代码。
messages = service.users().threads().list(userId='me', q='to:').execute().get('threads', [])
for message in messages:
#print(message)
# print(dir(message))
# print(message.get())
if search in message['snippet']:
#print(message['id'])
message_id = message['id']
# print(message_id)
full_message = service.users().messages().get(userId='me', id=message_id, format="raw").execute()
#print(full_message)
msg_headers = full_message['payload']['headers']
#print(msg_headers)
msg_str = base64.urlsafe_b64decode(full_message['raw'].encode('ASCII'))
mime_msg = email.message_from_bytes(msg_str)
#print(mime_msg)
x = re.findall('id=(\w+)\'', str(mime_msg))
print(x)
if len(x)> 0:
return x[0]
if msg_headers[x]['name'] == "To":
return msg_headers[x[0]]['value']
else:
return None
我得到下面的错误。我该如何解决?
Traceback (most recent call last):
File "C:\test\test2.py", line 102, in <module>
test = get_email_with("Test string")
File "C:\test\test2.py", line 55, in get_email_with
msg_headers = full_message['payload']['headers']
KeyError: 'payload'
格式设置为时,响应中不会填充RAW
该字段payload
。
来自API官方文档:
RAW:返回完整的电子邮件消息数据,其中原始内容中的正文内容为base64url编码的字符串;有效负载字段未使用。
调用时,请使用FULL
或METADATA
作为格式messages().get
,而不是RAW
(格式是一个选项参数,如果未指定,FULL
则用作默认格式)。
因此,您应该更改此设置:
full_message = service.users().messages().get(userId='me', id=message_id, format="raw").execute()
对此:
full_message = service.users().messages().get(userId='me', id=message_id).execute()
或者,也可以使用format="raw"
解码base-64编码的string full_message["raw"]
。编辑:不过,在这种情况下,您必须删除以下行:msg_headers = full_message['payload']['headers']
。
因此,如果要检索收件人,则可以执行以下操作:
full_message = service.users().messages().get(userId='me', id=message_id).execute()
msg_headers = full_message['payload']['headers']
for header in msg_headers:
if header["name"] == "To":
return header["value"]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句