如何使用 Gmail 中的标签来识别单个邮件而不是已由脚本处理的线程

2023-12-22

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

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

下面的代码包含了我的想法,函数 getLabels 不适用于 Message,但是它不起作用。

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

Thanks

//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);
                }
            }
        }
    }

Tricky.

我认为你的问题是双重的。

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

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

这不是一个特别优雅的解决方案,但对于 1),有一个麻烦但可行的解决方案。您可以使用以下命令设置脚本来检查收件箱中的邮件.getInboxThreads() https://developers.google.com/apps-script/reference/gmail/gmail-app#getInboxThreads()检查类似的内容:

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

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

2) 您是否能够通过 CRM 获取/发布元数据?如果是这样,您始终可以使用以下方式获取消息 IDgetId() https://developers.google.com/apps-script/reference/gmail/gmail-message#getId()。这是一个独特的属性,因此如果它可以与您的 CRM 中的消息关联,那么只需将该 ID 与您的 CRM 中的 ID 进行比较并检查是否已上传具有该 ID 的消息即可。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Gmail 中的标签来识别单个邮件而不是已由脚本处理的线程 的相关文章

随机推荐