【问题标题】:How to keep gmail threads from coming back如何防止gmail线程回来
【发布时间】:2020-03-15 21:56:19
【问题描述】:

我有这个功能,我每小时运行一次。它会检查收件箱中是否有发往邮件列表的消息。然后它会重新格式化它们,保存附件,并将它们转发到另一个电子邮件地址,然后表面上丢弃处理过的邮件。效果很好,除了....

我最近遇到了一个不会死的线程。它有超过 50 条回复,当新回复带有相同主题行时,线程中所有已处理的旧消息都会再次处理。所以我的发件箱呈指数增长,收件人的电子邮件收件箱也是如此。我不确定我是否只是没有有效地删除已发送的消息,或者是否有其他方法我应该在线程中识别已处理的消息,以便在将更多消息添加到线程时不会再次处理它们.我不知道这是应用程序脚本问题还是 gmail 问题。

这是我的代码:

function processPMFMail(){
  var threads = GmailApp.getInboxThreads();
  var message = GmailApp.getMessagesForThreads(threads); 
  for(var i = 0; i < message.length; i++) {
    for(var j = 0; j < message[i].length; j++) {
      var from = message[i][j].getFrom();
      var to = message[i][j].getTo();
      var cc = message[i][j].getCc();
      var bcc = message[i][j].getBcc();
      var fields = {to, cc, bcc};
                    //Logger.log(to);

                    if (
                    [to,cc,bcc].some(field =>
                    ["EMAIL-1","EMAIL-2"].some(email => field.includes(email))
                    )
                    ) {
                    var subject = cleanSubject(message[i][j]);
                    if (subject == "DoNotPost") {
                    Logger.log("Email not for posting - " + cleanSubject(message[i][j]));
                    message[i][j].moveToTrash();
                   } else{
                    var from = parseEmailName(message[i][j]);
                    var body = message[i][j].getPlainBody();
                    var hBody = message[i][j].getBody();
                    var attachment = saveAttachments(message[i][j]);
                    var opening = "<br>From: " + from + "<br> Sent: "+ Utilities.formatDate(message[i][j].getDate(), "US/Eastern", "M/d/yy @ h:mm aaa") + "<br><br>" + attachment;
                    if (hBody.indexOf("</body>")>-1) {
                    hBody = removeForwards (hBody);
                    hBody = hBody.replace("</body>",opening + "</body>").trim();
                   } else{
                    hBody = hBody + opening;
                   }
                    Logger.log(subject + opening);
                    //send the message
                    GmailApp.sendEmail("EMAIL-3", subject , opening + body , 
                    {htmlBody: hBody, 
                    name: from
                   })  
    }  // end of processed messages
    //move the message to the trash
    message[i][j].moveToTrash();
  } 
  else {Logger.log("No Messages to forward")}
}
}

}

感谢任何指点。

-DH

【问题讨论】:

    标签: google-apps-script gmail


    【解决方案1】:

    因此,如果我理解正确,您会一遍又一遍地从一个线程中获取所有消息。

    但最终这是意料之中的,因为您首先获得GmailThread,然后检查线程中的每个GmailMessage。即使您已经检查并删除了它,它也是线程的一部分,并且在使用getMessagesForThreads() 时将其取回是正常的。

    我建议在每条消息(在 for 嵌套循环内)中使用 isInTrash(),以检查您是否已将此消息移至垃圾箱。

    类似这样的:

    function processPMFMail() {
        var threads = GmailApp.getInboxThreads();
        var message = GmailApp.getMessagesForThreads(threads);
        for (var i = 0; i < message.length; i++) {
            for (var j = 0; j < message[i].length; j++) {
                if (!message[i][j].isInTrash()) {
                    var from = message[i][j].getFrom();
                    var to = message[i][j].getTo();
                    var cc = message[i][j].getCc();
                    var bcc = message[i][j].getBcc();
                    var from = message[i][j].getFrom();
                    var fields = { to, cc, bcc };
                    //Logger.log(to);
    
                    if (
                        [to, cc, bcc].some(field =>
                            ["EMAIL-1", "EMAIL-2"].some(email => field.includes(email))
                        )
                    ) {
                        var subject = cleanSubject(message[i][j]);
                        if (subject == "DoNotPost") {
                            Logger.log("Email not for posting - " + cleanSubject(message[i][j]));
                            message[i][j].moveToTrash();
                        } else {
                            var from = parseEmailName(message[i][j]);
                            var body = message[i][j].getPlainBody();
                            var hBody = message[i][j].getBody();
                            var attachment = saveAttachments(message[i][j]);
                            var opening = "<br>From: " + from + "<br> Sent: " + Utilities.formatDate(message[i][j].getDate(), "US/Eastern", "M/d/yy @ h:mm aaa") + "<br><br>" + attachment;
                            if (hBody.indexOf("</body>") > -1) {
                                hBody = removeForwards(hBody);
                                hBody = hBody.replace("</body>", opening + "</body>").trim();
                            } else {
                                hBody = hBody + opening;
                            }
                            Logger.log(subject + opening);
                            //send the message
                            GmailApp.sendEmail("EMAIL-3", subject, opening + body,
                                {
                                    htmlBody: hBody,
                                    name: from
                                })
                        }  // end of processed messages
                        //move the message to the trash
                        message[i][j].moveToTrash();
                    }
                    else { Logger.log("No Messages to forward") }
                }
            }
        }
    
    }
    

    【讨论】:

    • 酷。我会试试看。有没有! message[i][j].isInTrash() 前面的意思是“不”,如“如果不在垃圾箱中?”
    • 没错。你可以看看这个page for boolean comparison in JavaScript
    • 工作就像一个魅力。这么简单的答案。有时,你只是看不到它盯着你的脸。谢谢。
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2011-04-06
    • 1970-01-01
    相关资源
    最近更新 更多