Module 6 · 6.1
Comment fonctionnent les filtres
Module 6: En automatique : filtres et absence · Temps de lecture : 10 minutes
Objectif pédagogique : À l'issue de cette leçon, vous saurez expliquer où et quand les filtres s'exécutent, lire un script de filtrage en Sieve et prévoir dans quel dossier un message entrant arrivera.
Notions clés : filtre, Sieve, ManageSieve, jeu de filtres, règle, condition, action, conservation implicite, stop, contient, est égal à, correspond à l’expression
Les filtres s'exécutent sur le serveur
Un filtre trie automatiquement votre courrier : les e-mails contenant "facture" dans l'objet vont dans le dossier Factures, les newsletters dans un dossier à part. Le plus important à retenir : ce tri ne se fait pas dans le webmail, mais sur le serveur de messagerie, au moment où un message est remis dans votre boîte mail.
Il en découle trois choses :
- Les filtres fonctionnent aussi quand le webmail est fermé. Votre ordinateur portable peut être éteint. Votre téléphone voit immédiatement l'e-mail dans le bon dossier.
- Les filtres ne s'appliquent qu'au nouveau courrier. Les e-mails déjà présents dans votre boîte mail restent où ils sont. Si vous créez un filtre aujourd'hui, vous déplacez vous-même les anciens messages.
- Les filtres valent pour une seule boîte mail. Chaque boîte mail a ses propres filtres. Si vous souhaitez régler quelque chose pour toutes les boîtes mail de votre domaine, par exemple bloquer un expéditeur, vous le faites dans le panneau d'administration de votre hébergement.
Les filtres sont écrits en Sieve, un langage simple conçu spécialement pour filtrer le courrier (RFC 5228). Le serveur de messagerie de WebOké utilise Dovecot avec Pigeonhole, l'implémentation Sieve de Dovecot. Le webmail transforme vos choix dans le formulaire en un script Sieve et l'envoie au serveur via le protocole ManageSieve (RFC 5804). Vous n'avez pas besoin d'écrire du Sieve, mais si vous savez le lire, vous comprenez exactement ce que font vos filtres.
Jeu de filtres, règles, conditions et actions
Un jeu de filtres est le script complet : tous les filtres de votre boîte mail dans un seul fichier. Vous pouvez avoir plusieurs jeux de filtres, mais un seul est actif à la fois.
Le jeu de filtres contient les filtres, aussi appelés règles dans le webmail. Chaque filtre comporte :
- un nom, uniquement pour vous ;
- une portée : le message doit remplir toutes les règles, l'une des règles, ou le filtre s'applique à tous les courriels ;
- une ou plusieurs conditions : où le filtre regarde (objet, expéditeur, un autre en-tête), comment il compare, et avec quel texte ;
- une ou plusieurs actions : ce qui se passe quand les conditions sont remplies.
Il existe trois façons de comparer :
| Dans le webmail | En Sieve | Signification |
|---|---|---|
| contient | :contains | le texte figure quelque part dans l'en-tête |
| est égal à | :is | l'en-tête correspond exactement à ce texte |
| correspond à l’expression | :matches | motif avec * (zéro caractère ou plus) et ? (exactement un caractère) |
Les majuscules ne comptent pour aucune des trois. Par défaut, Sieve compare avec la règle i;ascii-casemap, qui traite majuscules et minuscules de la même façon. "facture" trouve donc aussi "FACTURE" et "Facture".
À quoi ressemble un jeu de filtres
Dans le webmail, vous pouvez afficher le jeu de filtres sous forme de texte via Filtres > Actions > Modifier le jeu de filtres. Voici un exemple tel que le webmail l'écrit :
require ["fileinto"];
# rule:[Newsletters]
if exists "List-Id"
{
fileinto "Newsletters";
stop;
}
# rule:[Factures]
if allof (header :contains "subject" "facture")
{
fileinto "Factures";
}
# rule:[Collègue Hugo]
if false # header :contains "from" "hugo@example.com"
{
fileinto "INBOX.Team";
}Ligne par ligne :
require ["fileinto"];demande au serveur l'extension nécessaire pour déplacer un message vers un dossier. Le webmail l'ajoute lui-même en haut, avec toutes les extensions utilisées par le script.# rule:[Newsletters]est un commentaire. Il permet au webmail de reconnaître le nom de votre filtre. Le serveur ignore cette ligne.if exists "List-Id"est la condition : le message possède un en-tête List-Id. Les newsletters et les listes de diffusion en ont un (RFC 2919).fileinto "Newsletters";déplace le message vers le dossier Newsletters. Le nom du dossier est le nom complet sur le serveur, avec le point comme séparateur (leçon 5.1). Un dossier situé sous Boîte de réception s'appelle doncINBOX.Team.stop;arrête tout le script. Les filtres suivants n'examinent plus ce message. Dans le webmail, cette action s'appelle Arrêter l’évaluation des règles.if false # ...est un filtre désactivé. Si vous décochez Le filtre est activé, le webmail remplace la condition parfalse: jamais vraie. L'ancienne condition reste en commentaire, pour que vous puissiez la réactiver plus tard.

