earthjasonlin
|
f65e67c2f2
|
fix(unsub): List-Unsubscribe 头兜底 + mailto 退订按钮放行
两封推广邮件无退订按钮,两个独立根因:
1. Cloudflare 邮件 (msg_id=1364):程序只喂纯文本给 AI,纯文本里
'Unsubscribe' 无 URL;邮件头 List-Unsubscribe 的权威退订链接被丢弃。
-> 解析 List-Unsubscribe 头 (RFC 2369) 存入 Email.list_unsubscribe,
注入 AI 提示词;显示层新增 _ensure_unsub_link 兜底:AI 漏提取时
直接用头部 http(s)/mailto 链接补退订按钮(不依赖 AI)。
2. InferX 邮件 (msg_id=1363):AI 提取到 mailto:team@inferx.net?subject=Unsubscribe,
但 _link_buttons 只放行 http 协议把它过滤掉。
-> URL 校验放行 mailto:(退订场景常见)。
send_summary / tg_send_and_mark 均应用兜底并写回 summary_data.links,
回调恢复视图也能显示退订按钮。新增 6 个测试,共 14 个全部通过。
|
2026-09-04 08:03:45 +08:00 |
|
earthjasonlin
|
8a471cb489
|
fix(tg_bot): 放宽退订链接 URL 长度上限,长 tracking 链接不被误杀
实测 D:\DOWNLOADS\mail_bot.db 中 ChatGPT 推广邮件的退订链接
(https://r.openai.com/asm/unsubscribe/?...) 长度 700+ 字符,
而 _link_buttons 的 len(url) < 200 校验会把它过滤掉,导致
即使 AI 提取出退订链接、显示层也修好了,按钮依然不显示。
上限 200 -> 2048(Telegram inline URL 按钮安全范围)。
新增回归测试 test_long_unsub_url_rendered / test_oversized_url_filtered,
共 9 个用例全部通过。
|
2026-09-03 23:52:31 +08:00 |
|
earthjasonlin
|
8dc85faf19
|
fix(tg_bot): 推广邮件键盘渲染退订链接 + 强化提示词提取优先级
- _summary_keyboard 推广分支忽略 links 参数,AI 提取到退订链接也不显示
现改为退订链接排第一行(🔕),保留告诉我更多/查看原文按钮
- CALLBACK_PROMO_DETAIL 展开详情键盘同样带上退订链接
- 抽取 _is_unsub_link/_link_buttons 辅助函数,退订链接(含 URL 关键词变体)排最前
- SYSTEM_PROMPT: 退订提取规则提升为最高优先级,推广邮件必须输出退订链接
且占 links 第一位,其余链接最多 2 条,不得挤掉退订链接
- 新增 tests/test_unsub_keyboard.py 7 个用例全部通过
|
2026-09-03 23:03:55 +08:00 |
|