如何使用 Gmail 中的标签来识别单封邮件,而不是已由脚本处理的话题



使用谷歌邮件的谷歌脚本,我正在尝试使用API将带有某些标签的新电子邮件上传到我们的CRM。我无法检查邮件是否已上载,因此必须在邮箱中将标签应用于以前处理过的邮件。

不幸的是,谷歌脚本只允许您在线程级别添加或检查标签。由于线程在上次上传到CRM后可能会有新消息进入,因此我不知道线程的哪些消息实际上已经被处理。

下面的代码包含我想到的内容,函数getLabels不适用于消息,因此它不起作用。

希望有人有一个聪明的解决方案!

谢谢

//execute main sequence
function collecttobesend() {
    var labeladd = GmailApp.getUserLabelByName("add to CRM");
    var labeladded = GmailApp.getUserLabelByName("added to CRM");
    //var threads = label.getThreads();
    var threads = GmailApp.search('label:added-to-crm -label:add-to-crm')
    for (var i = 0; i < threads.length; i++) {
        thread = threads[i];
        // get all messages in a given thread
        var messages = thread.getMessages();
        // iterate over each message
        for (var j = 0; j < messages.length; j++) {
            message = messages[j];
            var labels = message.getLabels();
            var messagehaslabeladded = false;
            for (var k = 0; k < labels.length; k++) {
                if (labels[k] = labeladded) {
                    messagehaslabeladded = true;
                }
            }
            // if message has not been added yet
            if (messagehaslabeladded = false) {
                var success = false;
                //add to CRM through API
                success = true;
                //if succesfull add label
                if (success = true) {
                    message.addLabel(labeladded);
                }
            }
        }
    }

棘手。

在我看来,你的问题是双重的。

1) 如果线程在应用"添加到 CRM"标签后收到响应,那么该新消息甚至不会触发是否需要添加的检查,因为它永远不会应用"添加到 CRM"。

2)它将无法区分线程中已添加的消息与仍需要添加的消息之间的区别。

这不是一个特别优雅的解决方案,但关于 1),有一个繁琐但可行的解决方案。您可以使用 .getInboxThreads() 设置脚本来检查收件箱中的邮件,以检查以下内容:

 // if message might have been updated
    if (messageHasLabelAdded == true && messageIsInInbox == True) {
       //Iterate through again to index the new messages
 }

每隔几分钟运行一次应该会捕获线程中的任何新消息,但它在很大程度上依赖于用户在完成后"存档"消息。

2)您是否能够使用CRM获取/发布元数据?如果是这样,您始终可以使用 getId() 获取消息 ID。这是一个唯一的属性,因此,如果它可以与CRM中的消息相关联,则只需将ID与CRM中的ID进行比较,并检查是否已上传具有该ID的邮件即可。

一旦您将数千条消息上传到CRM,这可能会变得棘手,但这可能是您需要的开始。

我实际上找到了解决方案。正如Le Stephane评论的那样,谷歌笔记指出标签被添加到消息中,这是真的。但是,在线程级别一次向线程中的所有消息添加和删除标签。

因此,解决方案是有两个标签:"添加"和"添加"。运行第二个脚本,从线程中删除"to-add"标签(以及线程中具有标签的所有消息),并立即再次添加标签(到线程中的所有消息)。

这具有这样的效果:线程中的所有消息(无论新旧)都具有"to-add"标签,并且只有旧消息具有"已添加"标签。现在,您可以搜索标签为"待添加"的邮件,但不能搜索标签为"已添加"的邮件。在 api 将这些消息添加到 CRM 后,您将标签"已添加"添加到线程中,从而将线程中的所有消息添加到线程中。

脚本运行后传入的消息在线程中带有这些标签,但没有将标签附加到消息本身,因此上述两步方法有效。

读取

后对味精进行了"加星标"。"已加星标"仅适用于邮件。

最新更新