#pSpam
Sieve 规则中的 AI:将 "这封邮件是发票吗?" 作为过滤条件
收件箱规则和系统 Sieve 可以询问语言模型,并根据回答移动、标记或转发邮件。两种形式:自由的是/否问题,或在多个类别中进行选择。它使用与 AI 垃圾邮件分类器相同的提供商(第 1 层):推荐使用本地 Ollama;也可选用兼容 OpenAI 的服务器、Anthropic 或 Gemini。在 Webmail 中,该条件名为 "如果 AI 检测到 …",附带测试按钮、模板以及关于哪些数据发送给哪个提供商的说明。ManageSieve 和 JMAP 同样支持该扩展。管理后台:SpamGuard > 扩展 > 规则中的 AI。Business 功能。
投递的等待时间绝不会超过配置的上限(默认:同一封邮件的所有 AI 问题合计 8 秒)。如果超时、出错、达到限额或功能已关闭,该条件直接为 false,脚本继续执行:邮件会进入没有 AI 规则时本应进入的位置。
1. Sieve 语法::question 和 :category
必须使用 require 声明该扩展。:confidence(0 到 100)以百分比设置模型的最低确定度;未设置时采用管理员默认值(60)。一个问题最多 500 个字符,类别列表包含 2 到 20 个条目;期望的类别必须在列表中。按照 RFC 5228 的要求,未知的 vnd.nextxch.* require 会导致脚本在上传时失败。
require ["vnd.nextxch.ai", "fileinto", "copy", "imap4flags"];
# Free yes/no question
if ai :question "Is this mail an invoice or a payment request?" :confidence 70 {
fileinto "Accounting";
stop;
}
# Choice between categories: true when the model picks "Application"
if ai :category ["Invoice", "Application", "Support", "Newsletter"] "Application" {
redirect :copy "hr@company.com";
}
# Combined with ordinary tests (cheap tests first: the model is only asked when reached)
if allof (address :domain :is "from" "customer.com",
ai :question "Is this an urgent request or complaint?" :confidence 75) {
addflag "\\Flagged";
}
2. Webmail:模板和测试按钮
设置 > 收件箱规则:选择条件 "如果 AI 检测到 …",然后选择 "自由提问" 或 "选择类别"。"测试" 按钮会将该条件连同所选邮件发送给模型,并显示回答、置信度和已发送的摘录。
Template Condition Action
Invoices to the Accounting folder Question "Is this mail an invoice ...?" (70 %) Move to "Accounting"
Forward job applications to HR Category "Application" of 5 categories (70 %) Copy to hr@<your domain>
Flag urgent customer mails Question "Urgent request or complaint?" (75 %) Flag as important
3. 模型看到的内容(含遮蔽的示例)
摘录位于标记之间,并被明确作为不可信数据交给模型:邮件中的指令会被忽略。回答必须是 JSON 对象;无法解析的回答视为 "无回答"。
Question: Is this mail an invoice?
<<<EMAIL
From: Supplier Billing <[email@supplier.com]>
Subject: Invoice 2026-1042
Attachments: Invoice-2026-1042.pdf
Body:
Dear Sir or Madam, please find attached our invoice for EUR 1,200.
Please transfer to [number] by 17 Nov 2026.
EMAIL>>>
Model answer: {"answer":"yes","confidence":0.94}
Rule log: ai :question "Is this mail an invoice?" -> true (ja, 94 %, openai/llama3.2:3b)
4. 在本地设置 Ollama
对于是/否问题和分类问题,小模型即可胜任。然后在管理后台的 SpamGuard > 扩展 中将该端点填写为第 1 层,并开启 "规则中的 AI";实时测试会使用一封示例邮件检查连接。
# Linux
curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama3.2:3b
curl http://127.0.0.1:11434/v1/models
# Windows (PowerShell)
winget install Ollama.Ollama
ollama pull llama3.2:3b
# Admin > SpamGuard > Extensions > AI classifier, tier 1:
# Provider: OpenAI-compatible · Endpoint: http://127.0.0.1:11434/v1 · Model: llama3.2:3b
# Admin > SpamGuard > Extensions > AI in rules: enable, save, live test
设置、默认值与最佳实践
| 设置 / 位置 | 说明 | 默认值 | 生产环境最佳实践 |
|---|---|---|---|
Welche Daten gesendet werden |
每个问题仅发送:主题、发件人、正文的前 N 个字符(默认 2,000)以及附件名称。绝不发送附件内容,绝不发送其他邮件头,绝不发送收件人列表。 | Maskierung an · Anhangsnamen an |
请保持遮蔽开启:电子邮件地址变为 [email@domain],IBAN 和电话号码变为 [number],链接被截短为其域名,发件人仅显示姓名和域。这与 AI 垃圾邮件分类器采用的数据保护逻辑相同。 |
Lokal oder Cloud |
规则使用 AI 分类器的第 1 层提供商。本地端点(localhost、专用网络)无需授权。云提供商需勾选两项方可使用:分类器的 GDPR 同意以及 "允许规则使用云提供商"。 | Ollama http://127.0.0.1:11434/v1 · llama3.2:3b |
使用 Ollama 在本地运行,邮件内容就不会离开您的网络。使用云端时,您需要法律依据、数据处理协议,并在隐私政策中加以说明;Webmail 编辑器会向用户显示其规则是在本地还是在云端评估。 |
Zeitlimit und Ausfall |
同一封邮件的所有 AI 问题共享一个时间预算。预算用尽或模型没有应答时,该测试为 false,并执行下一条规则。 | 8.000 ms je Nachricht · max. 10 Fragen |
将低成本的测试(发件人、主题)放在 AI 问题之前:只有当评估执行到 AI 问题时才会询问模型。 |
Cache: jede Nachricht nur einmal |
回答按邮件和问题进行缓存。SMTP 会话中的预检查、投递以及提出相同问题的其他收件人都会复用同一个回答。 | 60 Minuten |
一封发给 200 位同事、且他们都使用相同规则的通知邮件,只需一次模型请求。 |
Freigaben, Limits und Kosten |
管理员决定该功能适用于哪些域和租户、系统 Sieve 是否可以使用它,以及每个租户每天允许多少个问题(可为单个租户单独设置,0 = 禁止)。此外,分类器的每日限额(请求数、令牌数、费用)对整个安装统一生效。 | 500 Fragen je Mandant und Tag |
管理表格显示每个租户当天的问题数和费用:这是分摊云端费用的依据。计数器在重启后保留,并在整个集群范围内汇总。 |
Nachvollziehbarkeit |
每个 AI 决策都会写入规则日志(事件 SieveAi),包括问题、回答、置信度、提供商、缓存命中或无回答的原因,例如 ai :question "Invoice?" -> true (yes, 92 %, openai/llama3.2:3b)。 | immer an |
Webmail 中的测试按钮和管理后台中的实时测试还会显示发送给模型的确切摘录。 |
Lizenz und Upload |
Business 功能(Enterprise 和试用版中同样提供)。未获授权时,Webmail、ManageSieve(PUTSCRIPT/CHECKSCRIPT)和 JMAP(SieveScript/set、/validate)会拒绝包含 ai 测试的脚本;仅当该功能开启时,ManageSieve 才会在 SIEVE 中列出 vnd.nextxch.ai。 | aus |
如果之后关闭该功能,之前保存的脚本仍会继续运行:此时 ai 测试直接为 false。 |