0

Gmail で電子メールをスヌーズする方法を見つけようとしています。はい、iDevice に Mailbox.app がありましたが、一部のメールをスヌーズまたは「ラテライズ」する方法が必要です。

ブログ スポットの投稿ライフハッカーの投稿を見つけました。Lifehacker の記事は、Blog Sport の記事に写真を追加しただけです。ライフハッカーの指示に従いました。コードからの逸脱は 1 つだけです。コードに「7」と表示されている 2 つのインスタンスでは、「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)か? どこに入力すればよいですか?

4

1 に答える 1

0

コードの速度で 200 個のラベルを作成するのは Gmail には速すぎて、API の悪用と見なされるため、エラーが発生しました。エラー メッセージが示すように、Utilities.sleep(1000)各ラベルの作成の間に 1 秒待つことができます。

私はスクリプトに慣れていません ( Boomerangは私にとってはうまく機能します) が、手動で 30 日、60 日、90 日、180 日のラベルを作成し、スクリプトにそれらを反映させてみてください。そうすれば、ラベルの作成についてまったく心配する必要はありません。

読んでいるコードをよりよく理解するのに役立つように。以下は、何が起こっているのか、どのように挿入するのかの説明ですUtilities.sleep()。1000 ミリ秒を待機する時間を決定する必要があります。これは、200 秒待機していることを意味し、3 分の余裕があればそれで十分です。Gmail アプリがどの時点で「おお、それで十分です。ゆっくりしてください。

注: ラベルの作成/管理を改善するためにこれを再設計しようとしているわけではありません。コードにはおそらく多くの拡張機能があり、魅力的ではありますが、読者の演習として残します。

RE あなたのニセ菓子:

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");
  }

}
于 2013-09-14T12:07:36.830 に答える