Utilisation d'un .deliver

A savoir que moi j'utilise comme MTA (mail transfer agent) qmail qui est beaucoup plus sur et fiable que sendmail, plus petit plus rapide et qui fait tout ce que moi je demande a un MTA. Qmail dépose les messages personnels non point dans un répertoire central comme le fait sendmail, mais directement dans un fichier (Mailbox) dans le compte de l'utilisateur. Donc si vous voudrez reprendre mon scripte ci dessous, vous devrez changer la variable BOX en consequence (normalement /usr/spool/mail/bboett p.ex.).

Ceci dit, il n'est pas sûr, que votre MTA utilise deliver pour filtrer les mails par défaut, il peut très bien s'agir de procmail (voir [*]) comme c'est le cas sur inforezo. Si vous voulez tout de même utiliser deliver il faudra rajouter dans votre répertoire racine un fichier .forward avec le contenu suivant:

| /usr/bin/deliver votre-user-ID

Le fonctionnement de deliver se limite a définir trois varibales d'environnement: HEADER qui renferme l'entête du message, BODY qui contient le texte du message et SENDER qui contient l'envoyeur du message correspondant a la ligne ”From:” dans l'entête du message.

Ensuite deliver 'pipe' (voir utilisation de base d'une shell) le message a travers le scripte $HOME/.deliver et s'il reçcoit comme retour un DROP, il sait que le message à été processé et ne s'en occupe plus.

Sauf que moi je fais pas trop confiance à ces mécanisme donc vous les retrouverez redifinis dans le scripte.

#!/bin/sh
#echo heres deliver
#echo header is:$HEADER

BOX=Mailbox
DESTDIR=mail
MYPATH=/home/bboett/mail/ #mettez ici l'endroit ou vous stoquerez vos messages

# Ici on s'occupe des liste de distribution, ou dans la ligne From-espace se
# trouve le serveur de liste et dans From: l'auteur du message.

SENDER=`cat $HEADER | grep "From " | cut -d' ' -f 2`
case $SENDER in
        *linux-security*)       BOX=security_in;;
        *linux-alert*)          BOX=security_in;;
        *linux-kernel*)         BOX=linux_in;;
        *ssh*)                  BOX=ssh_in;;
        *asr*)                  BOX=security_in;;
        *java*)                 BOX=java_in;;
        *fvwm*)                 BOX=fvwm_in;;
        *pine*)                 BOX=pine_in;;
esac

#et maintenant on les place pour de bon
if [ $BOX != "Mailbox" ]; then
  cat $HEADER $BODY >>$MYPATH$BOX               
  echo DROP        
  exit 0
fi

#et maintenant la famille les copains etc, dont leur nom figure dans From:
SENDER=`cat $HEADER | grep "From:" | cut -d' ' -f 2-4`

case $SENDER in
        *[Bb]oett*)     BOX=boettcher_in;;
        *casset*)       BOX=prive_in;;
        *sept*)         BOX=prive_in;;
        *root*)         BOX=admin_in;;    
        *www*)          BOX=www_in;;
esac

#et la aussi faut concretiser la manip
if [ $BOX != "Mailbox" ]; then
cat $HEADER $BODY >>$MYPATH$BOX                 
echo DROP        
else #ici la partie qui demontre que je n'ai pas trop confiance dans deliver :)
cat $HEADER $BODY >>$MYPATH../$BOX
echo DROP        
fi