getThreads()带有两个标签gmail snooze脚本

时间:2014-09-29 04:14:32

标签: google-apps-script

你好我试图为gmail-snooze设置每周一次的事件,因此它不仅会重新发生一次事件。

我想将everyXweek标记的帖子保存到" newpage"来自"页面"中已创建的Xweek标记线程阵列。我使用page = oldLabel.getThreads(0, 100);来获取Xweek数据。

我尝试了newpage = everyXweekLabel.page;newpage = page[everyXweekLabel];但是新网页永远不会变成带有线程的数组....所以它不起作用......

我希望如何工作:

  1. 线程将有多个标签。
  2. XweekSnooze是我们的迭代倒计时标签
  3. everyXweekSnooze是我们的静态标签,用于在放入收件箱后重置线程
  4. 一个示例是thread#1剩下1weekSnooze(将在下一次迭代中删除)并且它还有一个every8weekSnooze标签(需要应用{{} 1}}标签一旦电子邮件被放入收件箱)

    在应用8weekSnooze标签后,然后向下迭代(7weekSnooze,6 ...),直到它再次放入收件箱,8weekSnooze标签将另一个every8weekSnooze标签放回迭代。

    我可以让这个工作工作n周,但我无法让每周工作部分工作,因为我无法弄清楚如何从包含Xweek标签和其他标签的先前拉取的页面线程中拉出everyXweek标签

    肯定会非常感谢您提供的任何帮助!

    感谢。

    JP

    8weekSnooze

1 个答案:

答案 0 :(得分:0)

作为参考,可以在此处找到原始Gmail Snooze算法:Gmail Snooze with Apps Script。该算法基于在线程上渗透一组Gmail标签的想法,使用Apps Script触发器来处理时间。

基本上,您的问题中的问题归结为需要找到一组所有具有两个指定标签的GmailThreads(即,具有标签A的线程集合和具有标签B的集合的并集)

Apps脚本没有提供直接的方法,所以你必须做一些工作。方法很简单:获取具有标签A的线程集,遍历它们以检查每个标签B,然后记录具有这两者的线程。

在这种情况下,我们将使用一个对象来记录已移动到收件箱但现在需要重置的线程。调整完所有其他标签后,我们将进行单独的重置步骤。单独执行此操作非常重要,因为如果在渗透时重置线程,则会意外地将其调整太多次。

function moveSnoozes() {
  var oldLabel, newLabel, page;

  // Set up an empty record of threads that will need
  // to be reset
  var resets = {};
  for (var i = 1; i <= WEEKS_TRACKED; ++i) {
    resets[getLabelNameXWeekSnooze(i)] = [];
  }

  for (var i = 1; i <= WEEKS_TRACKED; ++i) {
    newLabel = oldLabel;
    oldLabel = GmailApp.getUserLabelByName(getLabelNameXWeekSnooze(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);
          }

          // Now check for everyXweekSnooze label and 
          // record individual threads that need to be reset
          for(var t=0; t<page.length; t++) {
            var thread = page[t];
            var resetLabel = findResetLabel(thread);
            if(resetLabel) {
              resets[resetLabel.getName()].push(thread);
            }
          }

          if (ADD_UNSNOOZED_LABEL) {
            GmailApp.getUserLabelByName("Unsnoozed")
              .addToThreads(page);
          }          
        }     
        // Move the threads out of "yesterday’s" label
        oldLabel.removeFromThreads(page);
      }  
    }
  }

  // Reset recorded threads
  for (var i = 1; i <= WEEKS_TRACKED; ++i) {
    var resetLabelName = getLabelNameXWeekSnooze(i);
    var resetLabel = GmailApp.getUserLabelByName(resetLabelName);
    resetLabel.addToThreads(resets[resetLabelName]);    
  }
}

// Given a GmailThread, check to see if it has
// any of the everyXweekSnooze labels and return
// the first one found
// @param {Object} thread - GmailThread to examine
// @return {Object} GmailLabel - the first everyXweekSnooze
//    label found, or null if none are found
function findResetLabel(thread) {
  for (var i = WEEKS_TRACKED; i >= 1; i--) {
    var label = getLabelNameEveryXWeekSnooze(i);
    var labels = thread.getLabels();
    for (var j = 0; j < labels.length; j++) {
      if(labels[j].getName() == label) {
        return GmailApp.getUserLabelByName(getLabelNameXWeekSnooze(i));
      }
    }
  }
  return null;
}
相关问题