Gmail暂停错误:moveSnoozes“服务在短时间内调用了太多次”

时间:2013-09-11 07:41:00

标签: google-apps-script gmail

我试图找到一种在Gmail中暂停电子邮件的方法。是的,我在我的iDevice上安装了Mailbox.app,但我希望有一种方法可以使用Snooze或“Laterize”一些电子邮件。

我找到了Blog Spot postLifehacker one。 Lifehacker文章只是为Blog Sport添加了更多图片。我按照Lifehacker的说明进行操作。我只对代码做了一次偏离。在代码为“7”的两个实例中,我将其替换为“200”。

我的代码是:

var MARK_UNREAD = false;
var ADD_UNSNOOZED_LABEL = false;


function getLabelName(i) {
  return "Snooze/Snooze " + i + " days";
}

function setup() {
  // Create the labels we’ll need for snoozing
  GmailApp.createLabel("Snooze");
  for (var i = 1; i <= 200; ++i) {
    GmailApp.createLabel(getLabelName(i));
  }
  if (ADD_UNSNOOZED_LABEL) {
    GmailApp.createLabel("Unsnoozed");
  }
}

function moveSnoozes() {
  var oldLabel, newLabel, page;
  for (var i = 1; i <= 200; ++i) {
    newLabel = oldLabel;
    oldLabel = GmailApp.getUserLabelByName(getLabelName(i));
    page = null;
    // Get threads in "pages" of 100 at a time
    while(!page || page.length == 100) {
      page = oldLabel.getThreads(0, 100);
      if (page.length > 0) {
        if (newLabel) {
          // Move the threads into "today’s" label
          newLabel.addToThreads(page);
        } else {
          // Unless it’s time to unsnooze it
          GmailApp.moveThreadsToInbox(page);
          if (MARK_UNREAD) {
            GmailApp.markThreadsUnread(page);
          }
          if (ADD_UNSNOOZED_LABEL) {
            GmailApp.getUserLabelByName("Unsnoozed")
              .addToThreads(page);
          }          
        }     
        // Move the threads out of "yesterday’s" label
        oldLabel.removeFromThreads(page);
      }  
    }
  }
}

但是我收到了一个错误:

  

您的脚本Gmail Snooze最近未能完成   成功。故障摘要如下所示。

详细说明:

Start: 9/10/13 12:16 AM
Function: moveSnoozes
Error Message: Service invoked too many times in a short time: gmail rateMax. Try Utilities.sleep(1000) between calls. (line 24, file "Code")
Trigger: time-based 
End: 9/10/13 12:22 AM

有人知道如何使用Utilities.sleep(1000)吗?我在哪里输入?

1 个答案:

答案 0 :(得分:0)

您遇到的错误是因为以代码速度创建200个标签对于Gmail而言太快,并且被视为滥用它的API。因此,正如错误消息所示,您可以使用Utilities.sleep(1000)在每个标签创建之间等待一秒钟。

我不熟悉脚本(Boomerang对我来说效果很好),但您可以尝试手工制作30,60,90 180天的标签并让脚本接收它们。然后你根本不需要担心标签创建。

努力帮助您更好地理解您正在阅读的代码。以下是对正在发生的事情以及如何插入Utilities.sleep()的说明。您需要决定等待1000ms的时间意味着您需要等待200秒,如果您有3分钟的备用时间,那就可以了。您可以尝试查看Gmail应用在什么时候说'哇哇那就足够了。慢慢来吧。'

注意:我并未尝试对其进行重新设计,以便更好地创建/管理标签。可能会对代码进行一些增强,虽然很诱人,但它们仍将作为读者的练习。

你的牧师:

function setup() {

  // This creates 1 label called "Snooze"
  // it probably isn't causing the problem
  GmailApp.createLabel("Snooze");


  // This piece is a loop that will execute 200 times.
  // It will do so as fast as GAS will let it.
  // This is probably where the problem is...

  for (var i = 1; i <= 200; ++i) {
    // Create the label
    GmailApp.createLabel(getLabelName(i));

    // We should wait a bit before making the next one
    // Utilities.sleep() will do well to go here
    Utilities.sleep(/*Milliseconds to wait*/);
  }

  // I doubt this is causing the problem either.
  // It's only one label creation
  if (ADD_UNSNOOZED_LABEL) {
    GmailApp.createLabel("Unsnoozed");
  }

}