【问题标题】:Unthread or permanently delete individual gmail messages, without turning off threading在不关闭线程的情况下取消线程或永久删除单个 Gmail 邮件
【发布时间】:2020-01-06 19:00:57
【问题描述】:

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

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

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

谷歌线程消息,我通常想继续线程。

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

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

我在这里和其他地方看过这个: 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();


  }

【问题讨论】:

  • 当你想在不破坏线程的情况下完全删除线程中的一条消息时,可以使用Gmail API中的Users.messages:delete方法。 Ref 但是从你的问题来看,我不确定你的脚本中使用这种方法的部分。那么你能提供你当前的脚本吗?我想确认您的脚本并考虑解决方案和/或变通方法。
  • 您好,我正在使用这个:googleappsscript.org/home/…github.com/ahochsteger/gmail2gdrive/blob/master/Code.gs 问题列在限制部分。一切都有相同的主题和相同的发件人,所以它被线程化。
  • 感谢您回复和更新您的问题。在您的脚本中,检索了多个线程,并且正在检索每个线程中的所有消息。但是在您的问题中,线程似乎是恒定的。如果现有的一个线程ID即使在收到新消息时也是不变的,那么如何只检查消息而不使用线程ID检查所有线程,并在检索到附件文件后完全删除消息?
  • 脚本是在触发器上运行还是您手动执行?如果在触发器上,您可以检索最新消息。如果您手动执行此操作,那么 Tanaike 的方法效果最好,在遍历附件后,使用消息 (mesgs[j]),获取其 ID 并将其与上述建议的 Users.messages: delete 方法一起使用。

标签: google-apps-script gmail


【解决方案1】:
  • 您想要完全删除线程中的消息,并且还希望在从线程中的所有消息中检索到所有附件文件后永久删除线程。
  • 线程的主题始终相同。
  • 您希望使用 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与线程第一条消息的主题相同时,将检索所有附件文件并永久删除线程。
  • 在此方法中,线程和线程中的所有消息将被永久删除。因此,我建议您在运行实际电子邮件的脚本之前使用示例线程进行测试。
  • 如果有多个线程在第一条消息中具有相同的主题,则为它们运行上述修改后的脚本。也请注意这一点。

参考:

【讨论】:

  • 谢谢 - 我试过了,但没有用。是因为“我”吗?电子邮件来自别名,发送到别名。来自扫描仪的电子邮件来自 images@mydomain.com 并转到别名scanner1@mydomain.com ? (是的,我有主题 =“扫描到电子邮件服务器作业”)。我还为此脚本启用了 Gmail 的高级 Google 服务
  • @B D 哦,对不起。我忘了写这个。在使用此脚本之前,please enable Gmail API at Advanced Google Services。根据我对您的情况的了解,您可以使用me of Gmail.Users.Threads.remove("me", threads[i].getId());
  • @B D 还有,关于did not work.,能否提供详细信息?
  • 谢谢!我认为这是我的错误。我不得不将代码中更高的查询更改为query = 'in:inbox to:scanner1@mydomain.com has:attachment' + query; 你的帮助一如既往地令人惊叹:)
  • @B D 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 2019-08-26
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
相关资源
最近更新 更多