2026-10-07 · 原文发布日
只把高置信陌生垃圾信扫进 Spam
每日 cron 或 Telegram 触发后,读取未读收件箱,并用近期发件记录建立已知联系人/域名清单,先排除你回过信的人;剩余候选才交 GPT-5 判垃圾与置信度,边界案例留在收件箱。高置信项先存 undo batch,再移到 Spam 并移除 Inbox/Unread,Telegram 报告附一键撤回,运行记录写入 Google Sheets。
原文要点
原模板以每日 cron 或 Telegram 消息/按钮触发,拉取 Gmail 未读收件箱与近期已发件,先建已知联系人/域名清单并排除回过信的人;其余交 GPT-5 判垃圾与置信度,低置信留在收件箱。高置信项的 undo batch 存 workflow static data,再移 Spam 并去 Inbox/Unread 标签;Telegram 报告带 Undo 按钮,运行记录写 Google Sheets,撤回过期会提示。配置项含搜索语句、收件箱上限、已发件回溯天数、单次移动上限、撤回窗口。
这次做成什么
在自有 n8n 中复刻一条“只清走高置信陌生垃圾信”的流程,并用一个只有 5 封合成邮件的小练习验证过滤、置信度分支与撤回逻辑(本站独立设计练习,界面细节请在原模板中核对)。
准备什么
- n8n 实例(云端或自托管均可),可启用 Schedule Trigger 与 workflow static data
- Gmail OAuth2 凭据,授权读取邮件与修改标签两个权限范围
- OpenAI API Key,且账号可用所选模型(原模板设为 gpt-5,可自行换可用模型)
- Telegram Bot(用 @BotFather 创建)与管理员 chat_id
- 一个 Google Sheets 表格及写入权限,用于运行日志
具体怎么做
建凭据与配置节点
在 n8n 里依次添加 Gmail OAuth2(勾读信+改标签)、OpenAI、Telegram、Google Sheets 四个凭据。加一个 Set 节点命名 Config,写入 gmail_query="in:inbox is:unread"、inbox_limit=50、sent_lookback_days=90、max_moves_per_run=20、undo_window_hours=72、admin_chat_id=你的 Telegram chat_id。
拉取未读与已知联系人
Schedule Trigger 设为每天一次(或 Telegram Trigger 手动触发)。Gmail 节点按 Config 的 query 拉未读邮件;再一个 Gmail 节点读近 90 天已发件,用 Code 节点把收件人地址与域名收集成集合 knownSet。
过滤后分类
IF 节点判断发件人地址或域名是否在 knownSet,命中直接跳过。剩余候选逐条交给 OpenAI 节点,用材料中的分类提示词,要求只回 JSON。解析置信度:>=0.85 进移动分支,其余留在收件箱并记入日志。
存撤回批次并移动
移动前用 Code 节点把 messageId、原标签、主题、原因组成 undoBatch,存入 workflow static data 并附过期时间戳。随后 Gmail 节点批量加 SPAM 标签、移除 INBOX 与 UNREAD,数量受 max_moves_per_run 限制。
报告与撤回
Telegram 节点发送本轮移动清单和原因,带一个内联 Undo 按钮(callback_data 指向本批次)。Telegram Trigger 监听回调查询:未过期则按 static data 中的批次把邮件移回收件箱并回执确认,过期则回复批次已失效。无论哪条路径都在 Google Sheets 追加一行运行日志。
可直接复制的材料
垃圾信分类提示词(可直接粘贴)
本站独立编写的示例提示词,{{from}}/{{subject}}/{{snippet}} 需替换为节点变量;原模板内部提示词未公开,请自行核对差异。
你是邮件垃圾分类器。只根据下面这封邮件的发件人、主题和正文片段判断它是不是陌生人发来的垃圾/推广/钓鱼邮件。\n\n发件人:{{from}}\n主题:{{subject}}\n正文片段:{{snippet}}\n\n只返回一行 JSON,不要输出其他文字:\n{\"is_junk\": true 或 false, \"confidence\": 0到1之间的小数, \"reason\": \"不超过30字的中文原因\"}\n\n判断规则:\n- 发件人是已知联系人时上游已过滤,你只看内容。\n- 明显的验证码、账单、快递通知一律判 false。\n- 营销轰炸、中奖、可疑链接、冒充官方索取信息判 true 并给高置信度。\n- 拿不准时 confidence 给 0.5 以下。Config 节点示例配置
本站独立设计的练习配置,admin_chat_id 换成自己的;阈值和上限按需要调整。
{\n \"gmail_query\": \"in:inbox is:unread\",\n \"inbox_limit\": 50,\n \"sent_lookback_days\": 90,\n \"max_moves_per_run\": 20,\n \"undo_window_hours\": 72,\n \"admin_chat_id\": \"123456789\",\n \"confidence_threshold\": 0.85\n}输入与输出示例
本站虚构演示,非原作者结果,未真实运行;模型实际输出可能不同。
输入
合成未读 5 封:①boss@mycompany.com 项目周报;②deals@unknown-shop.xyz “恭喜中奖iPhone点击领奖”;③noreply@bank-demo.com 验证码 482913;④promo@massmailer.io 每日促销第 37 期;⑤friend@gmail.com 周末聚餐(90 天内你回过他的信)。对应输出
过滤后 ②③④ 进入分类:② {"is_junk":true,"confidence":0.97,"reason":"陌生域名中奖钓鱼链接"} 移 Spam;③ {"is_junk":false,"confidence":0.98,"reason":"银行验证码通知"} 留收件箱;④ {"is_junk":true,"confidence":0.6,"reason":"疑似订阅促销但不确定"} 低置信留收件箱;⑤ 命中已知联系人直接跳过。Telegram 报告:本轮移动 1 封,附 Undo 按钮。做完检查这些
- 向测试邮箱发一封陌生域名促销信,运行后它进入 Spam 且 INBOX/UNREAD 标签被移除
- 在 Telegram 报告上点 Undo 后,该邮件重新出现在收件箱并有确认回复
- 置信度低于阈值(如 0.6)的邮件保留在收件箱,且 Sheets 日志有一行 skipped 记录
- 90 天内回过信的发件人邮件不会被送入分类节点
容易卡住的地方
- Gmail OAuth2 若只给了只读权限,移动标签步骤会报权限错误,需在凭据中加上 modify 范围
- undo batch 存在 workflow static data,n8n 重启或实例迁移后可能丢失,撤回窗口外点按钮只会收到过期提示
- knownSet 依赖已发件回溯天数,回溯太短会把只收信不回信的熟人误判为陌生
- 模型名必须与 OpenAI 账号实际可用的模型一致,否则分类节点直接报错
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Sweep unread Gmail junk to spam with GPT-5, Telegram, and Google Sheets
- 原作者
- Friedrich Bremer
- 原始发布日期
- 2026-10-07T12:18:06.504Z
- 来源
- https://n8n.io/workflows/20630