关于谷歌应用脚??本:取消线程或永久删除个别 gmail 消息,而不关闭线程

Unthread or permanently delete individual gmail messages, without turning off threading

我有文件从扫描仪通过电子邮件进入。

扫描仪不能改变主题。来自扫描仪的所有电子邮件主题都是相同的"扫描到电子邮件服务器作业"

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

Google 将消息串连起来,我通常希望继续串连。

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

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

我在这里和其他地方看过这个:
使用 google 脚本仅从线程中永久删除一条 gmail 消息

1
    threads[i].moveToTrash();

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

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

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

或在收到邮件后将主题更改为文件名,并在提取邮件附件后停止线程处理

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  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的方法删除线程时,线程中的所有消息也被删除。这反映在您的脚本中。

在此方法中,线程和线程中的所有消息都将被永久删除。所以在测试时请注意这一点。

修改后的脚本:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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.
  }
}

笔记:

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

参考:

  • 用户线程:删除