User Tools

Site Tools


fr:ressources:astuces:sieve

Filtrer ses emails avec sieve

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 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;
}

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  
  1. On se connecte
  2. la commande put permet de charger un fichier, le nom correspond au fichier local
  3. list permet de lister les fichiers present dans le compte sieve
  4. activate permet de déterminer le fichier de filtres a utiliser

C'est tout :)

~~DISCUSSION~~

fr/ressources/astuces/sieve.txt · Last modified: 2024/04/17 10:19 by 127.0.0.1