#pSpam
AI nelle regole Sieve: "Questa e-mail è una fattura?" come condizione di filtro
Le regole della Posta in arrivo e il Sieve di sistema possono interrogare un modello linguistico e poi spostare, contrassegnare o inoltrare in base alla risposta. Due forme: una domanda libera sì/no oppure una scelta tra categorie. Si usa lo stesso provider del classificatore antispam AI (tier 1): si consiglia un Ollama locale; server compatibili con OpenAI, Anthropic o Gemini sono opzionali. Nel Webmail la condizione si chiama "Se l'AI rileva …", con pulsante di test, modelli e un'indicazione su quali dati vanno a quale provider. Anche ManageSieve e JMAP comprendono l'estensione. Admin: SpamGuard > Estensioni > AI nelle regole. Funzione Business.
La consegna non attende mai più del limite configurato (predefinito: 8 secondi per tutte le domande AI di un messaggio insieme). In caso di timeout, errore, limite raggiunto o funzione disattivata, la condizione è semplicemente falsa e lo script prosegue: l'e-mail finisce dove sarebbe arrivata senza la regola AI.
1. Sintassi Sieve: :question e :category
L'estensione deve essere richiesta con require. :confidence (da 0 a 100) imposta la certezza minima del modello in percentuale; senza di esso vale il valore predefinito dell'admin (60). Una domanda ha al massimo 500 caratteri, un elenco di categorie da 2 a 20 voci; la categoria attesa deve essere presente nell'elenco. Un require vnd.nextxch.* sconosciuto fa fallire lo script al caricamento, come richiesto dalla 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: modelli e pulsante di test
Impostazioni > Regole Posta in arrivo: scegliere la condizione "Se l'AI rileva …", poi "Domanda libera" o "Scegli una categoria". Il pulsante "Test" invia al modello la condizione con un messaggio selezionato e mostra la risposta, la confidenza e l'estratto inviato.
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. Cosa vede il modello (esempio con mascheramento)
L'estratto si trova tra marcatori e viene passato al modello esplicitamente come dato non attendibile: le istruzioni contenute nell'e-mail vengono ignorate. La risposta deve essere un oggetto JSON; le risposte non interpretabili contano come "nessuna risposta".
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. Configurare Ollama in locale
Per domande sì/no e di categoria basta un modello piccolo. Inserire poi l'endpoint come tier 1 nell'admin in SpamGuard > Estensioni e attivare "AI nelle regole"; il test dal vivo verifica la connessione con un'e-mail di esempio.
# 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
Impostazioni, valori predefiniti e best practice
| Impostazione / posizione | Descrizione | Valore predefinito | Best practice per la produzione |
|---|---|---|---|
Welche Daten gesendet werden |
Per ogni domanda solo: oggetto, mittente, i primi N caratteri del testo (predefinito: 2.000) e i nomi degli allegati. Mai il contenuto degli allegati, mai altre intestazioni, mai elenchi di destinatari. | Maskierung an · Anhangsnamen an |
Lasciare attivo il mascheramento: gli indirizzi e-mail diventano [email@domain], IBAN e numeri di telefono [number], i link vengono ridotti al dominio e il mittente mostra solo nome e dominio. È la stessa logica di protezione dei dati del classificatore antispam AI. |
Lokal oder Cloud |
Le regole usano il provider tier 1 del classificatore AI. Gli endpoint locali (localhost, reti private) non richiedono autorizzazione. I provider cloud solo con due spunte: il consenso GDPR del classificatore e "Consenti provider cloud per le regole". | Ollama http://127.0.0.1:11434/v1 · llama3.2:3b |
Eseguire in locale con Ollama, così nessun contenuto delle e-mail lascia la propria rete. Per il cloud servono una base giuridica, un accordo sul trattamento dei dati e un'indicazione nell'informativa sulla privacy; l'editor del Webmail mostra agli utenti se la loro regola viene valutata in locale o nel cloud. |
Zeitlimit und Ausfall |
Tutte le domande AI di un messaggio condividono un unico budget di tempo. Quando è esaurito o il modello non risponde, il test è falso e viene eseguita la regola successiva. | 8.000 ms je Nachricht · max. 10 Fragen |
Mettere i test economici (mittente, oggetto) prima della domanda AI: il modello viene interrogato solo quando la valutazione arriva fino a essa. |
Cache: jede Nachricht nur einmal |
Le risposte vengono memorizzate nella cache per messaggio e domanda. Il controllo preliminare nel dialogo SMTP, la consegna e gli altri destinatari con la stessa domanda riutilizzano la stessa risposta. | 60 Minuten |
Una circolare a 200 colleghi con la stessa regola costa una sola richiesta al modello. |
Freigaben, Limits und Kosten |
L'amministratore decide per quali domini e tenant vale la funzione, se il Sieve di sistema può usarla e quante domande per tenant e giorno sono consentite (singoli tenant possono avere valori diversi, 0 = bloccato). In aggiunta valgono per l'intera installazione i limiti giornalieri del classificatore (richieste, token, costi). | 500 Fragen je Mandant und Tag |
La tabella dell'admin mostra le domande e i costi di oggi per tenant: la base per riaddebitare i costi del cloud. I contatori sopravvivono ai riavvii e vengono sommati sull'intero cluster. |
Nachvollziehbarkeit |
Ogni decisione AI viene scritta nel log delle regole (evento SieveAi) con domanda, risposta, confidenza, provider, hit della cache o motivo della mancata risposta, ad es. ai :question "Fattura?" -> true (yes, 92 %, openai/llama3.2:3b). | immer an |
Il pulsante di test nel Webmail e il test dal vivo nell'admin mostrano inoltre l'estratto esatto inviato al modello. |
Lizenz und Upload |
Funzione Business (anche in Enterprise e nella versione di prova). Senza autorizzazione il Webmail, ManageSieve (PUTSCRIPT/CHECKSCRIPT) e JMAP (SieveScript/set, /validate) rifiutano gli script con il test ai; ManageSieve elenca vnd.nextxch.ai in SIEVE solo quando la funzione è attiva. | aus |
Gli script salvati in precedenza continuano a funzionare se la funzione viene disattivata in seguito: il test ai è allora semplicemente falso. |