Google Apps脚本:如何删除空的Gmail标签?

时间:2015-04-21 08:28:08

标签: google-apps-script gmail

使用Google Apps脚本,是否可以删除空的(未使用的)Gmail标签?

3 个答案:

答案 0 :(得分:2)

根据上面的答案,这是一个删除空标签的Google Apps脚本(带有嵌套标签检查)。 Javascript很粗糙,但它有效! 'testing'变量确定它是仅记录还是实际删除标签。

您可以在https://script.google.com

调试,运行Google Apps脚本
//
// 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;
}

答案 1 :(得分: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

答案 2 :(得分:1)

GmailApp.getUserLabels(),getThreads()和deleteLabel()是可行的方法,但如果没有其中一个子标签,请注意不要删除空标签!