Google apps script 按家长筛选Gmail标签,以便在特定天数后删除

Google apps script 按家长筛选Gmail标签,以便在特定天数后删除,google-apps-script,gmail,Google Apps Script,Gmail,我放弃了按类别管理Gmail,因为它们在我手机上的第三方电子邮件工具中过滤不好,所以我求助于将我所有的时事通讯、博客帖子、优惠券等过滤成标签和子标签 我有一个GScript函数,可以在一段时间后删除标签,但我不知道如何让代码也包含父/子标签 例如,我有一个名为“-时事通讯”的标签和一系列时事通讯类型的子标签(即,-时事通讯/博客,-时事通讯/优惠券,-时事通讯/新闻等)。当我搜索确切的标签时,下面显示的代码非常有效,但我正在尝试修改它,以便在将来可能设置的所有父/子标签上运行代码 有没有办法通过

我放弃了按类别管理Gmail,因为它们在我手机上的第三方电子邮件工具中过滤不好,所以我求助于将我所有的时事通讯、博客帖子、优惠券等过滤成标签和子标签

我有一个GScript函数,可以在一段时间后删除标签,但我不知道如何让代码也包含父/子标签

例如,我有一个名为“-时事通讯”的标签和一系列时事通讯类型的子标签(即,-时事通讯/博客,-时事通讯/优惠券,-时事通讯/新闻等)。当我搜索确切的标签时,下面显示的代码非常有效,但我正在尝试修改它,以便在将来可能设置的所有父/子标签上运行代码

有没有办法通过GmailApp.search函数实现这一点?还是只需要为每个单独的搜索字符串重复代码

下面的代码删除所有带有“时事通讯”标签且超过3天的电子邮件,但不删除 “-时事通讯/博客”或“-时事通讯/新闻”。我不确定如何设置一个变量来捕获子标签名,或者如何将该变量放置在GmailApp.search函数中

提前谢谢

function cleanUpNewsletterLabel() {
  var delayDays = 3 // Enter # of days before messages are moved to trash
  var maxDate = new Date();
  maxDate.setDate(maxDate.getDate()-delayDays);
  var threads = GmailApp.search('label:-Newsletters -is:starred'); // filter all emails with -Newsletters label not starred
  for (var i = 0; i < threads.length; i++) {
    if (threads[i].getLastMessageDate()<maxDate)
      {
        threads[i].moveToTrash();
      }
  }
}
函数cleanUpNewsletterLabel(){
var delayDays=3//输入消息移动到垃圾箱前的天数
var maxDate=新日期();
maxDate.setDate(maxDate.getDate()-delayDays);
var threads=GmailApp.search('label:-newslettes-is:starred');//过滤所有带有-newslettes标签的电子邮件
对于(var i=0;i
相反,您可以通过以下方式检索所有子标签:

  • 使用检索所有标签
  • 由于子标签名称的格式为:
    {parentLabelName}/{childLabelName}/..
    ,因此筛选此标签的条件是其名称以父标签名称开头
  • 对于每个筛选的标签,搜索相应的线程
可能是这样的:

const parentLabelName=“-新闻稿”;
const labels=GmailApp.getUserLabels();
常量filteredLabels=labels.filter(label=>label.getName().startsWith(parentLabelName));
forEach(filteredLabel=>{
const threads=GmailApp.search(`label:${filteredLabel.getName()}-is:starred`);
//删除线程(您的代码)
});
我认为没有一种方法可以用来获取所有子标签(似乎只支持完全匹配)

相反,您可以通过以下方式检索所有子标签:

  • 使用检索所有标签
  • 由于子标签名称的格式为:
    {parentLabelName}/{childLabelName}/..
    ,因此筛选此标签的条件是其名称以父标签名称开头
  • 对于每个筛选的标签,搜索相应的线程
可能是这样的:

const parentLabelName=“-新闻稿”;
const labels=GmailApp.getUserLabels();
常量filteredLabels=labels.filter(label=>label.getName().startsWith(parentLabelName));
forEach(filteredLabel=>{
const threads=GmailApp.search(`label:${filteredLabel.getName()}-is:starred`);
//删除线程(您的代码)
});