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