Google apps script 将消息(而不是线程)移动到存档

Google apps script 将消息(而不是线程)移动到存档,google-apps-script,Google Apps Script,背景 用户倾向于在Gmail(或通过google apps sync在Outlook中)中按下“删除”按钮,但我们希望归档所有邮件(google每30天清理一次垃圾) 迄今为止的解决方案 以下脚本每小时在触发器上运行一次,将垃圾箱中的所有线程移动到存档中 function archiveTrash() { var threads = GmailApp.getTrashThreads(0, 100); for (var i = 0; i < threads.length; i++) { th

背景 用户倾向于在Gmail(或通过google apps sync在Outlook中)中按下“删除”按钮,但我们希望归档所有邮件(google每30天清理一次垃圾)

迄今为止的解决方案 以下脚本每小时在触发器上运行一次,将垃圾箱中的所有线程移动到存档中

function archiveTrash() {
var threads = GmailApp.getTrashThreads(0, 100);
for (var i = 0; i < threads.length; i++) {
threads[i].moveToArchive();
}
}
函数archiveTrash(){
var threads=GmailApp.getTrashThreads(0100);
对于(var i=0;i
问题用户报告其收件箱中的邮件正在消失

可能原因我相信这就是正在发生的事情:用户正在处理一个消息线程,并删除线程中的一些消息(用户通常使用outlook,因此他们可以单独查看每条消息)。但是,线程中的其他消息仍保留在用户的收件箱中。然后getTrashThreads将拾取至少包含一条已删除消息的线程,脚本将整个线程移动到存档中,包括收件箱中的消息


解决方案?这就是我被困的地方。如何只归档垃圾邮件,而不是整个线程?有没有办法阻止gmail将邮件分组到线程中?我说的对吗?

Gmail只支持线程级别的归档,不支持消息级别的归档,但它允许删除单个消息。我认为您的用例不受支持。

检查线程
是否为InInbox()
。如果不是,则归档线程。如果是,请存档,然后
移动到Inbox()


编辑:我错过了你问题的最后一部分。我不知道如何存档特定邮件,使它们不会在Outlook收件箱中弹出。你可以在Gmail中关闭对话视图,但我不知道这对线程有什么影响。

不是那么简单,但可能的解决方案是:

设置用户ToArchive@YourDomain.com

遍历已删除邮件,根据已存档邮件的索引检查邮件ID,而不是线程(稍后将详细介绍索引)

将不在索引中的邮件转发到ToArcine+messageId@YourDomain.com(before@最多可以包含64个字符,因此应该可以)

在ToArchive中遍历消息,解析消息id from To:并添加到索引,然后标记为已读


将阅读邮件归档到Archive

Gmail本身确实支持在邮件级别进行归档,就像我可以关闭对话视图并通过单击按钮归档单个邮件一样。在我看来,缺少GmailMessage.MoveToArchive似乎是一项缺失的功能,因为这意味着我无法通过单击来编写脚本。你认为这值得在问题追踪中提出吗?谢谢你的回答。我现在还不想做这么复杂的事情,不过我会记住的。如果不能在Google Apps脚本中完成,我可能会在Outlook中查看一些VB脚本。在Gmail中关闭对话视图似乎不会对脚本的操作产生任何影响。就脚本而言,消息仍然在线程中,它们只是在gmail中单独显示。