4

我需要使用 gmail api 获取收件箱中的所有邮件。但我只看到一种方法。

  1. 获取消息列表(id,threadID

    GET https://www.googleapis.com/gmail/v1/users/somebody%40gmail.com/messages?labelIds=INBOX&key={YOUR_API_KEY}
    
  2. 使用 id 获取循环中的所有消息

    While 
        GET https://www.googleapis.com/gmail/v1/users/somebody%40gmail.com/messages/147199d21bbaf5a5?key={YOUR_API_KEY}
    End of While
    

但是这种方式需要 100500 请求。有人知道如何通过一个请求获取所有消息(或只是有效负载字段)吗?

4

2 回答 2

15

使用批处理并一次请求 100 条消息。您将需要发出 1000 个请求,但好消息是这很好,而且对每个人来说都会更容易(无需在单个请求中下载 1GB 响应!)。

记录在: https ://developers.google.com/gmail/api/guides/batch

还有其他一些人在 Stack Overflow 上询问了有关批处理 Gmail Api 的问题,因此只需快速搜索即可找到答案和示例。

于 2014-07-09T17:33:22.577 回答
4

您正在做的方法是正确的,因为没有“GetAll”API 来下载它们

原因包括:

无限的结果集

提取无限量的电子邮件(也称为无限结果集)是 Google 服务器上的资源占用。你想要附件和图片吗?这些可能是千兆字节的数据。

网络问题

谷歌必须从磁盘读取千兆字节,将其存储在内存中并通过互联网发送。谷歌的服务器会处理它,但互联网连接的带宽不起作用。最糟糕的是,如果您一次又一次地发出此请求,您可能会对 Google 执行 DDoS 攻击。

安全风险

如果有人获得了另一个用户的 API 密钥,他们就可以下载他们的整个邮箱。因此,谷歌提供寻呼以确保他们可以提供更安全的服务并减少资源争用。

因此,它可以保护您和其他用户以及他们自己。

于 2014-07-09T16:32:22.100 回答