Chapitre 07b Transport & défense de la messagerie Admin : #pSpam

IA dans les règles Sieve : "Ce mail est-il une facture ?" comme condition de filtre

Les règles de boîte de réception et le Sieve système peuvent interroger un modèle de langage, puis déplacer, marquer ou transférer selon la réponse. Deux formes : une question libre oui/non, ou un choix entre catégories. La fonction utilise le même fournisseur que le classificateur antispam par IA (palier 1) : un Ollama local est recommandé ; les serveurs compatibles OpenAI, Anthropic ou Gemini sont facultatifs. Dans le Webmail, la condition s'appelle "Si l'IA détecte …", avec un bouton de test, des modèles et une indication des données envoyées à chaque fournisseur. ManageSieve et JMAP comprennent également l'extension. Admin : SpamGuard > Extensions > IA dans les règles. Fonction Business.

Conseil d'exploitation & note d'architecture

La remise n'attend jamais plus longtemps que la limite configurée (par défaut 8 secondes pour l'ensemble des questions IA d'un même message). En cas de délai dépassé, d'erreur, de limite atteinte ou de fonction désactivée, la condition est simplement fausse et le script continue : le mail arrive là où il serait allé sans la règle IA.

1. Syntaxe Sieve : :question et :category

L'extension doit être demandée avec require. :confidence (0 à 100) définit la certitude minimale du modèle en pourcentage ; sans ce paramètre, la valeur par défaut de l'administrateur (60) s'applique. Une question compte au maximum 500 caractères, une liste de catégories de 2 à 20 entrées ; la catégorie attendue doit figurer dans la liste. Un require vnd.nextxch.* inconnu fait échouer le script au téléversement, comme l'exige la RFC 5228.

Référence / configuration
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 : modèles et bouton de test

Paramètres > Règles de boîte de réception : choisissez la condition "Si l'IA détecte …", puis "Question libre" ou "Choisir une catégorie". Le bouton "Tester" envoie la condition avec un message sélectionné au modèle et affiche la réponse, la confiance et l'extrait envoyé.

Référence / configuration
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. Ce que voit le modèle (exemple avec masquage)

L'extrait est placé entre des marqueurs et transmis explicitement au modèle comme données non fiables : les instructions contenues dans le mail sont ignorées. La réponse doit être un objet JSON ; les réponses impossibles à analyser comptent comme "aucune réponse".

Référence / configuration
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. Configurer Ollama en local

Un petit modèle suffit pour les questions oui/non et les questions de catégorie. Saisissez ensuite le point de terminaison comme palier 1 dans l'administration sous SpamGuard > Extensions et activez "IA dans les règles" ; le test en direct vérifie la connexion avec un mail d'exemple.

Référence / configuration
# 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

Paramètres, valeurs par défaut & bonnes pratiques

Paramètre / emplacement Description Valeur par défaut Bonne pratique en production
Welche Daten gesendet werden Par question uniquement : l'objet, l'expéditeur, les N premiers caractères du texte (2 000 par défaut) et les noms des pièces jointes. Jamais le contenu des pièces jointes, jamais d'autres en-têtes, jamais de listes de destinataires. Maskierung an · Anhangsnamen an Laissez le masquage activé : les adresses e-mail deviennent [email@domain], les IBAN et numéros de téléphone [number], les liens sont réduits à leur domaine et l'expéditeur n'affiche que le nom et le domaine. C'est la même logique de protection des données que dans le classificateur antispam par IA.
Lokal oder Cloud Les règles utilisent le fournisseur de palier 1 du classificateur IA. Les points de terminaison locaux (localhost, réseaux privés) ne nécessitent aucune autorisation. Les fournisseurs cloud uniquement avec deux cases cochées : le consentement RGPD du classificateur et "Autoriser les fournisseurs cloud pour les règles". Ollama http://127.0.0.1:11434/v1 · llama3.2:3b Exécutez localement avec Ollama afin qu'aucun contenu de mail ne quitte votre réseau. Pour le cloud, vous avez besoin d'une base légale, d'un accord de traitement des données et d'une mention dans votre politique de confidentialité ; l'éditeur du Webmail indique aux utilisateurs si leur règle est évaluée localement ou dans le cloud.
Zeitlimit und Ausfall Toutes les questions IA d'un même message partagent un seul budget de temps. Lorsqu'il est épuisé ou que le modèle ne répond pas, le test est faux et la règle suivante s'exécute. 8.000 ms je Nachricht · max. 10 Fragen Placez les tests peu coûteux (expéditeur, objet) avant la question IA : le modèle n'est interrogé que lorsque l'évaluation l'atteint.
Cache: jede Nachricht nur einmal Les réponses sont mises en cache par message et par question. La vérification préalable dans le dialogue SMTP, la remise et les autres destinataires ayant la même question réutilisent la même réponse. 60 Minuten Une circulaire adressée à 200 collègues ayant la même règle ne coûte qu'une seule requête au modèle.
Freigaben, Limits und Kosten L'administrateur décide pour quels domaines et locataires la fonction s'applique, si le Sieve système peut l'utiliser et combien de questions par locataire et par jour sont autorisées (valeur différente possible par locataire, 0 = bloqué). Les limites quotidiennes du classificateur (requêtes, jetons, coût) s'appliquent en plus à l'ensemble de l'installation. 500 Fragen je Mandant und Tag Le tableau d'administration affiche les questions et le coût par locataire pour la journée : la base de la refacturation des coûts cloud. Les compteurs survivent aux redémarrages et sont additionnés sur l'ensemble du cluster.
Nachvollziehbarkeit Chaque décision IA est inscrite dans le journal des règles (événement SieveAi) avec la question, la réponse, la confiance, le fournisseur, l'accès au cache ou la raison de l'absence de réponse, par ex. ai :question "Invoice?" -> true (yes, 92 %, openai/llama3.2:3b). immer an Le bouton de test du Webmail et le test en direct de l'administration affichent en outre l'extrait exact transmis au modèle.
Lizenz und Upload Fonction Business (également dans Enterprise et l'essai). Sans autorisation, le Webmail, ManageSieve (PUTSCRIPT/CHECKSCRIPT) et JMAP (SieveScript/set, /validate) refusent les scripts contenant le test ai ; ManageSieve ne liste vnd.nextxch.ai dans SIEVE que lorsque la fonction est activée. aus Les scripts enregistrés auparavant continuent de s'exécuter si la fonction est désactivée par la suite : le test ai est alors simplement faux.