6.9 KiB
AI 邮件识别
Note
此功能从 v1.1.0 版本开始支持
本功能参考自 Alle 项目
功能说明
邮件识别功能会自动分析收到的邮件内容,提取其中的重要信息,并支持两种互斥的识别模式:
| 模式 | 识别内容 | 隐私 | 依赖 |
|---|---|---|---|
local(默认) |
仅验证码 (auth_code) | 在 Worker 内用内置规则识别,邮件内容不会发送给任何 AI 模型 | 无,零成本 |
ai |
验证码、认证链接、服务链接、订阅管理链接、其他链接 | 邮件内容会发送给你 Cloudflare 账号下的 Workers AI 模型 | Workers AI 绑定 |
ai 模式可识别的类型:
- 验证码 (auth_code) - OTP、安全码、确认码等
- 认证链接 (auth_link) - 登录、验证、激活、重置密码链接
- 服务链接 (service_link) - GitHub、GitLab、部署通知等服务相关链接
- 订阅管理链接 (subscription_link) - 退订、管理订阅等链接
- 其他链接 (other_link) - 其他有价值的链接
提取结果会自动保存到数据库的 metadata 字段中,前端可以直接展示提取的验证码或链接,Telegram 推送与 Webhook 占位符也会复用该结果。
配置变量
| 变量名 | 类型 | 说明 | 示例 |
|---|---|---|---|
ENABLE_AI_EMAIL_EXTRACT |
文本/JSON | 是否启用邮件识别功能(总开关,两种模式都需要) | true |
AI_EXTRACT_MODE |
文本 | 识别模式:local 仅用内置规则,ai 仅用 Workers AI。不填默认为 local,填写其他值会记录错误日志并跳过识别 |
local |
AI_EXTRACT_MODEL |
文本 | 仅 ai 模式生效。AI 模型名称,从支持 JSON 模式的模型中选择 |
@cf/meta/llama-3.1-8b-instruct-fast |
[!WARNING] 从旧版本升级 旧版本在配置了 Workers AI 绑定时会自动使用 AI 识别。现在不填
AI_EXTRACT_MODE时默认使用本地规则,如需继续使用 AI 识别,请显式设置AI_EXTRACT_MODE = "ai"。
两种模式之间不会互相回退:
local模式即使配置了 Workers AI 绑定,也不会调用 AIai模式未配置 Workers AI 绑定或调用模型失败时,会记录错误日志并跳过本封邮件的识别,不会改用本地规则
本地规则模式(local)
- 仅提取验证码(
auth_code),不提取链接 - 零依赖、零成本,在 Worker 内本地完成,邮件内容不会离开 Worker
- 同时识别邮件标题和正文,标题中的验证码(如
123456 is your verification code)也能提取 - 支持中文、英文、日文、韩文,以及俄语、西班牙语、葡萄牙语、法语、德语、意大利语、土耳其语、希伯来语的常见写法,例如:
- 关键词在前:
验证码:123456、Apple ID代码为:724818、認証コードは 123456 です、인증번호 [123456]、Ваш код: 123456 - 验证码在前:
123456 是您的验证码、116352(动态验证码)、G-123456 is your Google verification code、123456 est votre code de sécurité - 关键词与验证码之间有其他词:
Your OTP for payment of Rs 5000 is 482913
- 关键词在前:
- 支持带分隔符、空格、零宽字符或全角数字的验证码(如
123-456、8 4 9 2 0 1、K9X-4B2、123456),结果会去掉分隔符和G-这类字母前缀 - 字母数字混合的验证码必须包含数字,纯字母验证码(如
QGFDAE)不会识别,以免把EXPIRED这类单词误判为验证码 - 自动排除:年份与
YYYYMMDD日期、超过 8 位的数字(如电话号码)、小数与金额、时间、URL 和邮箱地址中的数字,以及 promo / tracking / order / reference / voucher code 等非验证码 - 没有明确关键词时,只有在验证类邮件中、且数字单独成行或紧跟「输入 / use / enter」时才会识别,避免把订单号、客服电话、邮编误判为验证码
- 标题最多取前 1000 个字符,与正文合并后只分析前 20000 个字符,保证大邮件的 CPU 耗时可控
AI 模式(ai)
推荐使用 @cf/meta/llama-3.1-8b-instruct-fast 作为默认模型,它支持当前实现依赖的 JSON Mode,且 Cloudflare 说明 -fast 变体会保持可用。价格更低的 @cf/meta/llama-3.1-8b-instruct-fp8-fast 目前不在 JSON Mode 支持列表中,不建议用于本功能。Cloudflare 推荐的新模型 @cf/zai-org/glm-4.7-flash 适合多语言场景,但用于本功能前请先确认它在你的账号/区域支持结构化 JSON 输出。旧默认模型 @cf/meta/llama-3.1-8b-instruct 已于 2026-05-30 被 Cloudflare 弃用,不建议继续使用。
内容长度限制
为避免 AI 模型 token 限制,邮件内容最大处理长度为 4000 字符。超过此长度的邮件内容将被截断后再进行 AI 分析。
Workers AI 绑定
需要在 wrangler.toml 中配置 Workers AI 绑定:
AI_EXTRACT_MODE = "ai"
[ai]
binding = "AI"
或在 Cloudflare Dashboard 的 Worker 设置中添加:
- Variable name:
AI - Type: Workers AI
地址白名单(可选)
为了控制成本和资源使用,可以在 Admin 控制台的 AI 提取设置 页面配置地址白名单(对 local 与 ai 两种模式都生效):
配置说明
- 未启用白名单:所有邮箱地址都可使用 AI 提取功能
- 启用白名单:仅白名单中的邮箱地址会进行 AI 提取
白名单格式
每行一个地址,支持通配符 * 匹配任意字符:
- 精确匹配:
user@example.com- 仅匹配该邮箱 - 域名通配符:
*@example.com- 匹配 example.com 域名下的所有邮箱 - 用户通配符:
admin*@example.com- 匹配 admin 开头的邮箱 - 任意位置通配符:
*test*@example.com- 匹配包含 test 的邮箱 - 多个通配符:
admin*@*.com- 匹配所有 .com 域名下 admin 开头的邮箱
配置示例
user@example.com
*@mydomain.com
admin*@company.com
此配置将只对以下邮箱进行 AI 提取:
user@example.com(精确匹配)- 所有
@mydomain.com的邮箱(如test@mydomain.com、admin@mydomain.com) - 所有
admin开头的@company.com邮箱(如admin@company.com、admin123@company.com)