【问题标题】:how to label and check only one message ( Gmail email) in Google Script?如何在 Google Script 中仅标记和检查一封邮件(Gmail 电子邮件)?
【发布时间】:2021-02-02 09:12:07
【问题描述】:

我希望我的 Google 脚本能够解析标签内的所有电子邮件。但只是一次。这些电子邮件来自我的银行。他们存储交易细节。因为我使用线程对话视图,所以我担心脚本会 - 多次处理一条消息或错过一条消息

交易细节是同一个主题,所以它们都将成为一个线程的一部分。 我不想在 Google 脚本之外存储消息 ID 或类似的东西。

你能想出什么解决办法吗?

我在想我可以在线程中添加电子邮件 ID,但我最终会得到太多标签。

我或许可以按照此处的建议使用 Gmail API

但我不知道如何检查特定消息是否具有特定标签。

【问题讨论】:

  • 你用星号做别的事吗?
  • @Cooper,我确实使用星号来快速访问非常重要的电子邮件,但我想使用开始。一旦线程被完全处理,我可能会删除星星。
  • 我能问一下你的目标吗?关于I do not know how to check if a particular message got specific label.,在这种情况下,您要从消息中检索标签吗?
  • 我的目标是处理所有电子邮件,但要确保每封电子邮件只处理一次。在考虑如何完成时,我想我可能会使用标签。在我看来,我可以为消息而不是整个线程添加标签。现在我需要知道如何轻松检查带有特定标签的消息。现在我需要知道如何检查消息是否有标签。

标签: google-apps-script gmail-api


【解决方案1】:

您可以通过Gmail.Users.Messages.list指定标签的id来查询包含特定标签的消息

示例:

  var starredMessages = Gmail.Users.Messages.list("me", {"labelIds":"Label_981438383934575828"}).messages;
  var starredIds = [];
  starredMessages.forEach(function(message){starredIds.push(message.id)});
  • 拥有此功能后,您可以检索所有收件箱消息,将其 id 推送到数组中并过滤它们以从数组中删除已标记的消息:
  var AllIds = [];
  var allMessages = GmailApp.getInboxThreads().forEach(function(thread){thread.getMessages().forEach(function(message){AllIds.push(message.getId())})}); 
  var filteredIds= AllIds.filter(function (id) { return starredIds.indexOf(id) == -1;});
  • 因此,您获得了一个包含消息 Id 的数组,但该数组还没有指定的标签。

  • 现在,按照您的意愿处理这些消息,例如在一个循环中,然后将标签添加到它们,例如

filteredIds.forEach(function(id){Gmail.Users.Messages.modify({'addLabelIds': [LabelId]}, 'me', id)});

更新

另一种检索不带标签的消息的方法是使用查询参数q

因此,查询应指定为-label:MY LABEL

var NotStarredMessages = Gmail.Users.Messages.list("me", {"q":"-label:MY LABEL"}).messages;

但是,请记住,如果某个线程的一个消息具有标签,则第二种方法不会从列表中排除相应线程的所有消息。

所以在你的情况下不推荐第二种方法。

【讨论】:

  • 这看起来像我需要的。那么这部分var filteredIds= AllIds.filter(function (id) { return starredIds.indexOf(id) == -1;}); 会从数组中移除带标签的消息(已加星标的消息)?
  • 是的,它就是这么做的!
  • 我在想,如果有更简单的方法来查找特定帖子是否有标签,这就是我创建这个问题的原因。如果没有,那么我有一个解决方案:-)
  • 使用查询可能会更快,我将更新我的答案以说明如何。
  • 它将返回消息(和 messageIds),但查询条件似乎适用于整个线程,所以在你的情况下,我会说它不会可靠地返回所有正确的消息,因此你需要使用第一个选项(即使它涉及更多步骤)。
猜你喜欢
  • 2016-06-15
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 2014-05-26
  • 2010-11-19
  • 1970-01-01
  • 2022-10-25
  • 2017-05-17
相关资源
最近更新 更多