如何移除GMail标签 - Google Apps脚本

4

我想要从每个被放回收件箱的信息中删除标签“跟进”。我已经尝试了几种方法,但都没有成功。希望有人能够帮助我或指点我正确的方向。相关的函数是:

function moveToInbox(page) {
  GmailApp.moveThreadsToInbox(page);
//  GmailApp.markThreadsUnread(page);
//  GmailApp.starMessages(page)
  var label = GmailApp.getUserLabelByName("FollowUp");
  var firstThread = GmailApp.getInboxThreads(0,1)[0];
  var coupleOfMessages = firstThread.getMessages().slice(0, 10);
  GmailApp.starMessages(coupleOfMessages);
  label.removeFromThread(firstThread);
}

整个脚本如下:
function getLabelName(i, labelSuffixString) {
  return "FollowUp/" + i + labelSuffixString;
}

function setup() {
  for (var i = 1; i <= 7; ++i) {
    GmailApp.createLabel(getLabelName(i, "days"));
    GmailApp.createLabel(getLabelName(i, "weeks"));
  }
  GmailApp.createLabel("FollowUp");
}

function moveToInbox(page) {
  GmailApp.moveThreadsToInbox(page);
//  GmailApp.markThreadsUnread(page);
//  GmailApp.starMessages(page)
  var label = GmailApp.getUserLabelByName("FollowUp");
  var firstThread = GmailApp.getInboxThreads(0,1)[0];
  var coupleOfMessages = firstThread.getMessages().slice(0, 10);
  GmailApp.starMessages(coupleOfMessages);
  label.removeFromThread(firstThread);
}

function cleanOldFollowUpLabels() {
  var searchString = "-label:inbox label:FollowUp";
  for (var i = 1; i <= 7; ++i) {
    searchString += " -label:" + getLabelName(i, "days");
    searchString += " -label:" + getLabelName(i, "weeks");
  }
  searchString = searchString.replace(RegExp("/", "g"), "-");
  Logger.log("cleanOldFollowUpLabels() Search String:");
  Logger.log(searchString);
  var followUpLabel = GmailApp.getUserLabelByName("FollowUp");  
  var page = null;
  // Get threads in "pages" of 100 at a time
  while(!page || page.length == 100) {
    page = GmailApp.search(searchString, 0, 100);
    Logger.log("found: " + page.length);
    if (page.length > 0)
      followUpLabel.removeFromThreads(page);   
  }
}

function update(labelSuffixString) {
  var oldLabel, newLabel, page;
  var followUpLabel = GmailApp.getUserLabelByName("FollowUp");
  for (var i = 1; i <= 7; ++i) {
    newLabel = oldLabel;
    oldLabel = GmailApp.getUserLabelByName(getLabelName(i, labelSuffixString));
    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) {
        followUpLabel.addToThreads(page);
        if (newLabel) {
          // Move the threads into "today’s" label
          newLabel.addToThreads(page);
        } else {
          moveToInbox(page);
        }     
        // Move the threads out of "yesterday’s" label
        oldLabel.removeFromThreads(page);
        // Wait for a minute to prevent timeout errors
        Utilities.sleep(1000);
      }  
    }
  }
}

function dailyUpdate() {
  update("days");
}
function weeklyUpdate() {
  update("weeks");
}

你看到了什么行为?当你运行代码时会发生什么?你执行的是什么函数?此外,您可以使用执行记录来查看正在发生什么并进行调试。 - Srik
这是我收到的错误信息:Function:dailyUpdate 错误信息:ReferenceError: “FollowUp”未定义。(第36行,“Code”文件)→ 我认为我已经将followUp.removeFromThread(firstThread)更改为label.removeFromThread(firstThread) - Thieme Hennis
1个回答

7
如果你想要将所有主题中的 "FollowUp" 标签移除,可以使用 label.deleteLabel()。但是,由于你只对从垃圾箱恢复到收件箱的主题中的标签感兴趣,所以需要逐个循环遍历它们。
function moveToInbox(threadArray) {
  GmailApp.moveThreadsToInbox(threadArray);
  var label = GmailApp.getUserLabelByName("FollowUp");
  for (var i=0; i< threadArray.length; i++) {
    threadArray[i].removeLabel(label);
  }
}

会尝试一下!谢谢。你自己试过这个脚本吗?它对于“暂停”消息以进行后续操作非常有用。 - Thieme Hennis
我在你建议的那一行之前添加了一行代码 "threadArray[i].starMessages(label);",但是出现了错误信息:"TypeError: Cannot find function starMessages in object GmailThread. (line 42, file "Code")" -- 我该如何为移动到收件箱的每个邮件添加星标? - Thieme Hennis
我做了一个测试,它成功了!非常感谢。如果你有任何关于如何给移动到收件箱的消息添加星标、将其标记为未读或者标记为重要的想法,请与我分享。我尝试了几种方法,但都没有成功。 - Thieme Hennis
1
阅读GmailThreadGmailMessage的文档,确保您选择适用于其中一个类的方法。例如,GmailThread.markUnread()GmailThread.markImportant()可以直接在removeLabel()之后使用,因为它们作用于线程。然而,星号是通过GmailMessage.star()应用到消息中的,所以您需要添加另一个循环来遍历每个线程中的消息并单独将它们标记为星号。 - Mogsdad
尝试使用GmailThread.markUnread();,但是我收到了这个错误:“ReferenceError:“GmailThread”未定义。(第43行,文件“Code”)。” - Thieme Hennis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接