Javascript 谷歌应用程序脚本-如何阻止新消息进入旧线程?
我有一个GoogleApps脚本,可以解析带有“incomming”标签的线程,将它们发送到webhook,然后将它们标记为“sent”Javascript 谷歌应用程序脚本-如何阻止新消息进入旧线程?,javascript,google-apps-script,gmail,Javascript,Google Apps Script,Gmail,我有一个GoogleApps脚本,可以解析带有“incomming”标签的线程,将它们发送到webhook,然后将它们标记为“sent” 函数send(){ var label=GmailApp.getUserLabelByName('incomming'); var sentlab=GmailApp.getUserLabelByName('sent'); var消息=[]; var threads=label.getThreads(); 对于(var i=0;i
函数send(){
var label=GmailApp.getUserLabelByName('incomming');
var sentlab=GmailApp.getUserLabelByName('sent');
var消息=[];
var threads=label.getThreads();
对于(var i=0;i
问题是,因为这些电子邮件是由一个服务生成的,它们有相似的主题-有时是相同的主题(我不能在服务中更改此主题)
假设主题为“X1上的更新”
当收到“X1更新”的电子邮件时,脚本工作正常,发送时无需担心。
但是,如果一个新的“更新X1”,它会同时发送新的和旧的,因为Gmail会标记整个线程
这导致大量重复。我怎样才能解决这个问题呢?我想让大家了解一下Gmail上的线程标签 从现在起(对于可感知的未来),一个线程将拥有它消息中的所有标签
这仍然对您有帮助,因为您可以快速隔离哪些线程包含带有“传入”标签的消息 如果不是“传入”而是指收件箱中的邮件(已接收邮件),则可以查找标签“收件箱”,如图所示 通过拥有此消息子列表,您可以使用来处理包含的消息。然后,您可以使用for Gmail调用来检索表示,包括它的标签列表
labelIds[]
然后,您可以操纵每条消息,并在发送消息时向其添加标签
替代解决方案 另一种解决方案是使用某种形式的存储,在其中存储已处理的
messageId
s,然后在将它们发送给webhook之前检查它们
你可以通过应用程序脚本,甚至是你自己的DIY谷歌文档解决方案来实现这一点
这不是一项要求,但如果您希望在Gmail之外存储长期查询的消息,这可能会很有用。“因为您可以快速隔离哪些线程包含带有“传入”标签的消息。”。。。。怎样?你只是漫不经心地提到这一点,没有任何解释。在没有外部服务或在谷歌云上启动服务器的情况下,有没有办法做到这一点?我只想要一封简单的电子邮件转发到webhook。Gmail让这一切变得更加困难。它应该是“如果message=new,send,now message=send”@NictraSavios。要获取带有特定标签的消息,您可以查看您的任务上的代码<代码>GmailApp.getUserLabelByName('incomming')代码>。如果不是“传入”而是指收件箱中的邮件(已接收邮件),则可以查找标签“收件箱”,如图所示。至于第二个问题,应用程序脚本不需要谷歌云上的服务器或外部服务。我的替代解决方案将使用它来长期存储发送或不发送的消息,但这不是执行操作所必需的。
function send() {
var label = GmailApp.getUserLabelByName('incomming');
var sentlabel = GmailApp.getUserLabelByName('sent');
var messages = [];
var threads = label.getThreads();
for (var i = 0; i < threads.length; i++) {
messages = messages.concat(threads[i].getMessages())
}
for (var i = 0; i < messages.length; i++) {
var message = messages[i];
Logger.log(message);
var payload = {
"from": message.getFrom(),
"to": message.getTo(),
"cc": message.getCc(),
"date": message.getDate(),
"subject": message.getSubject(),
"txtbody": message.getPlainBody()
};
var options = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify(payload),
};
var webhookUrl = '<redacted>';
UrlFetchApp.fetch(webhookUrl, options);
}
// remove the label from these threads so we don't send them to
// slack again next time the script is run
label.removeFromThreads(threads);
Utilities.sleep(200);
sentlabel.addToThreads(threads);
for (var i = 0; i < threads.length; i++) {
threads[i].moveToArchive();
}
}