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

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

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

扫描仪无法更改主题。来自扫描仪的所有电子邮件主题都相同 "Scan to E-mail Server Job"

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

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

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

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

我在这里和其他地方看过这个:

    threads[i].moveToTrash();

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

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

目标: 永久删除邮件,这样脚本就不会 运行 处理之前具有相同主题的邮件。

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

或添加适用于不会阻塞我的 labels/folders.

的单个消息(不是线程)的标签

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

下面来自 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的方法删除跟帖时,跟帖中的所有消息也会被删除。这会反映到您的脚本中。

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

修改后的脚本:

在此修改中,您的问题脚本中添加了 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 与线程第一条消息的主题相同时,将检索所有附件并永久删除线程。
  • 在这个方法中,线程和线程中的所有消息都被永久删除。因此,我建议您先使用示例线程进行测试 运行 实际电子邮件的脚本。
  • 如果有多个主题在第一条消息中具有相同的主题,则上面修改的脚本是 运行。也请注意这一点。

参考: