【问题标题】:Gmail API limitations for getting mails获取邮件的 Gmail API 限制
【发布时间】:2014-08-26 15:46:21
【问题描述】:

据我了解,目前 google 的 API 每秒向其 API (from their docs) 提供 10 个请求,这对于舒适地处理邮件来说似乎还远远不够。我需要获取所有电子邮件的标题(或至少是发件人和收件人)。还有什么比等待numberOfMails / 10 秒更好的吗?

我目前正在从客户端 JavaScript 应用程序访问 API,我正在考虑在多个机器/应用程序上为同一用户分发 API 调用,但仍不清楚它们的限制是否适用于 gmail 用户或注册应用程序。

无论如何,希望得到一些想法如何处理它,目前的配额完全无法使用。

【问题讨论】:

  • 您链接到的页面非常清楚地说明了使用限制:所有应用程序请求每天10,000,000,000个配额单位,每个gmail用户每秒10个请求 i>.
  • @Frxstrem 有没有比一一收到邮件更好的方法?
  • @ArtemVolkhin 我回答了这个问题。或许你也有同样的疑问:stackoverflow.com/questions/24562981/…
  • @gitter 看起来不错,我试试看
  • @gitter 它可以工作(每批 1000 个请求的限制——developers.google.com/gmail/api/guides/batch)将其添加为答案,我会接受它

标签: javascript email google-api gmail gmail-api


【解决方案1】:

您引用的 10 个请求/秒/用户的限制不是在一秒的粒度上强制执行的,而是一个更长的移动窗口。您应该能够在受到回击之前超过该限制(即显着)几秒钟。它是有意编写的,以允许用户进行短期爆发等。

批处理有助于提高吞吐量,但不允许您在较长的窗口内超过此限制(批处理中的 100 个请求仍算作 100 个请求)。我不会一次发送超过 50 或 100 个请求,否则您肯定会注意到其中一些请求受到限制 (429)。

是的,项目范围的限制比每秒 10 个请求要大得多。

【讨论】:

  • 谢谢! 0) 每批最多可包含 1000 条消息。为什么是 50 或 100,而 429 是什么?我还注意到,批处理中每增加一百个请求会使完成响应时间减慢大约 1 秒。 1)您对使用批次可以获得多少条消息有任何估计吗? 2)并行发送几个批次,而不是等待第一个发送的请求完成是否有意义?
  • (0) 没说不能发1000,是可以的,说不可以(推荐)。 “429”是节流的 HTTP 响应,当您超出限制并且您的客户端预计会实施某种类型的指数退避时会发生这种响应。 (1) 是的,目前最多 50 或 100 是理想的。 (2) 不,您可能仍然会遇到 429 错误。一次发送 50 或 100 个请求是不够的,你想做什么?
  • 我想做一个分析应用。例如,我想让所有发件人显示前 10 个最常发件人。我找不到更好的解决方案,而不是下载所有邮件并解析它们的标题。看起来这个 API 对我的任务来说是一个错误的工具,IMAP 会运行得更快,你觉得如何?
  • @EricDeFrez 不管它是否值得,我也发现 50-100 个请求是一个不幸的限制。如果您的程序处理了用户收件箱中的每封电子邮件,并且用户在再次打开您的程序之前离开了几天,那么由于限制请求的限制,就会产生不小的处理时间。
【解决方案2】:

您可以使用批处理请求一起发送多个请求。这周我花了一整天的时间来解决这个问题。 java代码是这样的:

BatchRequest batchRequest = service.batch();
//callback function. (Can also define different callbacks for each request, as required)
JsonBatchCallback<Thread> callback = new JsonBatchCallback<Thread>() {

    @Override
    public void onSuccess(Thread t, HttpHeaders responseHeaders)
        throws IOException {
        System.out.println(t.getMessages().get(0).getPayload().getBody().getData());
    }

    @Override
    public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders)
        throws IOException {

    }
};

// queuing requests on the batch request
for (Thread thread : threads) {
    service.users().threads().get("me", threads.getId()).queue(batchRequest, callback);
 }


batchRequest.execute();

由问题作者添加:对于那些也有这个问题的人:https://developers.google.com/gmail/api/guides/batchhttps://developers.google.com/api-client-library/javascript/features/rpcbatch。尽管 RpcBatch 已被弃用,但它现在可以正常工作,并且每个批次的请求数限制为 1000 个。

【讨论】:

    猜你喜欢
    • 2021-04-20
    • 2017-09-02
    • 2023-04-10
    • 2016-12-12
    • 2014-08-19
    • 1970-01-01
    • 2016-01-08
    • 2014-11-24
    • 2016-12-23
    相关资源
    最近更新 更多