如何处理与旧邮件具有相同主题行(和发件人)的新 Gmail 邮件?
How to handle & process new Gmail messages with the same subject line (and sender) as old messages?
在 Gmail 中,我有两个接收电子邮件的过滤器:
- 过滤器 1 - 当一封带有特定主题行的电子邮件到达时(我们称之为“主题 1”),它会为电子邮件应用一个标签。
- 过滤器 2 - 当电子邮件到达时具有不同的特定主题(“主题 2”),它会向电子邮件应用相同的标签(与“主题 1”的标签)。
所有这些电子邮件的发件人都是同一发件人。电子邮件是订单确认。因此,在“主题 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();
在 Gmail 中,我有两个接收电子邮件的过滤器:
- 过滤器 1 - 当一封带有特定主题行的电子邮件到达时(我们称之为“主题 1”),它会为电子邮件应用一个标签。
- 过滤器 2 - 当电子邮件到达时具有不同的特定主题(“主题 2”),它会向电子邮件应用相同的标签(与“主题 1”的标签)。
所有这些电子邮件的发件人都是同一发件人。电子邮件是订单确认。因此,在“主题 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();