Lorsqu'on reçoit beaucoup de courrier, ce qui arrive rapidement dès qu'on s'incrit à des listes de diffusion (mailing-list), il devient intéressant de pouvoir trier son courrier dans différentes boîtes. Ce qui est encore plus intéressant est d'avoir un logiciel qui s'en occupe automatiquement à la réception du courrier, procmail 69le permet.
Si ce logiciel est déjà installer sur votre machine, il suffit d'indiquer dans votre fichier .forward d'utiliser procmail et dans le fichier .procmailrc comment doit être trié le courrier. Pour cela vous indiquez dans quelle boîte mettre la lettre arrivant suivant qu'elle provienne de Pierre Durant, ou du site jussieu.fr, ou bien si le texte «guide unix» figure dans le titre, etc... Il est également possible de demander à procmail de lancer un programme ou d'envoyer une réponse à la réception de tel type de courrier.
Voici un exemple de fichier .forward :
"|IFS=' ' && p=/usr/local/bin/procmail && test -f $p && exec $p -Yf- || exit 75 #ricou"
et un fichier .procmailrc :
# Si certains chemins de PATH n'existent pas, enlevez les.
PATH=$HOME/bin:/usr/bin:/bin:/usr/local/bin:.
MAILDIR=$HOME/Mail # vérifiez que ce répertoire existe
DEFAULT=$MAILDIR/mbox
LOGFILE=$MAILDIR/from
LOCKFILE=$HOME/.lockmail
SENDMAIL=/usr/sbin/sendmail
:0:
* ^From.*henry # tout ce qui vient d'Henry
henries # va dans $MAILDIR/henries
:0
* ^(To:|Cc:).*@cru.fr # ce qu'envoie le CRU dans sa liste de diffusion
lmb # va dans $MAILDIR/lmb
:0 # ces lettres disparaissent et j'ajoute
* ^From.ricou@* # un "idiot" dans le fichier /tmp/idiot
| echo "idiot ">> /tmp/idiot # (on peut lancer un programme plus intéressant)
# Attention: peut-être faut-il utiliser plutôt
# | (echo "idiot" >> /tmp/idiot; cat > /dev/null)
# si les mails dépassent la taille d'un pipe usuel
# (je vous laisse réfléchir pourquoi)
:0
* ^Subject:.*questions # toutes les 'questions' vont dans
{
:0 c
question # $MAILDIR/question et
:0 # on renvoit une gentille reponse
| (formail -r ; \
echo "J'aime pas les questions...";\
echo "-- "; cat $HOME/.signature \
) | $SENDMAIL -oi -t
}
# Tout ce qui n'a pas été pris en compte sera rangé dans $MAILDIR/mbox
Une autre façon d'utiliser procmail est de lui demander de trier une boîte aux lettres pleine. Voici le script qui permet de trier sa boîte (dans le cas où l'on a pas mis le fichier de forward pour lancer le tri à la réception) 70 :
#!/bin/sh
ORGMAIL=/var/spool/mail/$LOGNAME
if cd $HOME &&
test -s $ORGMAIL &&
lockfile -r0 -l3600 .newmail.lock 2>/dev/null
then
trap "rm -f .newmail.lock" 1 2 3 15
umask 077
lockfile -l3600 -ml
cat $ORGMAIL >>.newmail &&
cat /dev/null >$ORGMAIL
lockfile -mu
formail -s procmail <.newmail &&
rm -f .newmail
rm -f .newmail.lock
fi
exit 0