Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何处理,;是否处理与旧邮件主题行(和发件人)相同的新Gmail邮件?_Google Apps Script_Gmail_Gmail Api - Fatal编程技术网

Google apps script 如何处理,;是否处理与旧邮件主题行(和发件人)相同的新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分钟运行一次

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

  • 筛选器1-当电子邮件到达时带有特定的主题行(我们称之为“主题1”),它会对电子邮件应用标签
  • 过滤器2-当电子邮件到达时带有不同的特定主题(“主题2”),它会将相同的标签(作为“主题1”的标签)应用于电子邮件
所有这些电子邮件的发件人都是同一个发件人。这些电子邮件是订单确认。因此,在“主题1”电子邮件(与“主题2”相同)中,电子邮件格式相同,只是客户名称不同,等等。唯一标识符是所有电子邮件中的订单

然后我有一个谷歌应用程序脚本,每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 ---
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
触发器,但是唉。。。