【发布时间】: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方法一起使用。