Google apps script 如何处理,;是否处理与旧邮件主题行(和发件人)相同的新Gmail邮件?
在Gmail中,我对收到的电子邮件有两个过滤器:Google apps script 如何处理,;是否处理与旧邮件主题行(和发件人)相同的新Gmail邮件?,google-apps-script,gmail,gmail-api,Google Apps Script,Gmail,Gmail Api,在Gmail中,我对收到的电子邮件有两个过滤器: 筛选器1-当电子邮件到达时带有特定的主题行(我们称之为“主题1”),它会对电子邮件应用标签 过滤器2-当电子邮件到达时带有不同的特定主题(“主题2”),它会将相同的标签(作为“主题1”的标签)应用于电子邮件 所有这些电子邮件的发件人都是同一个发件人。这些电子邮件是订单确认。因此,在“主题1”电子邮件(与“主题2”相同)中,电子邮件格式相同,只是客户名称不同,等等。唯一标识符是所有电子邮件中的订单 然后我有一个谷歌应用程序脚本,每x分钟运行一次
- 筛选器1-当电子邮件到达时带有特定的主题行(我们称之为“主题1”),它会对电子邮件应用标签
- 过滤器2-当电子邮件到达时带有不同的特定主题(“主题2”),它会将相同的标签(作为“主题1”的标签)应用于电子邮件
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 ---
var gmailLabelName=“GmailLabelIGaveTheEmails”
var gmillabelobject=GmailApp.getUserLabelByName(gmillabelName);
var threads=gmaillabobject.getThreads();
对于(var i=0;i
问题是,当你给收到的邮件贴上标签时,Gmail也会有效地给过去(1天?)所有主题相同的邮件贴上标签
因此,当您在邮件中循环(j
loop)时,您不仅会收到刚下的新订单/刚收到的新电子邮件,还会收到所有最近已处理的订单/电子邮件
我一直在做的是跟踪哪些订单已经处理。如果消息
(上面显示的变量)订单已经处理,那么我使用“continue”转到下一条消息[j]
然而,这是非常低效的——必须查看每封电子邮件,查看您已处理的订单列表,如果尚未处理,则进行处理
这一切都源于这样一个事实,即Gmail将同一主题行的电子邮件分组到一个线程中,这样当你给一封新邮件贴上标签时,它就会有效地给它们贴上标签
有谁知道有更好的方法可以做到这一点,只处理全新的订单电子邮件/订单,而不必查看旧订单并确定它们是否已被处理?Oleg Valter找到了正确的解决方案。请参见我问题下方的上面的评论 当一封电子邮件通过Gmail过滤器到达时,我现在不仅给它贴上标签,而且给它加上星星 在上面显示的代码中 ---处理订单--- 然后我有以下代码:
if (!message.isStarred()) {
continue;
}
然后在脚本的底部,在返回到顶部并获取下一条消息之前:
message.unstar();
相关:。还有这个:,还有这个:。谢谢@olegvater。我现在考虑的是在收到邮件时是否可以将其加上星号,而不是仅仅使用过滤器应用标签,然后使用isStarred()在脚本中。是的,像这样的东西可能是你目前最好的选择-我自己为客户做了类似的事情-工作非常可靠。希望我们有一个
onNewMessage
触发器,但是唉。。。