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

Google Apps Script: How to remove empty Gmail labels?

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

当然可以,先用GmailApp.getUserLabels()获取所有的label,然后循环遍历,用getThreads()判断给定的label是否为空,最后用deleteLabel()去掉空的.

参见:

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

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

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

根据以上答案,这里有一个 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;
}