【问题标题】:getThreads() with two Labels gmail snooze script带有两个标签 gmail 贪睡脚本的 getThreads()
【发布时间】:2014-11-07 07:27:54
【问题描述】:

您好,我正在尝试为 gmail-snooze 设置 EVERY-n-week 事件,因此这将是重复发生的事件,而不仅仅是一次。

我想将everyXweek 标记线程从“page”数组中已经创建的Xweeklabeled-threads 保存到“newpage”中。我使用page = oldLabel.getThreads(0, 100); 来获取 Xweek 数据。

我尝试了newpage = everyXweekLabel.page;newpage = page[everyXweekLabel];,但是 newpage 从来没有变成一个带有线程的数组......所以它不起作用......

我希望它如何工作:

  1. 线程将有多个标签。
  2. XweekSnooze 是我们的迭代倒计时标签
  3. everyXweekSnooze 是我们的静态标签,用于在放入收件箱后重置线程

一个例子是 thread#1 剩下 1weekSnooze (将在下一次迭代中删除),它还有一个 every8weekSnooze 标签(一旦电子邮件是放入收件箱)

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

我可以在 n 周内完成这项工作,但我无法让 EVERY-n-week 部分工作,因为我无法弄清楚如何从先前提取的包含 Xweek 标签和其他标签的页面线程中提取 everyXweek 标签.

如果您能提供任何帮助,我们将不胜感激!

谢谢。

日本

function getLabelNameXWeekSnooze(i) {
    return "Snooze/" + i + "weekSnooze";
}

function getLabelNameEveryXWeekSnooze(i) {
    return "Snooze/" + "every" + i + "weekSnooze";
}

function moveWeekSnoozes() {
    var oldLabel, newLabel, page;
    for (var i = 1; i <= WEEKS_TRACKED; ++i) {
        newLabel = oldLabel;
        oldLabel = GmailApp.getUserLabelByName(getLabelNameXWeekSnooze(i));
        page = null;
        newpage = 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 {
                // Time to Unsnooze
                GmailApp.moveThreadsToInbox(page);
                if (MARK_UNREAD) {
                    GmailApp.markThreadsUnread(page);
                }

                // after returning mail to inbox please create an 
                // XweekSnooze label for every thread in page that has associated everyXweekSnooze label
                // for example every3weekSnooze thread will need 3weekSnooze label to iterate/delay from
                for (var j = 1; j <= WEEKS_TRACKED; ++j) {
                    // format the label data            
                    everyXweekLabel = GmailApp.getUserLabelByName(getLabelNameEveryXWeekSnooze(j));
                    XweekLabel = GmailApp.getUserLabelByName(getLabelNameXWeekSnooze(j));

                    //trying to grab all thread from page that have everyXweek label and save to new page
                    newpage = everyXweekLabel.page;
                    if (newpage.length > 0) {
                        XweekLabel.addToThreads(newpage);
                    }
                }     

                // Move the threads out of "yesterday’s" label
                oldLabel.removeFromThreads(page);
            }
        }
    }
}

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

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

    基本上,您问题中的问题归结为需要找到一组均具有两个指定标签的 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多