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

时间:2014-09-11 13:45:35

标签: gmail google-apps-script javascript

在工作中,我们有一个每4小时运行一次的Google脚本代码,并检查每个人的@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标签,我怎么才能移动电子邮件?

2 个答案:

答案 0 :(得分:2)

这是我的尝试:

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 (thread.isUnread() && doesThisThreadHaveTheLabel === false) {

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

var doesThisThreadHaveTheLabel = false;

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

您可以调试代码进行检查:

Debug Window

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

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

在该图片中,代码暂停在第269行。我可以单步执行到下一行代码,方法是点击步骤图标。将鼠标悬停在图标上可以弹出上下文帮助。

Debug The Code

我进一步逐行走,并检索放入变量&#34; ThisParticularLabel&#34;的标签。您可以在窗口中看到它的值为 @Josh

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

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

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

答案 1 :(得分:0)

脚本不会以两个for循环结尾都使用变量i,因为内部for循环会将i连续设置为0,并且不会递增。将内部循环切换到j变量,脚本将完成。