你好我试图为gmail-snooze
设置每周一次的事件,因此它不仅会重新发生一次事件。
我想将everyXweek
标记的帖子保存到" newpage"来自"页面"中已创建的Xweek
标记线程阵列。我使用page = oldLabel.getThreads(0, 100);
来获取Xweek数据。
我尝试了newpage = everyXweekLabel.page;
和newpage = page[everyXweekLabel];
但是新网页永远不会变成带有线程的数组....所以它不起作用......
我希望如何工作:
XweekSnooze
是我们的迭代倒计时标签everyXweekSnooze
是我们的静态标签,用于在放入收件箱后重置线程一个示例是thread#1
剩下1weekSnooze
(将在下一次迭代中删除)并且它还有一个every8weekSnooze
标签(需要应用{{} 1}}标签一旦电子邮件被放入收件箱)
在应用8weekSnooze
标签后,然后向下迭代(7weekSnooze,6 ...),直到它再次放入收件箱,8weekSnooze
标签将另一个every8weekSnooze
标签放回迭代。
我可以让这个工作工作n周,但我无法让每周工作部分工作,因为我无法弄清楚如何从包含Xweek标签和其他标签的先前拉取的页面线程中拉出everyXweek标签
肯定会非常感谢您提供的任何帮助!
感谢。
JP
8weekSnooze
答案 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;
}