2015-04-21 63 views

回答

1

当然,首先使用GmailApp.getUserLabels()检索所有标签,然后遍历它们并使用getThreads()确定给定标签是否为空,最后使用deleteLabel()删除空标签。

参见:

https://developers.google.com/apps-script/reference/gmail/gmail-app

https://developers.google.com/apps-script/reference/gmail/gmail-label

+0

谷歌Apps脚本我创建的脚本在谷歌电子表格为大家创造一个副本。获取脚本[这里](https://docs.google.com/spreadsheets/d/1Pl89ClWMGkSaykD3QvuPdRdMeVHHUng6HF2m--7OeXU/edit?usp=sharing)。 – orschiro

1

GmailApp.getUserLabels(),getThreads()和deleteLabel()是去了,但照顾,如果没有一个要删除的空标签的方式它的子标签不是!

1

根据上面的答案,这里是一个Google Apps脚本,用于删除空标签(使用嵌套标签检查)。 JavaScript是粗糙的,但它的工作原理! “测试”变量确定它是否仅记录或实际删除标签。

可以调试,运行在https://script.google.com

// 
// Set to 'false' if you want to actually delete labels 
// otherwise it will log them but not delete them. 
// 
var testing = true; 

// 
// Deletes labels with no email threads 
// 
function deleteEmptyLabels() { 

    Logger.log("Starting label cleanup"); 

    var allLabels = GmailApp.getUserLabels(); 

    var emptyLabels = allLabels.filter(function(label){ return isTreeEmpty(label, allLabels); }); 

    for (var i = 0; i < emptyLabels.length; i++){ 

     Logger.log('Deleting empty label ' + emptyLabels[i].getName()); 

     if (!testing){ 
      emptyLabels[i].deleteLabel(); 
     } 
    } 

    Logger.log("Finished label cleanup"); 
} 

// 
// Finds labels below a parent 
// 
function getNestedLabels(parent, allLabels) { 
    var name = parent.getName() + '/'; 
    return allLabels.filter(function(label) { 
     return label.getName().slice(0, name.length) == name; 
    }); 
} 

// 
// Tests a single label for 'emptiness' 
// 
function isLabelEmpty(label){ 
    return label.getThreads(0, 1) == 0; 
} 

// 
// Tests a label, and nested labels for 'emptiness' 
// 
function isTreeEmpty(label, allLabels){ 

    if (!isLabelEmpty(label)) 
     return false; 

    var nested = getNestedLabels(label, allLabels); 

    for(var j = 0; j < nested.length; j++){ 
     if (!isTreeEmpty(nested[j], allLabels)) 
      return false; 
     } 

    return true; 
} 
相关问题