La messagerie
Les Mail Delivery Agent
Les MDA ont pour rôle de distribuer le courier reçu dans les boîtes mail des utilisateurs.
Ils permettent notamment d'appliquer à tous ces mails des filtres :
des filtres anti-spam qui permettent de se débarasser de tous les couriers indésirables,
des filtres anti-virus,
des filtres personalisés pour trier les mails dans différents dossiers (pour les mailing listes par exemple).
3.1 Procmail
3.1.1 Présentation
Procmail est un MDA qui permet de :
rediriger les mails vers d'autres adresses,
trier les mails dans différents dossiers,
exécuter des programmes qui traiteront le mail.
Le fonctionnement de procmail est très simple : il est appelé avec un mail en entrée standard, et traite le mail en fonction des filtres contenus dans le fichier .procmailrc de l'utilisateur.
3.1.2 Installation
Tout d'abord récupérez les source de procmail sur http://www.procmail.org.
décompressez les :
user@localhost$ tar -zxpvf procmail-3.22.tar.gz
Lancez la compilation
user@localhost$ make
Au bout de quelques lignes, appuyez sur entrée pour lancer les tests.
Une fois la compilation réussie, lancez la commande :
root@localhost# make install-suid
Nous pouvons maintenant le configurer
3.1.3 Configuration
La configuration de procmail se fait en deux parties.
La première partie contiens les définitions de variables.
La deuxième partie contiens la définition de tous les filtres.
Les lignes contenant des commentaires commencent par des #.
Procmail gère les formats mailbox et maildir, il faut donc lui préciser dans quel format il doit stocker les mails.
Si un chemin fini par / alors les mails seront stockés au format maildir, sinon ils seront stockés au format mailbox.
3.1.3.1 Variables
Nous allons expliquer ici les principales variables utilisées par procmail.
Toutes ces variables sont définies dans .procmailrc.
3.1.3.1.1 Verbose
L'option Verbose permet de forcer procmail à affichier des informations suplémentaires sur ce qu'il fait.
Cette option peut être très utilie lors du test des différents filtres.
VERBOSE=yes
3.1.3.1.2 Maildir
Maildir permet de spécifier le répertoire racine de istribution des mails. En général on utilise ~/Mail/.
MAILDIR=~/Mail/
3.1.3.1.3 Orgmail
Orgmail permet de spécifier dans quel répertoire seront délivrés tous les mails pour lesquels aucun filtre ne s'applique.
ORGMAIL=$MAILDIR/Default/
3.1.3.1.4 Logfile
Logfile permet de définir dans que fichier seront enrengistrés les logs de procmail.
Les logs ne contiennent que quelques informations (expéditeur et sujet du mail, traitement effectué sur le mail).
LOGFILE=$MAILDIR/.procmail.log
3.1.3.2 Filtres
Les filtres permettent d'appliquer certaines commandes à certaines parties de certains mails.
Les filtres sont définis entre 3 parties.
en-tête
conditions
action
Les conditions des filtres sont testées pour chaque filtre, jusqu'à ce qu'un filtre corresponde au mail. Dans ce cas le mail ne sera pas traité par les filtres suivants (sauf si le filtre correspondant au mail contiens le drapeau c (voir ci-dessous).
3.1.3.2.1 En-tête
L'en-tête est formée d'une seule ligne qui commence par :0.
On y met ensuite eventuellement des drapeaux :
H (header) : signifie qu'on applique les conditions uniquement sur les en-têtes du mail.
B (body) : signifie qu'on applique les conditions sur tout le mail.
h (header) : signifie qu'on ne passe que les en-têtes à l'action.
c (copy) : signifie qu'on conserve une copie du mail pour un traitement ultérieur.
On peut ensuite éventuellement y mettre un verrou, pour empécher que deux appels simultanés de ce filtre crééent des conflits (écriture simultanée dans le même fichier ...).
3.1.3.2.2 Conditions
Il est possible de mettre n'importe quel nombre de conditions (y compris aucune).
Il ne doit y avoir qu'une condition par ligne.
Toutes les lignes contenant des conditions doivent commencer par *, puis doivent contenir une chaîne qui sera passée à une commande egrep interne à procmail. Les conditions seront donc des expressions régulières.
Une documentation sur les expressions régulières est disponible ici.
Pour que l'action du filtre soit validée, il faut que toutes les conditions soit vraies (ET logique).
3.1.3.2.3 Action
Un filtre ne peux avoir qu'une seule action, elle peut être de trois types :
redirection vers un fichier : Il suffit d'indiquer le chemin vers le fichier.
Dans ce cas, il ne faut pas oublier de mettre un verrou sur le fichier.
redirection vers un programme : Il suffit d'indiquer le nom du programme ainsi que ses arguents, en précédent le tout d'un pipe (|). Le mail sera alors envoyé sur l'entrée standard du programme.
Si le drapeau h est utilisé dans l'en-tête, alors seules les en-têtes du mail seront envoyées sur l'entrée standard.
redirection vers une autre adresse : il suffit d'écrire l'adresse mail du nouveau destinataire, précédée par !.
On peut rediriger le mail vers plusieurs destinataires en mettant une liste d'adresses mail séparées par des virgules.
3.1.3.2.4 Exemples d'utilisation
3.1.3.2.4.1 Trie des mailing listes
Ce filtre permet de trier tous les mails provenant de la mailing liste de la FSF France dans un dossier FSFE-France.
:0 H : fsfe.lock
* ^List-Id:.*fsfe-france.gnu.org
$MAILDIR/FSFE-France/
Cet exemple recherche List-Id: fsfe-france.gnu.org dans les en-têtes du mail.
Si le mail contiens cette chaîne, alors le fichier fsfe.lock est créé pendant toute la durée de l'écriture du mail dans le répertoire ~/Mail/FSFE-France/ au format maildir (à cause du / final).
3.1.3.2.4.2 Utilisation d'un filtre anti-spam
Ce filtre fait passer les mails à travers un filtre anti-spam :
:0: spamassassin.lock
* < 256000
| spamassassin
Si le mail fait moins de 256Ko, il est envoyé en entrée standard de spamassassin.
Spamassassin ajoute une en-tête au mail contenant la notation du mail : plus la note est élevée, plus le risque que cela soit un spam est grand.
Il ne reste plus qu'à trier les spams dans une boîte spéciale :
:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
$MAILDIR/Spams/
Les mails ayant une note supérieure ou égale à 15 (la ligne commence par X-Spam-Level puis 15 étoiles) seront automatiquement déplacés dans le dossier ~/Mail/Spams/.
3.1.3.2.4.3 Blocs imbriqués
Procmail permet d'imbriquer des filtres les uns dans les autres.
Le niveau d'imbrication est illimité.
:0
* ^From.*fsf-europe
{
:0 c
! fred
:0:
$MAILDIR/FSF-Europe/
}
Ici, les mails en provenance de la FSF Europe seront envoyés à l'utilisateur fred, et copiés dans le dossier Mail/FSF-Europe/.
Le c (copy) du premier des filtres imbriqués, permet de garder une copie du mail qui sera passée au deuxième filtre imbriqué.
3.1.4 Ressources
Filtrer ses mails en utilisant Procmail
Documentation rapide sur Procmail
Procmail FAQ (anglais)
Une liste d'astuces (anglais)