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;
}
使用 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;
}