【发布时间】:2019-09-17 17:38:22
【问题描述】:
使用 Google Apps 脚本,是否可以删除空的(未使用的)Gmail 标签?
【问题讨论】:
使用 Google Apps 脚本,是否可以删除空的(未使用的)Gmail 标签?
【问题讨论】:
根据上面的答案,这是一个用于删除空标签的 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;
}
【讨论】:
当然,首先使用 GmailApp.getUserLabels() 检索所有标签,然后遍历它们并使用 getThreads() 确定给定标签是否为空,最后使用 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() 是可行的方法,但如果其中一个子标签不存在,请注意不要删除空标签!
【讨论】: