从 Gmail 获取应用程序脚本函数中的子标签

问题描述 投票:0回答:2

问题来了: 我有三个不同的类别,我想将它们分组在一个具有三个子标签的独特标签中。然后,我想选择这些子标签并运行我的脚本。

这里是Gmail中的实际情况: as is situation

我想将所有这些标签放在嵌套它们的主标签下,如下所示: nested labels

现在,在 Gmail 中嵌套标签非常容易,但主要问题是当您运行基于嵌套标签的脚本时。这是我的功能:

function getGmailEmails(){
  var label = GmailApp.getUserLabelByName("UtentiSW");
  var threads = label.getThreads();
  
  for(var i = threads.length - 1; i >=0; i--){
    var messages = threads[i].getMessages();
    
    for (var j = 0; j <messages.length; j++){
      var message = messages[j];
      if (message.isUnread()){
        extractDetails(message);
        GmailApp.markMessageRead(message);
        }
    }
    //threads[i].removeLabel(label); //delete the label after getting the message
    
  }
  
}

如果我尝试创建一个嵌套标签并使用所示的标签名称在函数中选择它,则不起作用。仅当我按照第一张图片将标签放入 gmail 的根文件夹中时,它才有效。

有人可以帮忙吗?谢谢

google-apps-script
2个回答
0
投票

创建标签和子标签

在子标签之前创建标签

function createLabelsAndSubLabel() {
  const labels = ["Q1","Q1/1","Q1/2","Q1/3"]
  labels.forEach(l => GmailApp.createLabel(l))
}
  • 我从未尝试过超过 4 个级别,但如果你想扩展它,你可以,只需记住在子标签之前创建标签,否则它们都会变成单独的标签,你必须删除它们并重新开始。

Gmail 中的样子:

  • 抱歉我的背影是图像

在电子表格中列出所有标签

function listAllLabels() {
  let labels = JSON.parse(Gmail.Users.Labels.list("me")).labels;
  let hdr = ["Name","Vis","Type","id"]
  let o = labels.map(obj => [obj.name,obj.messageListVisibility,obj.type,obj.id]);
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet0');
  sh.clearContents();
  o.unshift(hdr);
  sh.getRange(1,1,o.length,o[0].length).setValues(o).sort({column:1,ascending:true});
}
  • 需要启用Gmail API

关于您的上一条评论,我添加了此代码来为现有标签创建子标签

function createLabelsAndSubLabel() {
  const labels = ["Q1/3/1","Q1/3/2","Q1/3/3"]
  labels.forEach(l => GmailApp.createLabel(l))
}


0
投票

我遇到了和你一样的问题,但通过一点点修补我设法解决了它。

见代码:

function GetEmailByLabel() {
   var threads = GmailApp.getUserLabelByName("name of root label"/"name of sublabel").getThreads();
   // Do as you wish with the emails

希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.