gpt4 book ai didi

google-apps-script - 在不关闭线程的情况下取消线程或永久删除单个 gmail 邮件

转载 作者:行者123 更新时间:2023-12-04 15:41:02 26 4
gpt4 key购买 nike

我有文档通过扫描仪通过电子邮件收到。

扫描仪无法更改主题。来自扫描仪的所有电子邮件主题都是相同的“扫描到电子邮件服务器作业”

但是,每个文件名都是唯一的。

Google 线程消息,我通常希望继续线程。

我运行一个脚本来提取 PDF 并放入驱动器,然后将消息发送到垃圾箱。

问题是.. future 的扫描会在整个线程上运行相同的脚本,所以每次运行脚本时我都会得到相同文档的大量副本。

我在这里和其他地方看过这个: permanently delete only one gmail message from a thread using a google script

    threads[i].moveToTrash();

预期行为:不要对垃圾箱中的邮件运行脚本。问题是,整个线程都被标记为垃圾。

实际行为:它在整个线程上运行脚本.. 甚至垃圾桶中来自同一发件人且主题相同的邮件。

目标:永久删除消息,这样脚本就不会在具有相同主题的先前消息上运行。

或者在收到邮件后根据文件名更改主题,并在提取附件后停止对邮件进行线程处理

或者添加适用于单个消息(不是线程)的标签,不会阻塞我的标签/文件夹。

另外,澄清一下,我不能只检查文件名是否唯一...因为它们经常在驱动器中重命名。

下面的最后两行来自 http://www.googleappsscript.org/home/fetch-gmail-attachment-to-google-drive-using-google-apps-script不工作。整个线程被重新处理...所有附件都被重新添加。

  var root = DriveApp.getRootFolder();
for(var i in threads){
var mesgs = threads[i].getMessages();
for(var j in mesgs){
//get attachments
var attachments = mesgs[j].getAttachments();
for(var k in attachments){
var attachment = attachments[k];
var isImageType = checkIfImage_(attachment);
if(!isImageType) continue;
var attachmentBlob = attachment.copyBlob();
var file = DriveApp.createFile(attachmentBlob);
parentFolder.addFile(file);
root.removeFile(file);
}
}
threads[i].addLabel(label);

//ADDED BELOW TO MOVE TO TRASH
threads[i].moveToTrash();
threads[i].removeFromThread();


}

最佳答案

  • 您想完全删除线程中的消息,并且还想在从线程中的所有消息中检索到所有附件后永久删除该线程。
  • 线程的主题总是相同的。
  • 您想使用 Google Apps 脚本实现这一目标。

如果我的理解是正确的,这个答案怎么样?在此答案中,您的问题中的脚本已被修改。请将此视为几个答案之一。

当使用Users.threads: delete 方法删除线程时,线程中的所有消息也将被删除。这会反射(reflect)到您的脚本中。

在这个方法中,线程和线程中的所有消息都被永久删除。所以大家在测试的时候要注意这一点。

修改后的脚本:

在此修改中,您的问题中的脚本添加了 3 行。请检查以下修改后的脚本。在运行脚本之前,请设置用于检查主题的subject 变量。

var subject = "sample subject"; // Added: Please set the subject of the thread.
var root = DriveApp.getRootFolder();
for(var i in threads){
if (threads[i].getFirstMessageSubject() == subject) { // Added: Here, "subject" is checked.
var mesgs = threads[i].getMessages();
for(var j in mesgs){
//get attachments
var attachments = mesgs[j].getAttachments();
for(var k in attachments){
var attachment = attachments[k];
var isImageType = checkIfImage_(attachment);
if(!isImageType) continue;
var attachmentBlob = attachment.copyBlob();
var file = DriveApp.createFile(attachmentBlob);
parentFolder.addFile(file);
root.removeFile(file);
}
}
Gmail.Users.Threads.remove("me", threads[i].getId()); // Added: Here, the thread and all mesagges in the thread are permanently deleted.
}
}

备注:

  • 在你使用这个脚本之前,please enable Gmail API at Advanced Google Services .
  • 从你的问题中,我可以理解线程的第一条消息的主题总是相同的。使用此方法,当 subject 与线程的第一条消息的主题相同时,将检索所有附件并永久删除该线程。
  • 在这个方法中,线程和线程中的所有消息都被永久删除。因此,我建议您在为实际电子邮件运行脚本之前使用示例线程进行测试。
  • 如果有多个线程在第一条消息中具有相同的主题,则为它们运行上面修改的脚本。也请注意这一点。

引用:

关于google-apps-script - 在不关闭线程的情况下取消线程或永久删除单个 gmail 邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57778990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com