【问题标题】:Script to search for multiple unread labels in Gmail threads at once一次在 Gmail 线程中搜索多个未读标签的脚本
【发布时间】:2021-03-10 04:51:34
【问题描述】:

我有以下标签结构

+------------+------------+---------------+
|   label    | sub-label  | sub-sub-label |
+------------+------------+---------------+
| 01-fruit   |            |               |
|            | 01-apples  |               |
|            |            | green         |
|            |            | red           |
|            | 02-oranges |               |
|            |            | red           |
|            |            | orange        |
| 02-veggies |            |               |
|            | 01-peppers |               |
|            |            | green         |
|            |            | red           |
+------------+------------+---------------+

使用的脚本是:

function mail2Sheets() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName('newRec'); //get the sheet
  var freshLabel = GmailApp.getUserLabelByName("00-fresh"); // in the end, add this label
  const query = "label:unread" + " label:01-fruit"; 
  var foundThreads = GmailApp.search(query);
  var newReceipts = [];
  for (var i = 0; i < foundThreads.length; i++) {

  +++++++ SOME CODE HERE +++++++

    }
  }
  if(!foundThreads.length) return; //  if there are no unread ones, do nothing.
  sheet.getRange(SpreadsheetApp.getActiveSheet().getLastRow()+1,2,newReceipts.length,newReceipts[0].length).setValues(newReceipts); //write to sheet
  GmailApp.markThreadsRead(foundThreads); // mark "foundThreads" as read
  freshLabel.addToThreads(foundThreads); // add label "00-fresh" to "foundThreads"
  GmailApp.refreshThreads(foundThreads); // refresh "foundThreads" for changes to show
}

我可以成功搜索单个标签,例如:const query = "label:unread" + " label:01-fruit";

还有。
虽然我有GmailApp.refreshThreads(foundThreads); Execution 永远不会完成。
相反,它显示Status Running

回顾

如何同时对多个标签进行查询搜索,例如
"label:unread" + " label:00-fruit/01-apples/red"

"label:unread" + " label:02-veggies/01-peppers/red"

还有。 Status Running 问题如何解决?

【问题讨论】:

  • 在你的情况下,当你想搜索label:unreadlabel:00-fruit/01-apples/red的邮件时,请使用label:unread label:00-fruit/01-apples/red的搜索查询。 " " 是一个空格,用作 AND 运算符。当您想搜索label:unreadlabel:00-fruit/01-apples/redlabel:02-veggies/01-peppers/red的邮件时,请使用label:unread (label:00-fruit/01-apples/red OR label:02-veggies/01-peppers/red)的搜索查询。 Ref 但如果我误解了你的问题,我深表歉意。
  • 谢谢@Marios。我看过那个链接。它建议启用高级谷歌服务。我一直在寻找一种方法来避免这种情况。知道为什么执行永远不会结束吗?
  • @Tanaike 环境是一个新的常规帐户,只有 77 封电子邮件和 11 条未读消息。我不明白为什么脚本需要这么长时间才能执行(5.289 秒),而且还没有完成。脚本也很简单。如果您愿意,可以查看full script hereexecution times here。没有refreshThreads 命令的(1.749 秒)执行时间。
  • 旁注:“状态:正在运行”是不可靠的消息,可能是控制台页面中的错误,而不是实际脚本。经常刷新控制台页面会改变状态。即使没有,我也会完全无视它。
  • @TheMaster。 “旁注:...” 你似乎是correct。我刚刚刷新了页面,它显示Completed。谢谢你:)

标签: google-apps-script google-sheets gmail gmail-api


【解决方案1】:
  • " " 是一个空格,用作AND 运算符。
  • OR{} 可以用作 OR 运算符。

使用上述运算符,可以实现您的目标。

  • 当您想搜索label:unreadlabel:00-fruit/01-apples/red的邮件时,请使用如下搜索查询。

    标签:未读标签:00-fruit/01-apples/red

  • 当您想搜索label:unreadlabel:00-fruit/01-apples/redlabel:02-veggies/01-peppers/red的邮件时,请使用如下搜索查询。

      label:unread (label:00-fruit/01-apples/red OR label:02-veggies/01-peppers/red)
    
  •   label:unread {label:00-fruit/01-apples/red label:02-veggies/01-peppers/red}
    

参考:

【讨论】:

  • 再次感谢您,抱歉回复晚了。
猜你喜欢
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多