Gmail api:如何使用ID获取收件人的电子邮件?

叶罗杜克

我正在尝试使用检索到的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'
am

问题:

格式设置为时,响应中不会填充RAW该字段payload

来自API官方文档

RAW:返回完整的电子邮件消息数据,其中原始内容中的正文内容为base64url编码的字符串;有效负载字段未使用

解:

调用时请使用FULLMETADATA作为格式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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Gmail电子邮件中包含多个收件人?

我收到一封电子邮件(gmail),如果发件人和收件人使用相同的域,如何知道发件人的 IP 地址

使用已更改收件人的AppScript在Gmail中回复电子邮件的结果以新主题结尾

如何从 Gmail 中提取所有发件人、收件人、抄送、密件抄送电子邮件以存储在 Google 表格中?

从gmail-api获取发件人电子邮件

如何使用Python获取电子邮件的收件人?

将不同的电子邮件设置为收件人时,Gmail API 返回“Delegation denied for [email protected]

如何从Gmail获取特定电子邮件的线程ID

Python:如何从gmail API获取电子邮件的主题

如何从Gmail API获取建议的/自动完成的电子邮件?

使用Gmail PHP API无法获取电子邮件正文

如何使用 php 和 google gmail api 将电子邮件发送到多个电子邮件抄送 ID?

使用Gmail API时,发件人电子邮件在gmail界面中很奇怪

GMail API-如何显示收件箱中的完整电子邮件

仅提取主Gmail收件箱中的电子邮件的电子邮件ID

Flutter - googleapis - 如何使用 Gmail Api 阅读电子邮件

如何使用Gmail API快速发送电子邮件

如何使用Gmail REST API发送电子邮件

如何使用python使用Google API从gmail获取电子邮件主题?

从 Gmail API 批量获取超过 1 万封电子邮件的电子邮件发件人

会议项目收件人。如何获取电子邮件

如何从电子邮件中获取收件人

如何通过 Gmail API 在 Gmail 中查找最新的电子邮件 ID

gmail api海峡转发方式获取发件人电子邮件

如何从我的 Gmail 帐户中获取所有电子邮件联系人?

如何使用Gmail API在Gmail中将电子邮件“标记为已读”?

如何从我的 Gmail 收件箱中获取有时间限制的 IOS SDK 的电子邮件?

如何使用Python MAPI从Outlook获取“收件人”名称和电子邮件地址

带有iOS的Gmail API-获取电子邮件