sieve cyrus imap
Ceci est un memo pour éviter d'avoir a rechercher les infos chaque fois que j'ai un filtre qui change.
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
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).
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 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
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; }
$ 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
C'est tout :)
~~DISCUSSION~~