【问题标题】:Google Apps Script: How to remove empty Gmail labels?Google Apps 脚本:如何删除空的 Gmail 标签?
【发布时间】:2019-09-17 17:38:22
【问题描述】:

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

【问题讨论】:

    标签: google-apps-script gmail


    【解决方案1】:

    根据上面的答案,这是一个用于删除空标签的 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;
    }
    

    【讨论】:

      【解决方案2】:

      当然,首先使用 GmailApp.getUserLabels() 检索所有标签,然后遍历它们并使用 getThreads() 确定给定标签是否为空,最后使用 deleteLabel() 删除空标签。

      见:

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

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

      【讨论】:

      • 我在 Google 电子表格中创建了脚本,供每个人创建副本。获取脚本here
      • 谢谢@orschiro,但我更喜欢 James White 的版本,因为它会在删除标签之前检查标签的任何子标签是否有内容。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-28
        相关资源
        最近更新 更多