使用AppsScript实现Gmail自动化

2020-06-06 23:04:30

我们都被电子邮件淹没了。问题不在于明目张胆的垃圾邮件--订阅大部分垃圾邮件并屏蔽其余内容很容易。真正的杀手是一封有点有趣的电子邮件:关于你外围参与的项目的讨论,每周的时事通讯,几个月前你提交的关于GitHub问题的闲聊,以及所有其他你有时间就略过的邮件,如果你忙的话就跳过。手动分类这些电子邮件可能是一场令人精疲力竭的打地鼠游戏。但如果你是Gmail用户,还是有希望的--你可以使用AppsScript将大部分工作自动化。最棒的是,它是免费的!在这篇文章中,我将带领您创建您的第一个AppsScript项目,并让您体验一下您可以实现什么。(向Prashant Varanasi致敬,他首先向我介绍了AppsScript。)。创建一个新的AppsScript项目,然后添加一个小函数并保存该项目。这段代码还没有做任何事情,但是我们稍后会添加它。AppsScript包含类似cron的触发器服务,但您必须小心:Google限制了脚本运行的时间,也限制了您可以执行的Gmail操作的数量。对我来说,每15分钟运行一次我的电子邮件管理脚本,可以让我的收件箱保持整洁,而不会耗尽我的配额。直接从编辑器中为processMail函数设置基于时间的触发器,方法是转到“编辑”,然后转到“当前项目的触发器”,最后转到右下角的“添加触发器”。我的电子邮件自动化的最简单部分一次只在一个线程上工作,不需要进一步的上下文:例如,我使用一个小函数来确保我所有存档的电子邮件都标记为已读。(令我困惑的是,这并不是默认设置,因为这是让徽章在Gmail的移动应用中发挥作用的唯一方法。)。函数processMail(){Const Rules=[markArchivedRead];for(Let Rule Of Rules){Rule();}}函数markArchivedRead(){return eachThread(";Gmail:标记已读取的存档线程";,";-in:收件箱为:未读";,函数(线程){thread.markRead();});}函数eachThread(operation,query,f){const thread=GInbox is:unread";,function(Thread){thread.markRead();}。=0){Logger.log(";%s:没有与查询%s";,operation,query)匹配的线程;return;}const n=threads.length;Logger.log(";%s:找到与查询%s";,operation,n,query)匹配的%s个线程;对于(让线程线程){f(线程);}Logger.log(";%s:已处理%s个线程,完成!";,n,operation);}。

我大部分时间都有5-10个这样的小任务处于活动状态,每个线程帮助器都会让它们保持简洁。请注意,每个Thread将自己限制为每次调用最多处理100个线程,以保持较短的执行时间,并限制消耗的Gmail操作的数量。我使用类似的每线程函数来完成各种简单的任务,其中大多数任务都是在我开始落后时整理我的存档邮件或清理我的收件箱,例如:取消存档中的所有内容。我使用星号来保护收件箱线程,使其不会进一步自动化;对于参考材料,我使用标签。追溯性地将标签应用到我的存档中,因为Gmail UI在修改超过几千个线程时挂起。将促销活动存档(使用谷歌的自动分类)超过三天,除非它们是明星。在归档一年后删除大量通知。来自Sentry等异常跟踪系统的电子邮件是基于时间删除的一个很好的候选者:当它是最新的时候,它是有价值的信息,但不值得永远保留几十亿字节。有一段时间,我自动归档了有很多参与者的长时间运行的线程,没有来自我的电子邮件,也没有提到我负责的团队或项目。这需要大量的维护工作,而且有相当多的正面影响,但当我在一些极端官僚的工程委员会任职时,我的头脑仍然保持清醒。

尽管我的初衷是好的,但时事通讯和其他不必要的帖子经常堆积在我的收件箱里。手工清理这些积压的东西是很痛苦的,因为我实际上想读其中的大部分:我最终会苦恼于是否还有时间再读一篇有趣的文章或帖子,打开一百万个浏览器标签,燃烧几个小时的时间,最好在其他地方度过。相反,我使用过滤器在邮件到达时标记有趣但可选的邮件。(我有很多过滤器,我最近开始使用gmailctl管理这些过滤器。)。如果我的收件箱里堆积了超过100封这样的电子邮件,我会将较旧的邮件存档,直到只剩下50封。我还给自动存档的邮件加了标签,所以如果它们稍后出现在搜索中,我知道我还没有读过它们。函数limitInbox(){const max=100;const op=";gmail:Limit收件箱";;const清除=GmailApp.getUserLabelByName(";optional/purged";);常量线程=GmailApp.search(";in:收件箱标签:可选";);Logger.log(";%s:%s可选线程";,op,threads.length);IF(threads.length<;=max){Logger.log(";%s。返回;}让n=0;for(让