微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

例外:服务在一天内调用次数过多:gmail - Gmail 自动存档 注意:

如何解决例外:服务在一天内调用次数过多:gmail - Gmail 自动存档 注意:

每 15 分钟触发一次下面的代码以归档从 Google 表格提供的标签并收到此错误

异常:服务在一天内调用次数过多:gmail。 在 archiveThreadsByLabel(archiveOldMessagesByLabelAndCategory:52:24) 在去(archiveOldMessagesByLabelAndCategory:21:15)

任何编辑建议,以便我可以每 15 分钟运行一次?对此非常陌生,因此将不胜感激任何帮助。

谢谢! :)

原文出处: https://github.com/warwickallen/GMail-Archive-old-messages-by-label-and-category

代码

function go() {
  var fname = "Archive old messages by label and category";
  var files = DriveApp.getFilesByName(fname);
  var spreadsheet;
  while ((typeof spreadsheet !== 'object') && files.hasNext())
  {
    try
    {
      spreadsheet = SpreadsheetApp.openById(files.next().getId());
    }
    catch (e)
    {
      Logger.log("WARNING: " + e.message)
    }
  }
  if (typeof spreadsheet !== 'object')
  {
    Logger.log("FATAL: Cannot find a Google speadsheet called '" + fname + "'.");
    return -1;
  }
  var count = archiveThreadsByLabel(getSheetData(spreadsheet,"label"));
  count += archiveThreadsByCategory(getSheetData(spreadsheet,"category"));
  Logger.log("INFO: Archived " + count + " threads.");
}

function getSheetData(spreadsheet,sheet_name)
{
  var data_array = spreadsheet.getSheetByName(sheet_name).getDatarange().getValues();
  data_array.shift();  // Remove the headings row.
  var data_object = new Object;
  data_array.forEach(function(datum) {data_object[datum[0]] = datum[1]});
  return data_object;
}

function archiveThreadsByLabel(minAgesInHours) {
  var blockSize = 50;
  var start = 0;
  var count = 0;

  while (1)
  {
    var threads = GmailApp.getInBoxThreads(start,blockSize);
    if (threads.length < 1) break;
    start += threads.length;

    for (var label in minAgesInHours)
    {
      var maxTime = new Date();
      var localCount = 0;
      maxTime.setTime(maxTime.getTime() - minAgesInHours[label]*3600000);
      for (var i = 0; i < threads.length; i++)
        if (threads[i].getLastMessageDate() < maxTime)
        {
          var labels = threads[i].getLabels();
          for (var j = 0; j < labels.length; j++)
            if (labels[j].getName() == label)
            {
              Logger.log("INFO:\n    " + threads[i].getFirstMessageSubject() + "\n    " + threads[i].getLastMessageDate());
              threads[i].movetoArchive();
              localCount++;
              break;
            }
        }
      Logger.log("INFO: Archived " + localCount + " threads labelled '" + label + "' that are older than " + maxTime);
      count += localCount;
    }
    Utilities.sleep(1000);  // Google doesn't like it if GmailApp API calls are called too often in a short period of time.
  }
  return count;
}

function archiveThreadsByCategory(minAgesInHours) {
  var blockSize = 50;
  var count = 0;

  for (var category in minAgesInHours)
  {
    var start = 0;
    var localCount = 0;
    var maxTime = new Date();
    maxTime.setTime(maxTime.getTime() - minAgesInHours[category]*3600000);
    var query = 'in:inBox category:' + category + ' before:' + maxTime.getFullYear() + '-' + (maxTime.getMonth() + 1) + '-' + (maxTime.getDate() + 1);
    while (1)
    {
      var threads = GmailApp.search(query,start,blockSize);
      if (threads.length < 1) break;
      start += threads.length;
      for (var i = 0; i < threads.length; i++)
        if (threads[i].getLastMessageDate() < maxTime)
        {
          Logger.log("\n    " + threads[i].getFirstMessageSubject() + "\n    " + threads[i].getLastMessageDate());
          threads[i].movetoArchive();
          localCount++;
        }
      Utilities.sleep(1000);  // Google doesn't like it if GmailApp API calls are called too often in a short period of time.
    }
    Logger.log("INFO: Archived " + localCount + " threads categoriSAEd as '" + category + "' that are older than " + maxTime);
    count += localCount;
  }
  return count;
}

解决方法

我们在应用脚本中有 quotas

您的错误意味着您已达到一天内阅读/编写电子邮件的配额。

quota

消费者/免费版为 20000,工作区帐户为 50000。

您可以做的最简单的事情是延长触发间隔,使其不会超过配额。

注意:

  • 配额每天都会重置(顾名思义),但我不确定具体时间。
  • 使用 MailApp.getRemainingDailyQuota() 检查您的剩余配额。您可以通过在测试脚本中每次执行方法时进行检查来检查哪些方法会影响配额。这样,您就可以估计您的间隔应该是多少,这样您就不会超过它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。