【问题标题】:Gmail API: Python Email Dict appears to be Missing KeysGmail API:Python 电子邮件字典似乎缺少密钥
【发布时间】:2016-12-05 09:51:55
【问题描述】:

我遇到了一个似乎与 google 的 gmail API 不一致的奇怪问题:

如果您查看here,您会看到 gmail 对电子邮件的表示具有键“sn-p”和“id”等。这是我用来生成所有电子邮件的完整列表的一些代码:

response = service.users().messages().list(userId='me').execute()
messageList = []
messageList.extend(response['messages'])
while 'nextPageToken' in response:
    pagetoken = response['nextPageToken']
    response = service.users().messages().list(userId='me', pageToken=pagetoken).execute()
    messageList.extend(response['messages'])
for message in messageList:
    if 'snippet' in message:
        print(message['snippet'])
    else:
        print("FALSE")

代码有效!...除了我得到每封电子邮件的输出“FALSE”这一事实。 'sn-p' 不存在!但是,如果我使用“id”而不是 sn-p 运行相同的代码,我会得到一大堆 id!

我决定自己打印出“消息”对象/字典,每个对象只有一个“id”和一个“threadId”,尽管 API 声称对象中应该有更多...... ?

感谢您的帮助!

【问题讨论】:

  • This related 表达了同样的挫败感。消息资源可以包含其他附加字段,但您必须(请求并)单独获取它们(例如使用get 端点)。
  • 这正是我的问题,谢谢!

标签: python gmail-api


【解决方案1】:

正如@jedwards 在他的评论中所说,仅仅因为一条消息“可以”包含文档中指定的所有字段,并不意味着它会。 'list' 为每条消息提供了最少的信息量,因为它提供了很多消息并且希望尽可能地懒惰。对于我想了解更多信息的个别消息,我会使用 'messages.get' 和我从 'list' 获得的 id。

为收件箱中的每封电子邮件运行 get 似乎非常昂贵,但据我所知,没有办法运行批处理“get”命令。

【讨论】:

  • 通常会列出 id,然后在 batch request 中一次性获取它们(即总共 2 个请求)。查看this question 中的第二个答案,了解如何在 python 中完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 2016-03-16
  • 2021-10-02
相关资源
最近更新 更多