Capitolo 07b Trasporto posta & difesa Admin: #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.

Suggerimento operativo & nota sull'architettura

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.

Riferimento / configurazione
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.

Riferimento / configurazione
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".

Riferimento / configurazione
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.

Riferimento / configurazione
# 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.