使用Google Apps脚本,是否可以删除空的(未使用的)Gmail标签?
答案 0 :(得分:2)
根据上面的答案,这是一个删除空标签的Google Apps脚本(带有嵌套标签检查)。 Javascript很粗糙,但它有效! 'testing'变量确定它是仅记录还是实际删除标签。
调试,运行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()是可行的方法,但如果没有其中一个子标签,请注意不要删除空标签!