#pSpam
IA en reglas Sieve: "¿Es este correo una factura?" como condición de filtro
Las reglas de la bandeja de entrada y el Sieve del sistema pueden consultar a un modelo de lenguaje y, según la respuesta, mover, marcar o reenviar. Dos formas: una pregunta libre de sí/no o una elección entre categorías. Utiliza el mismo proveedor que el clasificador de spam con IA (nivel 1): se recomienda un Ollama local; los servidores compatibles con OpenAI, Anthropic o Gemini son opcionales. En el webmail, la condición se llama "Si la IA detecta …", con un botón de prueba, plantillas y una nota sobre qué datos van a qué proveedor. ManageSieve y JMAP también entienden la extensión. Administración: SpamGuard > Extensiones > IA en reglas. Función de Business.
La entrega nunca espera más que el límite configurado (de forma predeterminada, 8 segundos para todas las preguntas de IA de un mismo mensaje en conjunto). En caso de tiempo de espera agotado, error, límite alcanzado o con la función desactivada, la condición es simplemente falsa y el script continúa: el correo termina donde habría ido sin la regla de IA.
1. Sintaxis Sieve: :question y :category
La extensión debe solicitarse con require. :confidence (de 0 a 100) establece la certeza mínima del modelo en porcentaje; si se omite, se aplica el valor predeterminado del administrador (60). Una pregunta tiene como máximo 500 caracteres y una lista de categorías de 2 a 20 entradas; la categoría esperada debe estar en la lista. Un require vnd.nextxch.* desconocido hace que el script falle al cargarse, tal como exige RFC 5228.
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: plantillas y botón de prueba
Configuración > Reglas de la bandeja de entrada: elija la condición "Si la IA detecta …" y después "Pregunta libre" o "Elegir una categoría". El botón "Probar" envía la condición con un mensaje seleccionado al modelo y muestra la respuesta, la confianza y el extracto enviado.
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. Lo que ve el modelo (ejemplo con enmascaramiento)
El extracto se sitúa entre marcadores y se entrega al modelo explícitamente como datos no fiables: las instrucciones contenidas en el correo se ignoran. La respuesta debe ser un objeto JSON; las respuestas que no se pueden analizar cuentan como "sin respuesta".
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. Configurar Ollama localmente
Para preguntas de sí/no y de categoría basta con un modelo pequeño. A continuación, introduzca el endpoint como nivel 1 en la administración, en SpamGuard > Extensiones, y active "IA en reglas"; la prueba en vivo comprueba la conexión con un correo de ejemplo.
# 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
Configuración, valores predeterminados y buenas prácticas
| Ajuste / ubicación | Descripción | Valor predeterminado | Buena práctica de producción |
|---|---|---|---|
Welche Daten gesendet werden |
Por pregunta solo se envían: asunto, remitente, los primeros N caracteres del texto (2000 de forma predeterminada) y los nombres de los archivos adjuntos. Nunca el contenido de los adjuntos, nunca otros encabezados, nunca listas de destinatarios. | Maskierung an · Anhangsnamen an |
Mantenga activado el enmascaramiento: las direcciones de correo se convierten en [email@domain], los IBAN y números de teléfono en [number], los enlaces se recortan a su dominio y el remitente solo muestra el nombre y el dominio. Es la misma lógica de protección de datos que en el clasificador de spam con IA. |
Lokal oder Cloud |
Las reglas utilizan el proveedor de nivel 1 del clasificador de IA. Los endpoints locales (localhost, redes privadas) no necesitan autorización. Los proveedores en la nube solo con dos casillas marcadas: el consentimiento RGPD del clasificador y "Permitir proveedores en la nube para reglas". | Ollama http://127.0.0.1:11434/v1 · llama3.2:3b |
Ejecútelo localmente con Ollama para que ningún contenido de correo salga de su red. Para la nube necesita una base jurídica, un contrato de encargo del tratamiento y una mención en su política de privacidad; el editor del webmail muestra a los usuarios si su regla se evalúa localmente o en la nube. |
Zeitlimit und Ausfall |
Todas las preguntas de IA de un mismo mensaje comparten un único presupuesto de tiempo. Cuando se agota o el modelo no responde, la prueba es falsa y se ejecuta la siguiente regla. | 8.000 ms je Nachricht · max. 10 Fragen |
Coloque las pruebas económicas (remitente, asunto) antes de la pregunta de IA: solo se consulta al modelo cuando la evaluación llega a ella. |
Cache: jede Nachricht nur einmal |
Las respuestas se almacenan en caché por mensaje y pregunta. La comprobación previa en el diálogo SMTP, la entrega y otros destinatarios con la misma pregunta reutilizan la misma respuesta. | 60 Minuten |
Una circular a 200 compañeros con la misma regla cuesta una sola solicitud al modelo. |
Freigaben, Limits und Kosten |
El administrador decide para qué dominios e inquilinos se aplica la función, si el Sieve del sistema puede utilizarla y cuántas preguntas por inquilino y día se permiten (cada inquilino puede tener un valor distinto, 0 = bloqueado). Además, los límites diarios del clasificador (solicitudes, tokens, coste) se aplican a toda la instalación. | 500 Fragen je Mandant und Tag |
La tabla de administración muestra las preguntas y el coste por inquilino del día actual: la base para repercutir los costes de la nube. Los contadores se conservan tras los reinicios y se suman en todo el clúster. |
Nachvollziehbarkeit |
Cada decisión de IA se escribe en el registro de reglas (evento SieveAi) con la pregunta, la respuesta, la confianza, el proveedor, el acierto de caché o el motivo de la falta de respuesta, p. ej. ai :question "Invoice?" -> true (yes, 92 %, openai/llama3.2:3b). | immer an |
El botón de prueba del webmail y la prueba en vivo de la administración muestran además el extracto exacto que se envió al modelo. |
Lizenz und Upload |
Función de Business (también en Enterprise y en la prueba). Sin autorización, el webmail, ManageSieve (PUTSCRIPT/CHECKSCRIPT) y JMAP (SieveScript/set, /validate) rechazan los scripts con la prueba ai; ManageSieve solo incluye vnd.nextxch.ai en SIEVE cuando la función está activada. | aus |
Los scripts guardados anteriormente siguen ejecutándose si la función se desactiva más tarde: la prueba ai es entonces simplemente falsa. |