Dumbbell's home

Trier ses mails avec Sieve

Posté par Dumbbell le mercredi 19 janvier 2005 à 17:17

J'utilise un serveur IMAP pour gérer mes mails depuis quelques mois maintenant, et c'est un outil très pratique lorsque l'on veut consulter son courrier depuis plusieurs endroits (chez soi, sur son lieu de travail, etc.). Ca permet également de centraliser le stockage pour faciliter la sauvegarde. La seule chose qui était encore faite côté client était le tri des mails, en particulier pour les mailing-lists.

Sieve est un langage simple dédié à cette tâche : déplacer un mail dans une boite aux lettres différente, rejeter un mail non sollicité, refuser un mail trop volumineux, etc. Un script Sieve décrit donc des actions à effectuer en fonction d'une ou plusieurs conditions.

Avec les filtres de Mozilla 1.7.5 qui ne semblent plus fonctionner, j'ai enfin trouvé le courage de me plonger là-dedans, et finalement, c'est assez simple d'accès, malgré le manque de documentation sur le net.

Il faut tout d'abord configurer le serveur IMAP. J'utilise Cyrus IMAPd, il y a 2 fichiers de configuration à modifier :

  1. le fichier de configuration du serveur, cyrus.conf (en remplaçant localhost si besoin ; 2000 est le port par défaut) :
    SERVICES {
      ...
      sieve    cmd="timsieved" listen="localhost:2000" prefork=0
      ...
    }
  2. le fichier de configuration du service IMAP, imapd.conf (en remplaçant le chemin par celui qui convient) :
    ...
    # répertoire dans lequel les scripts Sieve seront stockés
    sievedir: /usr/local/etc/imap/sieve
    ...

Une fois la configuration retouchée et le serveur redémarré, chaque utilisateur (utilisateur IMAP, pas compte Unix) peut uploader un ou plusieurs scripts pour manipuler ses mails. Un script Sieve ressemble à ça :

# Pour certaines commandes, il faut la lister dans la directive `require'
require ["fileinto", "regex"];

# Tri d'une mailing-list en fonction du header `List-Id' (mails déplacés
# dans un répertoire particulier)
if header :contains "List-Id" "freebsd-current.freebsd.org" {
  fileinto "INBOX.ML.FreeBSD.Current";
}

# Tri selon le destinataire
if address :contains :all ["To", "Cc", "Bcc"] [
  "src-committers@freebsd.org", "cvs-src@freebsd.org", "cvs-all@freebsd.org"] {
  fileinto "INBOX.ML.FreeBSD.CVS";
}

# Tri en utilisant une expression régulière sur un header
# NOTE : la regex est une extension de Cyrus IMAPd et n'est pas décrite
#        dans la RFC
if header :regex "Subject" "^\\[V3A" {
  fileinto "INBOX.ML.Voyager 3";
}

Quand on est content de son script, il est temps de l'uploader sur le serveur :

user$ sieveshell localhost
connecting to localhost
Please enter your password: 
> put mon_script
> activate mon_script
> quit
user$

Ici, put upload le script sur le serveur (chaque utilisateur a un espace rien qu'à lui). Un seul script ne peut être utilisé à la fois, mais plusieurs peuvent être présent sur le serveur. C'est la raison de vivre de la commande activate qui sélectionne le script à utiliser à partir de maintenant.

A partir de ce moment, les mails seront triés correctement, peu importe le client mail, le lieu de connexion ou la pression atmosphérique.

Une petite note cependant, la plupart des clients mails vérifient par défaut uniquement la racine de la boite aux lettres (INBOX), et si un mail arrive dans un des sous-répertoires, il ne sera pas repéré par le client mail. Dans Mozilla, on peut corriger ça en allant dans les propriétés des répertoires (clic droit sur le répertoire, puis Properties...) à regarder régulièrement, puis en cochant Check this folder for new messages.

Trackback Pings

URL de TrackBack pour cette entrée : https://www.dumbbell.fr/mt/mt-tb.cgi/17

Commentaires

Poster un commentaire

Merci de vous être connecté, . Maintenant, vous pouvez rédiger votre commentaire.
(se déconnecter)


Se souvenir de moi ?

(vous pouvez utiliser du code XHTML) :