取消线程或永久删除单个 Gmail 邮件,而不关闭线程

2024-01-09

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

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

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

谷歌将消息串联起来,而我通常希望继续进行串联。

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

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

我在这里和其他地方看了这个:使用Google脚本从线程中永久删除仅一封Gmail消息 https://stackoverflow.com/questions/42930853/permanently-delete-only-one-gmail-message-from-a-thread-using-a-google-script

    threads[i].moveToTrash();

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

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

目标: 永久删除邮件,以便脚本不会在具有相同主题的先前邮件上运行。

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

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

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

下面的最后 2 行来自http://www.googleappsscript.org/home/fetch-gmail-attachment-to-google-drive-using-google-apps-script 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.
  }
}

Note:

  • 在使用此脚本之前,请在高级 Google 服务中启用 Gmail API https://developers.google.com/apps-script/guides/services/advanced#enabling_advanced_services.
  • 从你的问题中,我可以了解到该线程的第一条消息的主题始终是相同的。使用这个,当subject与该主题的第一条消息的主题相同,所有附件文件将被检索,并且该主题将被永久删除。
  • 在此方法中,线程和线程中的所有消息将被永久删除。因此,我建议在运行实际电子邮件的脚本之前使用示例线程进行测试。
  • 如果有多个线程在第一条消息中具有相同的主题,则会为它们运行上述修改后的脚本。也请小心这一点。

参考:

  • Users.threads:删除 https://developers.google.com/gmail/api/v1/reference/users/threads/delete
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

取消线程或永久删除单个 Gmail 邮件,而不关闭线程 的相关文章

随机推荐

  • IIS7 应用程序池无法加载具有固定基地址的库

    我的 NET 4 0 Web 服务正在使用 libeay32 dll 它是在 VS2010 中使用 FIXED 选项编译的 以便符合 FIPS 要求 这意味着 libeay32 dll 无法加载 除非它位于某个地址 0xfb00000 抛出
  • Java帮助:使用循环打印start arg和end arg之间的值的平方

    所以我是java新手 请原谅任何混乱的代码等 我必须编写一个程序 打印出命令行中声明的开始和结束参数的平方值 以及之间的值的平方 这是我到目前为止的代码 它非常粗糙 但我需要帮助来获取中间的变量以打印出来 public static voi
  • 将段落宽度限制为其父级 div

    我有以下 HTML 代码 div style width 100 div img src http www lappelducourty be test wp content uploads 2013 01 siesta 300x225 j
  • 创建浮动按钮以在电子表格中的单元格中添加/减去值

    为了简化现场数据输入 即使用平板电脑 我想在电子表格中创建按钮 用于在选定的单元格中添加或减去值 使用旋转按钮不是一种选择 因为我必须添加数百个这样的按钮 这个答案 https superuser com questions 1307146
  • 两端和之间有点的垂直线

    我一直在这里和谷歌上寻找解决方案 但没有成功 我想创建一条垂直线 其末端有点 沿线有一些点 例如img 我怎样才能用CSS实现这一点 我可以做一条有间距的虚线 但我不知道如何创建这条线 如果这可能的话 这是一个可能帮助您解决问题的快速片段
  • Python readline() 不起作用?

    我正在做一个小程序来帮助我学习Python 我对Python很陌生 我正在使用Python 3 2 在 Python shell 中 当我输入 f open filename txt r f readlines 它打印了所有内容filena
  • 如何知道代码是否在 TransactionScope 内?

    了解代码块是否在 TransactionScope 内的最佳方法是什么 Transaction Current 是一种可靠的方法吗 还是有什么微妙之处 是否可以通过反射访问内部 ContextData CurrentData Current
  • 面向 Python 程序员的 MATLAB

    我用过MATLAB http en wikipedia org wiki MATLAB以前断断续续 但现在我需要对它有一个很好的理解 而我最熟悉的语言是Python 想要描述与 Python 相比的 MATLAB 语言功能 惯用语 最佳实践
  • 在 window.open() 中使用 rel="noopener"

    所以我知道我可以申请rel noopener in an a使用时标记target blank 但我试图将其作为参数传递给window open ie window open http cats com blank rel noopener
  • Google Web Optimizer - 距离获胜组合还有多长时间?

    我已经运行了 A B 测试谷歌网络优化器已经六个星期了 而且还看不到结束的迹象 谷歌仍然表示 我们还没有收集到足够的数据来显示任何重大结果 当我们收集更多数据时 我们应该能够向您展示一个获胜的组合 有什么方法可以判断谷歌距离做出决定还有多远
  • 谷歌在没有地图的情况下放置图书馆

    我正在尝试使用谷歌地点库来执行附近的搜索请求 https developers google com maps documentation javascript places place search requests https deve
  • 使用 cv2.imshow 时获取此黑色窗口而不是图片

    我不知道应该使用什么术语来表示我得到的窗口 因此我附上了窗口的屏幕截图以供参考 在我运行此代码的 10 次中 大约有 7 次出现此窗口 import cv2 import numpy as np import face recognitio
  • 使用英特尔 MKL 计算“trans(a)*inv(b)*a”的正确方法

    我在用英特尔的 MKL LAPACKE 和 CBLAS https software intel com en us mkl developer reference c cblas gemm计算 yn trans a inv zt a tr
  • 如何在ember中绑定js输入值?

    我有一个 ember 组件 它有一个 html 输入框 例如 从我的组件中 我在输入具有如下值的搜索框时触发操作 App TopBarComponent Ember Component extend keyUp function event
  • 将 java.util.Date 转换为 java.time.LocalDate

    转换的最佳方法是什么java util Date反对新的 JDK 8 JSR 310java time LocalDate Date input new Date LocalDate date 简短回答 Date input new Dat
  • Python 3 中的相对导入不起作用[重复]

    这个问题在这里已经有答案了 我有以下目录 mydirectory init py file1 py file2 py 我在 file1 py 中定义了一个函数 f 如果在 file2 py 中我这样做 from file1 import f
  • 声纳 - 无法请求服务器版本 | HTTP 状态 404

    我正在为 Java 设置一个声纳系统 我的本地测试 SonarServer 4 0 成功连接并处理我的 antscript 我使用的是 sonar ant task 2 2 jar 但我的目标服务器 3 7 3 甚至不提供服务器版本 我尝试
  • PHP | Define() 与 const

    在 PHP 中 可以通过两种方式声明常量 With define keyword define FOO 1 Using const keyword const FOO 1 这两者之间的主要区别是什么 何时以及为何应使用其中一种 何时使用另一
  • WASM 可以在没有任何 JavaScript 的情况下访问 DOM 吗?

    有没有什么方法可以在没有 JavaScript 的情况下获得对 DOM 和 或 WebAPI 即全屏 API 的读 写访问权限 我正在尝试用 C 语言构建一个基本应用程序 C 源代码实际上是 GC 语言转译的结果 我正在构建的应用程序将作为
  • 取消线程或永久删除单个 Gmail 邮件,而不关闭线程

    我有从扫描仪通过电子邮件收到的文档 扫描仪无法改变主题 来自扫描仪的所有电子邮件主题均相同 扫描到电子邮件服务器作业 但是 每个文件名都是唯一的 谷歌将消息串联起来 而我通常希望继续进行串联 我运行一个脚本来提取 PDF 并放入驱动器 然后