如何通过Google App Script处理新收到的电子邮件?
当然可行!这其实是Google Apps Script和Gmail集成的常用玩法,刚好能补上原生过滤器做不到的自定义操作。下面给你一步步捋清楚怎么实现:
具体实现步骤
1. 先把你的脚本调整成可触发的格式
首先得确保你的脚本能接收单封邮件对象作为参数,比如把核心处理逻辑封装成这样的函数:
function handleNewEmail(message) { // 这里写你的自定义操作,比如提取邮件内容、添加自定义标签、转发给特定团队成员等 Logger.log("正在处理邮件:" + message.getSubject()); }
这个message参数是Gmail的GmailMessage对象,能调用各种邮件操作方法,满足你的自定义需求。
2. 设置触发器(替代原生过滤器的核心)
Gmail原生过滤器里没法直接选“运行脚本”,但咱可以用Apps Script的触发器来实现同样的效果:
- 打开你的Apps Script项目,点左侧那个时钟图标(「触发器」)
- 点「添加触发器」,按下面的配置来:
- 选择要运行的函数:选你刚才写的
handleNewEmail(或者你自己的函数名) - 事件来源:选「Gmail」
- 事件类型:选「收到新邮件时」
- 可选配置「收件箱包含」:这里可以填过滤规则,比如
from:xxx@example.com或者subject:重要通知,和原生过滤器的规则语法一样,用来筛选要处理的邮件 - 保存后按照提示完成权限授权就行,这一步必须做,不然脚本没权限访问你的Gmail
- 选择要运行的函数:选你刚才写的
3. 更灵活的方案:标签+触发器
如果你需要更复杂的过滤规则,也可以先在Gmail里用原生过滤器给符合条件的邮件打个专属标签(比如「需脚本处理」),然后让脚本盯着这个标签的新增邮件:
function processLabeledEmails() { var targetLabel = GmailApp.getUserLabelByName("需脚本处理"); var threads = targetLabel.getThreads(); for (var i = 0; i < threads.length; i++) { var messages = threads[i].getMessages(); messages.forEach(message => { handleNewEmail(message); }); // 处理完可以把标签去掉,避免重复处理 threads[i].removeLabel(targetLabel); } }
然后给这个函数设置一个时间驱动触发器(比如每10分钟运行一次),这样就能批量处理新打上标签的邮件了。
几个要注意的点
- 权限一定要给足:第一次运行触发器时会弹出授权请求,一定要允许脚本访问你的Gmail,不然啥都干不了
- 别碰配额红线:Google Apps Script有每日操作限额,比如Gmail的读取/修改次数,如果要处理大量邮件,最好分批次来,别一下子干太多导致被限制
- 先测试再上线:手动调用函数,传一封测试邮件进去跑一遍,确认逻辑没问题再开触发器,避免误操作邮件
内容的提问来源于stack exchange,提问作者ihf
相关产品推荐
相关产品推荐

