next_inactive up previous


Utilisation des filtres sieves sur le serveur de courrier

Éric Doutreleau <Eric.Doutreleau@int-evry.fr>

9 juin 2003

Abstract:

Ce document décrit sommairement l'utilisation des filtres sieve sur le serveur de courrier. Ce n'est en rien une présentation exhaustive de toutes les fonctionnalites.

1 Pourquoi mettre des filtres.

Vous trouverez dans les liens suivants des formats plus appriopriés à d'autres usage que la consultation sur le WWW.

Texte
http://www.int-evry.fr/mci/user/doutrele/sieve/sieve.txt
Postscript
http://www.int-evry.fr/mci/user/doutrele/sieve/sieve.ps
PDF
http://www.int-evry.fr/mci/user/doutrele/sieve/sieve.pdf
L'utilisation des filtres sur le serveur repond a un besoin fondamental de la messagerie electronique:

Pouvoir faire des pre traitements automtique sur le courrier qui nous est adressé. Cela s'appplique par exemple au cas suivant:

Historiquement sur les machines UNIX possédant une messagerie SMTP cela se faisait en éditant un fichier .forward qui se trouvait dans le compte UNIX de l'utilisateur et qui faisait appel à différents programmes.

Dans le serveur cyrus une boîte au lettre n'est pas rattaché à un compte unix. Il faut donc trouver un autre mécanisme.

2 Sieve

Sieve est un un language qui permet d'écrire des filtres pour le courrier électronique. Nous verrons par la suite comment placer ces scripts sur le serveur.

De bon exemples étant plus explicite que de long discours voici quelques exemples de script

2.1 Exemples

2.1.1 Rejeter un mail trop gros

if size :over 100K { /* this is a comment  
this is still a comment */  
discard /* this is a comment */ ; }
Si le mail depasse les 100 kilo octet il sera effacé de manière silencieuse

2.2 Rejeter un mail trop gros et prévenir l'expéditeur

require "reject"; 
if size :over 100K {  
          reject "trop gros"  ;}
Si le mail dépasse les 100 kilo octet il sera effacé et un message sera envoyé à l'expéditeur indiquant que le courrier na pas été mis livré pour la raison indiqué

2.3 Rejeter un courrier d'un expediteur précis.

require "reject"; 
if header :contains "From" "toto@int-evry.fr" { reject "Go away spammeur";  
Si un mail arrive et qu'il est expédié par toto@int-evry.fr il sera automatiquement effacé et un courrier d'avertissement sera renvoyé à l'expéditeur.

2.4 Faire suivre son courrier

redirect "toto@int-evry.fr"
Tout le courrier sera redirigé vers l'adresse toto@int-evry.fr

2.5 Faire suivre son courrier mais en garder une copie

redirect "toto@int-evry.fr";

keep;

La même chose que précedement mais on garde une copie locale.

2.6 Activer le répondeur automatique.

require ["vacation","reject"]; 
vacation :days 7 :addresses "toto.titi@int-evry.fr" text: 
Je ne vais pas lire mon courrier pendant un certain temps. 

Je le lirai à mon retour. 

Ici on active le répondeur automatique

2.7 Filtrer suivant le résultat de la passerelle anti spam

L'INT a installé pour une période de tests une passerelle anti-spam Mailscanner. Cette passerelle note les messages et indique la note dans l'entête du message.

Voici ce que l'on doit placer dans son filtre sieve si on veut

Placer dans une boîte les messages avec un score de 5

Effacer les messages avec un score de 20

2.8 Un exemple plus complexe avec pré tri dans différents boîtes

Voila enfin un exemple plus complexe ou suivant les Entêtes du courrier on va placer le courrier dans différentes boîtes.

"require "fileinto";  
if header :is "From" "Norton_AntiVirus_Gateways@int-evry.fr" { 
fileinto "shared.mci.virus";}  
elsif address :contains :all ["to", "cc", "bcc"] "openh323@openh323.org" 
{ fileinto "INBOX.video";}  
elsif allof (address :contains ["from"] "Cron Daemon")  
{ fileinto "shared.mci.cron";}

        else { 
        fileinto "INBOX";  

3 Placer le script sur le serveur

Cela se fait de manière fort simple. Il suffit de se connecter sur une des machines LINUX de MCI et d'utiliser la commande sieveshell.

Un exemple d'utilisation:

sieveshell -user=doutrele -authname=doutrele molure 

connecting to molure  
Please enter your password: 
>

Pour la majorité des personnes ces deux paramètres sont égaux à votre login

On rentre alors dans une interface qui ressemble à un client ftp. On peut lister , recuperer ou telecharger un filtre.

> ls  
filter.sieve <- active script  
> put toto.sieve  
> ls  
filter.sieve  <- active script 

toto.sieve 

On peut stocker plusieur scripts mais un seul peut être actif à la fois. On active le script voulu par la commande activate.

Voici l'aide complète de sieveshell

Usage: sieveshell [-u username] [-a authname] [-r realm] <server> 
help - this screen list -  
list scripts on server  
put <filename> [<target name>] - upload script to server  
get <name> [<filename>] - get script. if no filename display to stdout  
delete <name> - delete script.  
activate <name> - set a script as the active script  
deactivate - deactivate all scripts  
quit - quit 

4 Interface Web

Pour les personnes allergiques à la programmation il existe une interface WWW qui offre moins de fonctionnalités mais qui est plus simple d'utilisation.

Vous trouverez cette passerelle WWW à l'url suivante:

https://email.int-evry.fr/cgi-bin/easysieve.pl

On peut effectuer les opérations suivantes:

Ce sont bien souvent les seules fonctionnalités utilisées par les utilisateurs.

5 Documentation

Vous trouverez de la documentation sur sieve aux url suivantes:

RFC
http://www.faqs.org/rfcs/rfc3028.html
Ressources diverses
http://www.cyrusoft.com/sieve/

About this document ...

Utilisation des filtres sieves sur le serveur de courrier

This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.70)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -long_titles 20 -no_subdir -split 0 -show_section_numbers -address 'Eric Doutreleau ' sieve.tex

The translation was initiated by Eric Doutreleau on 2004-10-08


next_inactive up previous
Eric Doutreleau