关于 spark-recipe-unsubscribe-audit
这是用于 Spark 的技能配方,通过邮件数量和互动数据审查订阅,并仅在用户批准后取消订阅。它还会识别钓鱼邮件、重复投递和应保留的高频发件人。
主要功能
- 01扫描收件箱、归档和 GateKeeper
- 02按数量与互动情况分类发件人
- 03核对重复订阅副本
- 04取消用户批准的订阅
- 05屏蔽不需要的联系人或域名
- 06设置摘要和邮件分组
适用场景
- 01查找未读率高的新闻邮件
- 02安全审查疑似钓鱼邮件
- 03处理重复投递的新闻邮件
- 04减少高频发件人的邮件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ readdle/ spark-cli-skills --skill spark-recipe-unsubscribe-audit安装后在 Claude Code 中输入/spark-recipe-unsubscribe-audit确认已加载。
详细介绍
操作指南:退订审计
审计所有新闻邮件池,根据互动数据推荐退订对象,并且只有在用户批准列表后才执行。Spark 提供数据(发件人、数量、已读标记、正文);Agent 负责分类、重复项核实和执行。
前置条件: 阅读 use-spark 基础技能,了解命令参考和筛选语法。
所需访问级别: triage。
步骤
步骤 1:扫描全部三个邮件池
只扫描收件箱会漏掉大部分邮件量。请检查全部三个邮件池:
# Unified inbox, all accounts (paginate to get everything)
spark emails Inbox --filter "category:newsletter newer_than:30d" --page-size 100
# Auto-archived mail — Gmail filters/automations often skip the inbox
# entirely; repeat per Gmail-backed account. This pool can be the largest.
spark emails "[email protected]:Archive" --filter "category:newsletter newer_than:14d" --page-size 100
# GateKeeper queue — new senders held outside the inbox view
spark emails Inbox --new-senders --page-size 50
步骤 2:汇总并分类
按发件人统计:每 30 天的邮件数和未读率(根据 Flags 列)。分为以下等级:
| 等级 | 信号 | 操作 |
|---|---|---|
| 退订 | 纯营销/滴灌邮件,约 100% 未读 | 建议移除 |
| 考虑 | 邮件量大,有部分互动 | 由用户决定;建议使用摘要或自动总结 |
| 保留 | 大多已读 | 不做处理 |
| 事务性邮件 | 发票、PIN、订单/安全通知 | 不纳入审计 |
| 网络钓鱼 | 见下文 | 标记为垃圾邮件——绝不退订 |
| 应用提醒 | Instagram/LinkedIn 风格的通知邮件 | 在应用的通知设置中调整 |
网络钓鱼警示: 显示名称中有品牌名,但发件人域名无关(例如,发件人是 [email protected],显示名称却是 “SpotifyUS”),或主题涉及紧急账单/安全事项。点击任何内容——包括退订链接——都会确认该地址有效。请醒目标记,并建议标记为垃圾邮件,而不是退订。垃圾邮件文件夹中的所有邮件也适用同样规则:绝不要从中退订。
展示分类结果,并在操作前等待用户确认或修改列表。用户可能会要求保留几个发件人。
步骤 3:操作前核实重复副本
同一份新闻邮件收到 2 份或更多时,不要假设用户订阅了两次:
- 通过
spark thread <id>比较副本的To:标头。地址不同 → 确实是不同的订阅;使用对应副本中的链接退订不需要的那份(令牌按订阅分别生成)。 - Substack:解码
https://substack.com/redirect/2/<base64url-JSON>退订链接;载荷的u字段是订阅 ID。两份副本的u相同 → 只有一个订阅,但邮件被投递了两次(别名/转发)。退订会彻底取消该订阅——请报告情况,不要操作。 To:相同,且属于同一账户(例如 Patreon)→ 同样情况;跳过并报告。
步骤 4:退订已批准的发件人
对于每个已批准的发件人,先尝试使用 Spark 内置机制:
spark action unsubscribe <id>
如果已安装的 CLI 版本不支持该命令,或者发件人没有 List-Unsubscribe 机制,则改用页脚链接提取:
spark thread <id> > /tmp/unsub/<id>.txt
grep -i -o 'https://[^][ )(>"<]*' /tmp/unsub/<id>.txt | grep -i 'unsub\|optout\|opt-out\|preference\|darse de baja'
然后在浏览器中打开并完成每个链接(使用 Agent 驱动的浏览器自动化,或将列表交给用户)。浏览器操作规则:常见情况是点击一次即可确认;偏好设置中心需要选择“退订所有营销邮件”并保存;绝不输入个人数据(已预填的电子邮件字段除外);遇到登录墙、验证码或错误时,记录为受阻并继续处理其他项。页脚因语言和 ESP 而异——如果模式匹配不到,请查看正文最后约 25 行,并选择实际的退订链接,不要点相邻的跟踪链接。
对于应完全屏蔽的发件人(陌生推销、疑似垃圾邮件):
spark contact-action blockContact [email protected]
spark contact-action blockDomain example.com
步骤 5:妥善处理保留的发件人
对于用户决定保留但邮件量较大的发件人:
spark contact-action enableAutosummaryForContact [email protected]
spark contact-action groupEmailsFromContact [email protected]
步骤 6:汇报
总结:已移除的发件人、每月减少的邮件数、受阻项目及后续手动操作、需要在应用内调整的应用提醒发件人、已标记为垃圾邮件的网络钓鱼邮件,以及需要在账户层面修复的重复项(例如 Substack 账户设置、转发规则)。
提示
- 互动数据让建议更可信:“每月 30 封邮件,100% 未读”胜过“看起来像营销邮件”。
- Shell 循环遇到失败的
grep会中止——先将页面转储到临时文件,再进行解析,并追加|| true。 - 点击跟踪器重定向链接(SendGrid、Braze、e.zoom.us、klclick、webengage)没问题——浏览器会跟随它们跳转到真正的退订页面。
- Sendy 页脚同时包含
/l/...(跟踪)和/unsubscribe/...链接——选择后者。 - 通过邮件列表自身的机制
unsubscribe比屏蔽更妥当;blockContact/blockDomain留给无视退订请求的发件人。 - 每季度运行一次此流程;订阅会卷土重来。