gmail – 使用Google Script检查邮件是否有标签

在工作中,我们有一个每4小时运行一次的谷歌脚本代码,并检查每个人的@folders是否有未读邮件.如果找到未读邮件,则将其移至INBOX并使用@@ UNREAD标记.

我需要的是一种方法,让脚本检查它是否已经有@@ UNREAD标签,在这种情况下不会移动到收件箱.

这是代码

function process_unread() {

    //Define user label
    var label = GmailApp.getUserLabelByName("@Josh");

    //Define unread label
    var unreadlabel = GmailApp.getUserLabelByName("@@UNREAD");

    if (label) {
        var threads = label.getThreads();

        for (var i = 0; i < threads.length; i++) {
            var thread = threads[i];
            if (thread.isUnread()) {
                //Remove label
                thread.addLabel(unreadlabel);
                thread.moveToInbox();
            }
        }

    }
}

如果他们没有@@ UNREAD标签,我怎么能只移动电子邮件?

最佳答案 这是我的尝试:

function process_unread() {

    //Define user label
    var label = GmailApp.getUserLabelByName("@Josh");

    //Define unread label
    var unreadlabel = GmailApp.getUserLabelByName("@@UNREAD");

    if (label) {
        var threads = label.getThreads();

        for (var i = 0; i < threads.length; i++) {
            var thread = threads[i];

            var labels = thread.getLabels();
            var doesThisThreadHaveTheLabel = false;

              for (var i = 0; i < labels.length; i++) {
                var thisParticularLabel = labels[i].getName();
                Logger.log(labels[i].getName());

                if (thisParticularLabel === "@@UNREAD") {
                  var doesThisThreadHaveTheLabel = true;
                };
            }

            if (thread.isUnread() && doesThisThreadHaveTheLabel === false) {
                //Remove label
                thread.addLabel(unreadlabel);
                thread.moveToInbox();
            }
        }

    }
}

在将线程移动到收件箱之前,您需要确保它没有标签.所以在If检查中添加另一个条件.

if (thread.isUnread() && doesThisThreadHaveTheLabel === false) {

我创建了一个变量:doesThisThreadHaveTheLabel,它将具有true或false值.在每个for循环之前,它的默认设置为false.

var doesThisThreadHaveTheLabel = false;

    for (var i = 0; i < labels.length; i++) {

您可以调试代码来检查它:

在上图中,您会看到菜单中的错误图标.在单击之前,首先单击错误右侧的下拉菜单,然后选择要运行的函数的名称.另外,在代码中添加断点.在该图片中,您将在代码编辑器中的行号中看到一个红点.这就是代码停止的地方.

我将标签@josh添加到我帐户中的一封电子邮件中,因此变量标签中有一个对象.但是,我没有任何带有@@ UNREAD标签的电子邮件,因此您会注意到变量列表中的变量unreadlabel的值为null.

在该图片中,代码暂停在第269行.我可以通过单击图标中的步骤进入下一行代码.将鼠标悬停在图标上可以弹出上下文帮助.

我进一步逐行,并检索放入变量“ThisParticularLabel”的标签.您可以在窗口中看到它的值为@Josh.

我逐步完成了代码,它在主循环运行一次后结束.我也没有调试它自己运行该代码,它运行于:

执行成功[0.246秒总运行时间]

您需要调试代码,查看它在每一行上的作用,并了解每个变量对于某个值的作用,以及条件语句的工作方式.

点赞