如何处理与旧邮件具有相同主题行(和发件人)的新 Gmail 邮件?

How to handle & process new Gmail messages with the same subject line (and sender) as old messages?

在 Gmail 中,我有两个接收电子邮件的过滤器:

所有这些电子邮件的发件人都是同一发件人。电子邮件是订单确认。因此,在“主题 1”电子邮件(与“主题 2”相同)中,电子邮件格式相同,只是客户名称不同等。唯一标识符是所有电子邮件中的订单号。

然后我有一个 Google Apps Script 脚本,每 x 分钟运行一次,查看是否有任何带有标签的电子邮件。这是脚本的一部分:

var gmailLabelName = "GmailLabelIGaveTheEmails"
var gmailLabelObject = GmailApp.getUserLabelByName(gmailLabelName);
var threads = gmailLabelObject.getThreads();

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

  for (var j = 0;  j < messages.length;  j++) {
    message = messages[j];
    emailText = message.getPlainBody();

    --- Process the order ---

问题是,当您标记收到的电子邮件时,Gmail 也会有效地标记过去(1 天?)具有相同主题的所有电子邮件。

因此,当您循环浏览消息时(j 上面的循环),您不仅会得到刚刚下达的新订单/刚收到的新电子邮件,还会得到所有最近的-也处理了 orders/emails。

我一直在做的是跟踪哪些订单 #s 已经被处理。如果 message(变量如上所示)订单 # 已经被处理,那么我使用“继续”转到下一条消息 [j].

但是,这是非常低效的 - 必须查看每封电子邮件,查看已处理的订单列表,然后处理尚未处理的订单。

这一切都源于 Gmail 将相同主题行的电子邮件分组到一个线程中,因此当您标记一封新电子邮件时,它会有效地标记所有电子邮件。

有谁知道这样做的更好方法,以便只处理全新的订单 emails/orders 而不必查看旧订单并确定它们是否已被处理?

Oleg Valter 有正确的解决方案。在我的问题下方查看他的评论。

当一封电子邮件到达时,通过 Gmail 过滤器,我现在不仅给它贴上标签,还给它加注星标。

在上面显示的代码中,它说 --- 处理订单 ---

然后我有以下代码:

if (!message.isStarred()) {
  continue;
}

然后在脚本的底部,在循环回到顶部并获取下一条消息之前:

message.unstar();