【问题标题】:GMailApp.search user-rate limit exceeded超出 GMailApp.search 用户速率限制
【发布时间】:2017-02-11 23:15:28
【问题描述】:

我正在运行 GmailApp.search 来查找未标记的电子邮件,对其进行分类,然后在它符合各种规则时对其进行标记。该脚本每 10 分钟触发一次,但会收到“超出用户速率限制”警告。下面是我正在运行的 GmailApp 搜索。通常,我的收件箱中只有不到 100 封未标记的电子邮件,所以如果搜索效率很高,我不认为这会占用大量资源。

function RunRules()
{
    var threads = GmailApp.search("label:inbox has:nouserlabels");
    if (threads.length > 0)
    {
      for (var idxThread=threads.length-1; idxThread>=0; idxThread--)
      {
        var messages = threads[idxThread].getMessages();
        if (messages) 
        {
          for (var idxMsg=messages.length-1; idxMsg>=0; idxMsg--)
          {

            if (messages[idxMsg].isInInbox())
            {
              RunRulesOnMessage(messages[idxMsg]);
            }
          }
        }
      }
    }
}

有什么建议可以避免用户速率限制吗?

谢谢, 戴夫

【问题讨论】:

    标签: gmail-api


    【解决方案1】:

    基于Usage Limits,Gmail API 的每用户速率限制为250 quota per second

    进一步阅读,请注意,您可以使用的每种方法也有相应的配额单位,如上所述,请求消耗的配额单位数量取决于调用的方法。

    因此,例如,如果客户端请求使用 messages.get(相当于每个请求的 5 配额单位)获取 75 条未标记消息,则您可能会超出每个用户的速率限制。

    为此,我建议您尝试以下方法:

    • 在出现临时错误(例如 HTTP 429 错误、HTTP 403 配额错误或 HTTP 5xx 错误)时使用 exponential backoff 实现重试。
    • batching requests 鼓励您的客户端将多个 API 调用放入单个 HTTP 请求中。但是,较大的批处理大小可能会触发速率限制,因此不建议发送大于 50 个请求的批处理。

    最后,您可能还需要检查 Gmail Per-User Limits,因为任何原因都不能增加。

    希望以上信息有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-19
      • 2015-04-24
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 2019-05-08
      • 2014-09-18
      相关资源
      最近更新 更多