取消线程或永久删除单个 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 邮件,而不关闭线程 的相关文章

  • 当我尝试转发电子邮件时,时事通讯无法隐藏 Gmail 上的响应内容

    我正在尝试写一份时事通讯 但当我测试时 我无法隐藏响应式内容GMail On Outlook and Yahoo一切正常 但如果我尝试转发电子邮件 隐藏的内容就会可见 我测试使用 putsmail https putsmail com gt
  • 根据日期自动对数据进行排序

    我正在尝试使我的电子表格根据日期自动对数据进行排序 我附上了我正在使用的电子表格的照片 您会注意到 G 列中有一个工作日公式 目前 一旦我更新了配药日期 重新订购日期就会根据公式进行更新 基于安排的工作日 然后我对 G 列使用 SORT R
  • QUnit 删除依赖项上的方法会破坏针对该依赖项的测试

    在 Google Apps 脚本中 我正在对我正在开发的应用程序进行单元测试 使用 QUnit https github com simula innovation qunit tree gas gas 使用测试驱动开发 正在测试的代码 我
  • 如何在公式中的 & 之间添加换行符以生成 QR URL

    我正在谷歌表格中创建一个电子表格 用于跟踪财产房间的库存 我使用二维码作为标签 将其放置在房产上 并将与该特定房产的相关信息相关联 我正在使用以下代码 image https chart googleapis com chart chs 2
  • 在 Google 网站中嵌入 Google 电子表格时,Google Apps 脚本可帮助解决错误?

    电子表格 A 是欢迎新移民来到我们小镇的团队的主数据源 它里面有大量非常敏感的数据 不能公开 哪怕是一点点 我们谈论的是孩子的姓名和出生日期以及他们上学的地方 保证电子表格 A 的安全是至关重要的任务 因此 电子表格 B 使用 import
  • 如何在 Django 上发送重置密码电子邮件?

    在使用 Django 框架创建我的第一个网站的过程中 我遇到了一个小问题 目前还没有找到解决方案 因此 当用户想要重置他或她的密码时 我想向他 她发送一封重置邮件 到目前为止 我有这个 urls py from django contrib
  • 用于向日历活动提交表单的 Google 脚本

    学校老师使用我的个人 Google 帐户创建表单并将日历发布到我的班级网站 努力让孩子 无法访问 Google Apps 尽可能快速 轻松地安排补考使用这种形式 https docs google com forms d 1 TvsZ3Wl
  • 使用 Google Apps 脚本从 Firebase 读取数据

    因此 正如标题所示 我目前正在解决一个相当麻烦的问题 这是场景 我有一个 Google 电子表格 其中包含一个包含姓名 电子邮件和到期日期的模板 但是 它不包含实际数据 数据本身位于 Firebase 中并且不断变化 那么 我的目标是让sc
  • Gmail API 获取邮件的限制

    据我了解 目前 google 的 API 每秒向其 API 提供 10 个请求 从他们的文档中 https developers google com gmail api v1 reference quota 而且对于舒适地处理邮件来说 它
  • 列出 Google 云端硬盘上特定演示文稿/文档的所有共享用户

    我们需要一份完整的列表 列出已获得 Google 云端硬盘上特定演示文稿 文档的 共享 查看权限的人员 我们有屏幕截图 但可能还不够 我们如何以编程方式检索这些信息 附加到 a 的属性File对象包括三个与用户相关的项目 Owner 一个单
  • 我正在尝试将变量从 Google 脚本传递到 HtmlOutputFromFile

    我正在尝试创建一个带有下拉列表的输入框 其中该列表基于从电子表格中提取的二维数组 到目前为止 我的研究告诉我 如果我将 HtmlService createHtmlOutputFromFile 存储在一个变量中 我就可以 设置该变量的属性
  • 使用 Google App Engine 发送时的 Gmail 发送配额

    Gmail 规定每天 500 个收件人发送电子邮件的配额 如果您通过他们的 POP IMAP 界面发送 则配额仅为每天 100 个收件人 使用 Google 应用引擎在 Gmail 帐户上发送电子邮件的发送配额是多少 它会遵循 POP IM
  • 从 PHP 页面使用 GMail SMTP 服务器发送电子邮件

    我尝试从 PHP 页面通过 GMail 的 SMTP 服务器发送电子邮件 但收到此错误 身份验证失败 SMTP SMTP 服务器不支持身份验证 代码 250 响应 mx google com 为您服务 98 117 99 235 SIZE
  • 如何从 Google 电子表格中删除项目?

    我通过在脚本编辑器上选择 文件 gt 制作副本 错误地制作了 Google Apps 脚本项目的副本 从那时起 每次我在该项目所属的电子表格屏幕上单击 工具 gt 脚本编辑器 时 我看到显示两个项目 原始项目和复制项目 的屏幕 我需要选择一
  • 如何使 onEdit() 触发函数应用于多个工作表

    我正在处理一张 Google 表格 我有一个脚本可以填充column B当我更新时有时间戳column A在第一个选项卡上 不过 我需要它在第二个选项卡上执行相同的操作 但我无法让它在那里工作 我需要改变什么 我当前使用的脚本是 funct
  • 如何使用脚本格式化 Google 文档中的文本

    我想编写一个脚本来查找所有特定单词并格式化它们的颜色 我尝试了以下操作 但似乎不起作用 function ChangeColor var body DocumentApp getActiveDocument getBody var mywo
  • Google Web Apps - 获取用户电子邮件但以所有者身份运行脚本

    我最近迷上了谷歌网络应用程序 但我遇到了一些进退两难的问题 我正在尝试构建一个对非常特定的用户开放的应用程序 并且他们正在查看的数据根据 其访问组进行过滤 在谷歌表格中 我列出了用户电子邮件及其各自的访问组 A 列 电子邮件 B 列 访问组
  • 复制带有内嵌图像的表格

    我正在尝试将 GDoc 的内容复制到另一个 GDoc 中 这对于所有不同的元素类型都非常有效 包括一个表 枚举DocumentApp ElementType TABLE 但是 如果表包含内联图像 EnumDocumentApp Elemen
  • Clasp 无法创建新的 Apps 脚本

    我用这个终端命令克隆了一个应用程序脚本 clasp clone
  • 如何设置多个过滤器?

    我有一个关于将过滤器应用于多个值以使用 Google 脚本隐藏它们的问题 我有一个具有多种状态的项目跟踪器 例如 达到目标 已完成 已取消 已延迟 等 我想编写一个脚本来设置 状态 列的筛选器值 以便标记为 已完成 或 的行 已取消 被隐藏

随机推荐

  • 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 并放入驱动器 然后