从想“造轮子”到拥抱自动化:我如何用 Google Apps Script + Gemini 打造零成本 AI 邮件助理
作为一名开发者,每当我们遇到需求痛点时,第一反应往往是:“我要写个 App 解决它。”
最近我也陷入了这个怪圈。我的痛点很简单:每天订阅了大量的技术 Newsletter(如 TLDR, Morning Brew),但工作太忙根本看不过来,导致邮箱里堆积了几千封未读邮件。
我一开始的想法非常宏大:“我要用 Flutter 开发一个聚合邮件客户端,支持跨平台,内置 AI 总结功能。”
但在深入调研后,我被现实劝退了,却也意外发现了一条更优雅的捷径。
第一阶段:被劝退的“造轮子”之路
当我想手撸一个邮件客户端时,我原本以为只需要调调 API。但经过对现有开源方案(如 enough_mail)和技术难点的深挖,我发现这简直是一个深不见底的坑:
协议的泥潭:IMAP/SMTP 在各家服务商(Gmail, Outlook, QQ)的实现充满“方言”,光是处理 OAuth2 认证和各种古老的编码格式就能让人头秃。
渲染的噩梦:邮件本质上是混乱的 HTML。要在一个移动端 App 里安全、完美地渲染各种奇葩排版的邮件,还需要处理 Sanitizer 防止 XSS 攻击,这工作量不亚于写半个浏览器。
后台保活:这是移动端的死穴。在 iOS 和 Android 上做稳定的邮件推送(Push),需要搭建后端服务来维持长连接,这已经超出了“个人练手”的范畴。
我意识到:我真正需要的不是一个“邮件客户端 App”,而是“邮件里的信息”。
第二阶段:降维打击——Serverless 自动化方案
既然目的是“每天早上获取资讯摘要”,为什么要开发 App?为什么不让服务器自动把“嚼碎”的信息喂到我嘴边?
于是,我把目光投向了 Google Apps Script (GAS)。
这是一个被严重低估的神器。它本质上是一个基于 JavaScript 的云端脚本服务,完全免费,无需运维,且内置了 Google 全家桶(Gmail, Docs, Sheets)的权限。
配合 Google 的 Gemini 2.5 Flash 模型(目前有免费层级,且拥有百万级的 Context Window),我只用了不到 50 行代码,就实现了一个全自动的 AI 邮件日报系统。
核心架构
输入端:GAS 的
GmailApp服务,定时抓取过去 24 小时特定发件人(如[email protected])的邮件。处理端:Gemini API。将邮件正文打包,利用 Prompt Engineering 要求其进行“中英对照总结”。
输出端:将 AI 生成的 HTML 报告,自动发送到我的邮箱。
为什么选择 Gemini?
在处理 Newsletter 时,Token 窗口是关键。
一封典型的科技类 Newsletter(包含大量 HTML 标签)大约消耗 1.5k - 4k Tokens。
如果是 GPT-4 或 Claude 的普通版本,处理多封长邮件容易爆 Context。但 Gemini 2.5 Flash 拥有 250k Token 的上下文窗口。
这意味着,我甚至可以把过去一个月的所有未读邮件一次性扔给它,它都能轻松吃下,而且速度极快。
第三阶段:代码落地与坑点排查
1. 核心代码逻辑
不需要复杂的 Python 环境,不需要买 VPS,直接在浏览器打开 script.google.com 就能写:
JavaScript
function main() {
// 1. 抓取邮件
const threads = GmailApp.search('from:([email protected]) newer_than:1d');
const content = extractContent(threads); // 提取纯文本逻辑
// 2. 调用 AI (Gemini)
const summary = callGeminiAPI(content);
// 3. 发送日报给自己
GmailApp.sendEmail(Session.getActiveUser().getEmail(), "每日 AI 技术日报", "", {
htmlBody: summary
});
}2. 时区的坑
部署触发器时,我发现如果不设置时区,脚本默认按美国太平洋时间运行。为了保证每天北京时间早上 8 点准时收到日报,需要在 GAS 的项目设置里,显式将时区改为 (GMT+08:00) China Standard Time。
3. Prompt 的艺术
为了让阅读体验最好,我要求 AI 输出干净的 HTML,并强制执行格式:
"对于每条新闻,提供英文原标题,紧接着是中文核心摘要。使用
<ul>列表展示。"
这样我收到邮件时,就像是在看一份精心排版的早报,而不是一坨乱糟糟的文字。
思考:GAS 的边界与可能性
尝到甜头后,我开始思考 GAS 还能做什么。
它可以是金融助理:调用 CoinGecko API 监控 BTC 价格,每小时写入 Google Sheets 画 K 线图,跌破阈值直接发邮件报警。
它可以是运维工具:每 5 分钟 Ping 一下我的个人博客,如果 404 了就发通知。
但它不能做网关:曾设想过用它做流量代理(如 VPN),但发现它不支持 Socket 层操作,且单次运行有 6 分钟限制,完全不适合做长连接转发。
总结
这次折腾给了我一个很大的启示:
作为开发者,我们容易陷入“技术自嗨”,总想用最硬核的技术栈(Flutter, Rust, K8s)去解决问题。但在个人效率工具这个领域,"Connect"(连接)往往比 "Build"(构建)更重要。
Google Apps Script + AI API,就是一个将数据流(邮件)、算力(Gemini)和展示层(Gmail/Sheets)连接起来的完美胶水。
如果你也有类似的“信息焦虑”,不妨放下 IDE,试试写个脚本。相信我,那种每天早上醒来,私人助理已经把世界动态整理好发给你的感觉,真的不仅是爽,更是对掌控感的回归。
