2013-01-23 38 views
1

背景 用户倾向于按下Gmail中的“删除”按钮(或通过谷歌应用程序同步在Outlook中),但我们想要归档所有邮件(谷歌清理垃圾每30天)。移动邮件(非线程)归档

到目前为止的解决方案 以下脚本每小时在触发器上运行,将垃圾桶中的任何线程移动到归档中。

function archiveTrash() { 
var threads = GmailApp.getTrashThreads(0, 100); 
for (var i = 0; i < threads.length; i++) { 
threads[i].moveToArchive(); 
} 
} 

问题用户也报告说,消息是从他们的收件箱消失。

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

解决方案?这是我卡住的地方。我如何只存档垃圾邮件,而不是整个线程?有没有办法阻止gmail将消息分组成线程?我甚至对正在发生的事情是正确的吗?

回答

0

Gmail仅支持在线程级别进行存档,而不是在消息级别,但允许删除单个消息。我不认为你的用例被支持。

+2

Gmail中读取消息_per se_在消息级别不支持归档,如我可以关闭会话视图,并通过点击按钮,存档个别消息。缺乏GmailMessage.MoveToArchive在我看来是一个缺失的功能,因为这意味着我无法通过点击来编写我能做的事情。你认为这个问题跟踪器值得提出吗? – user2003974

0

检查线程是否为isInInbox()。如果不是,则存档该线程。如果是,则归档,然后moveToInbox()

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

+1

关闭Gmail中的对话视图对脚本的操作似乎没有任何影响。就脚本而言,消息仍处于线程中,它们只是在gmail中单独显示。 – user2003974

0

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

设置用户[email protected]

迭代通过删除的邮件检查消息ID,不是线程,对已归档的邮件指数(更多指数后)

将不在索引中的消息转发到[email protected](在@之前最多可以有64个字符,因此应该可以)。

迭代ToArchive中的消息解析消息ID从To:并添加到索引,然后标记为已读。

档案馆ToArchive

+0

感谢您的回答。我不想做任何复杂的事情,但我会牢记在心。如果无法在Google Apps脚本中完成,我可能会在Outlook中查看一些VB脚本。 – user2003974