====== Filtrer ses emails avec sieve ====== {{tag>sieve cyrus imap}} Ceci est un memo pour éviter d'avoir a rechercher les infos chaque fois que j'ai un filtre qui change. ===== Vérifier que le serveur est lancé ===== Dans /etc/cyrus.conf, vérifier que sieve est présent dans les services: SERVICES { [...] sieve cmd="timsieved" listen="sieve" prefork=0 maxchild=100 [...] } Vérifier que sieve est correctement en écoute sur le port 2000 (par défaut): # grep sieve /etc/services sieve 2000/tcp # Sieve mail filter daemon # netstat -tpan |grep 2000 tcp 0 0 0.0.0.0:2000 0.0.0.0:* LISTEN 3336/cyrmaster tcp6 0 0 :::2000 :::* LISTEN 3336/cyrmaster ===== Connection a Sieve ===== julien@zerhuel:~$ sieveshell -u julien -a julien localhost connecting to localhost Please enter your password: > ls filters_julien.sieve <- active script > get filters_julien.sieve Filtre_Sieve_Julien require ["fileinto","envelope","reject","vacation","imapflags","relational","comparator-i;ascii-numeric","regex","notify"]; } if header :contains "X-Spam-Flag" "YES" { fileinto "user.julien.Spam"; stop; } > quit On se connecte au Shell de Sieve avec le nom d'utilisateur du compte. La commande **ls** (ou list) permet de lister les scripts présent et montre celui actuellement actif. **get** permet de récupérer le script voulu (le deuxième argument est le fichier de sortie). ===== Editer les filtres ===== En local, avec un éditeur de texte, il faut modifier le fichier de filtres. Chaque fichier de filtre doit commencer avec la ligne **require** : require ["fileinto","envelope","reject","vacation","imapflags","relational","comparator-i;ascii-numeric","regex","notify"]; Ensuite, on écris les régles entre des sections du type : if header :contains "X-Spam-Flag" "YES" { fileinto "user.julien.Spam"; stop; } exemples (de la [[http://rfc-ref.org/RFC-TEXTS/3028/chapter3.html|RFC]]) : if header :contains "from" "coyote" { discard; } elsif header :contains ["subject"] ["$$$"] { discard; } else { fileinto "INBOX"; } if header :contains ["From"] ["coyote"] { redirect "acm@example.edu"; } elsif header :contains "Subject" "$$$" { redirect "postmaster@example.edu"; } else { redirect "field@example.edu"; } Les parametres testables sont listés ici : [[http://rfc-ref.org/RFC-TEXTS/3028/chapter5.html|http://rfc-ref.org/RFC-TEXTS/3028/chapter5.html]] On peut aussi ajouter des actions, comme **addflag "\\Seen"** qui va marquer le message comme vu dans le serveur Imap. if header :contains "X-Spam-Flag" "YES" { addflag "\\Seen"; fileinto "user.julien.Spam"; stop; } ===== Charger les filtres ===== $ sieveshell -u julien -a julien localhost connecting to localhost Please enter your password: > put filter_sieve > list filters <- active script filter_sieve > activate filter_sieve > list filters filter_sieve <- active script > quit - On se connecte - la commande **put** permet de charger un fichier, le nom correspond au fichier local - **list** permet de lister les fichiers present dans le compte sieve - **activate** permet de déterminer le fichier de filtres a utiliser C'est tout :) ~~DISCUSSION~~