GMailApp.search超出了用户速率限制

时间:2017-02-10 18:41:47

标签: gmail-api

我正在运行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]);
            }
          }
        }
      }
    }
}

有关如何避免用户速率限制的任何建议吗?

谢谢, 戴夫

1 个答案:

答案 0 :(得分:0)

基于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因任何原因无法增加的内容。

希望以上信息有帮助!