De haut en bas
Le serveur lit le script de haut en bas et examine chaque filtre. Trois règles s'appliquent.
1. Sans action, le message reste dans la Boîte de réception. Sieve connaît la conservation implicite (implicit keep, RFC 5228, section 2.10.2) : si aucun filtre ne fait quoi que ce soit, le message arrive simplement dans la Boîte de réception.
2. Après un déplacement, le message ne se trouve pas aussi dans la Boîte de réception. Un fileinto désactive cette conservation implicite. Le message arrive dans le dossier choisi et pas en plus dans la Boîte de réception. Si vous voulez les deux, utilisez Copier le courriel vers.
3. Sans stop, les filtres suivants examinent aussi le message. Si stop manque, le serveur passe au filtre suivant. Si ce filtre correspond aussi, le serveur exécute également son action. Deux déplacements vers deux dossiers signifient que le message arrive dans les deux dossiers. Avec stop, c'est le premier filtre correspondant qui décide.
C'est pourquoi l'ordre compte. Dans l'exemple ci-dessus, Newsletters se trouve au-dessus de Factures, avec un stop. Une newsletter dont l'objet contient "Votre facture" va donc dans Newsletters, et non dans Factures. Si vous inversez l'ordre, cette même newsletter atterrit dans Factures, car ce filtre n'a pas de stop et passe désormais en premier. La newsletter se retrouverait même dans les deux dossiers. Placez donc les filtres les plus spécifiques en haut et donnez-leur un stop.
Suivre un message pas à pas : voici comment prévoir
Prenez un message et parcourez le script comme le fait le serveur :
- Commencez par le premier filtre. Est-il désactivé (
if false) ? Passez-le. - La condition est-elle remplie ? Regardez précisément l'en-tête :
subjectest l'objet,froml'expéditeur avec nom et adresse,tole destinataire. - Si oui : exécutez les actions. S'il y a
stop, vous avez terminé. - Si non, ou sans stop : passez au filtre suivant.
- À la fin : si aucun filtre n'a déplacé ni supprimé le message, il se trouve dans la Boîte de réception (
INBOX).
Avec ces cinq étapes, vous pouvez lire n'importe quel script, même long.
En pratique : comment cela fonctionne dans le webmail
Vous trouvez les filtres dans Paramètres > Filtres. La liste affiche vos filtres dans l'ordre où le serveur les exécute ; faites-les glisser pour modifier l'ordre. Sous Actions se trouve Modifier le jeu de filtres : vous y voyez et modifiez le script sous forme de texte. Les étapes pour créer un nouveau filtre figurent dans le manuel Roundcube, à la rubrique Créer un filtre. Les autres webmails fonctionnent de manière comparable : Gmail a des filtres, Outlook.com des règles. Ils n'utilisent pas Sieve, mais l'ordre et l'arrêt s'y appliquent aussi.
Résumé
- Les filtres s'exécutent sur le serveur de messagerie lors de la remise, donc aussi quand le webmail est fermé, et uniquement sur le nouveau courrier.
- Le webmail écrit vos filtres sous forme de script Sieve (RFC 5228) et le place sur le serveur via ManageSieve.
- Contient, est égal à et correspond à l’expression ne tiennent pas compte des majuscules par défaut.
- Si aucun filtre n'agit, le message reste dans la Boîte de réception ; après un déplacement, il ne s'y trouve pas en plus.
- Les filtres s'appliquent de haut en bas ; stop termine le script, donc l'ordre détermine le résultat.
Quiz
Exercice
Exercice A6.1 : Où ce message arrive-t-il ? Ouvrez le matériel filters-1.txt, un jeu de filtres tel que le webmail l'écrit, et berichten-1.txt, qui contient les en-têtes de quatre messages entrants, numérotés de 1 à 4. Suivez chaque message selon les cinq étapes de cette leçon : de haut en bas, en passant les filtres désactivés, en faisant attention à stop. Pour chaque message, indiquez le nom du dossier où il arrive, exactement tel qu'il figure dans le script ; si le message arrive dans la Boîte de réception, indiquez INBOX. Le programme compare vos quatre réponses avec le corrigé et indique pour chaque message quel filtre a été décisif.
Pour aller plus loin
Lorsque des étapes dans le webmail sont décrites, elles valent pour le webmail de WebOké ; les autres webmails fonctionnent de manière comparable.
- Roundcube Webmail 7.1: Créer un filtre
- Roundcube Webmail 7.2: Exemples de filtres utiles
- Règles de messagerie côté serveur (filtres sur le serveur)
- RFC 5228, Sieve: An Email Filtering Language (en anglais) : https://www.rfc-editor.org/rfc/rfc5228
- RFC 5804, ManageSieve (en anglais) : https://www.rfc-editor.org/rfc/rfc5804
- RFC 2919, List-Id (en anglais) : https://www.rfc-editor.org/rfc/rfc2919
- Afficher, télécharger et restaurer vos filtres sous forme de script Sieve
