Email filteren met procmail

Procmail is een programma dat op de server draait en in staat is e-mail te filteren. De configuratie van procmail wordt gedaan door een bestand .procmailrc in je home directory aan te maken. Mijn .procmailrc ziet er als volgt uit (met wat commentaar in cursief):
#Enkele instellingen. Misschien zijn ze niet allemaal nodig, kwestie van zeker te zijn ...
PATH=/bin:/usr/bin:/usr/bin
MAILDIR=$HOME/mail
DEFAULT=/var/spool/mail/gvernaev          # verander uiteraard "gvernaev" in je eigen loginnaam
LOGFILE=$HOME/procmaillog

#De volgende lijnen zijn een restant van een test;
#al wat na een '#' komt wordt genegeerd door procmail
#:0
#* ^Subject:.*test*
#test

#Een filterregel; begint altijd met een lijn met ":0" erop
# (dit is een dubbelpunt gevolgd door een nul (en geen hoofdletter o))
# Daarna komen een of meer voorwaarden (lijnen die met een "*" beginnen)
# NB: in de voorwaarden mag je geen commentaar ("#blabla") schrijven dus
# ik schrijf alle commentaar hierboven.
# Tenslotte komt een lijn ("vvs") met de folder waarin e-mails moeten bewaard
# worden die aan de voorwaarde voldoen.
:0
* ^Subject:.*VVS.*
vvs
Dit .procmailrc bestand bewaart dus alle mails die aan de voorwaarde
^Subject:.*VVS.*
voldoen in de folder vvs. We zullen nu even die voorwaarde nader beschouwen: Gecombineerd betekent dit: een lijn die begint met Subject:, gevolgd door nul of meer willekeurige tekens, gevolgd door VVS, gevolgd door nul of meer willekeurige tekens. Of in iets menselijker bewoordingen: een lijn die met Subject: begint en waar ergens VVS in voorkomt.
Procmail scant alle lijnen uit de header van een e-mail af. Een typische header ziet er zo uit:
Return-Path: 
Delivered-To: gvernaev@cage.rug.ac.be
Received: from mserv.rug.ac.be (mserv.rug.ac.be [157.193.40.37])
        by cage.rug.ac.be (Postfix) with ESMTP id 2C981317B1
        for ; Tue, 18 Feb 2003 09:38:50 +0100 (CET)
Received: from cage.rug.ac.be (cage.rug.ac.be [157.193.53.8])
        by mserv.rug.ac.be (8.12.6/8.12.6) with ESMTP id h1I8crwQ016108
        for ; Tue, 18 Feb 2003 09:38:53 +0100 (MET)
Received: by cage.rug.ac.be (Postfix, from userid 483)
        id BC889322AA; Tue, 18 Feb 2003 09:38:44 +0100 (CET)
Received: from localhost (localhost [127.0.0.1])
        by cage.rug.ac.be (Postfix) with ESMTP
        id BB98D317B1; Tue, 18 Feb 2003 09:38:44 +0100 (CET)
Date: Tue, 18 Feb 2003 09:38:44 +0100 (CET)
From: Geert Vernaeve 
To: 
Cc: 
Subject: Re: blablabla
In-Reply-To: <200302171603.LAA00383@sv00036.dolmen.be>
Message-ID: 
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Nogal een boterham, maar het enige dat ons echt interesseert is dat het onderwerp inderdaad op een regel staat die met Subject: begint. Je kan met procmail dus ook filteren op afzender (From:) enzovoort. Dus ons .procmailrc bestand zal alle e-mails waar VVS in het onderwerp voorkomt, bewaren in de vvs mailfolder (zoals je kan raden ben ik op de mailinglijst van de Vereniging Voor Sterrenkunde ingeschreven). Met alle andere e-mails doet procmail niets speciaals en die komen dus netjes in je inbox terecht zoals vroeger. Het enige dat je nog moet doen is procmail activeren door een bestandje .forward aan te maken (ook weer in je home directory) met als inhoud de lijn
"|exec /usr/bin/procmail"

Je kan meerdere regels achtereen in het .procmailrc bestand zetten:

PATH=/bin:/usr/bin:/usr/bin
MAILDIR=$HOME/mail
DEFAULT=/var/spool/mail/gvernaev
LOGFILE=$HOME/procmaillog

:0
* ^Subject:.*VVS.*
vvs

:0
* ^From:.*cage.*
cage
Dit doet hetzelfde als hiervoor, maar bewaart alle emails die verstuurd zijn vanaf een email adres waar cage in voorkomt in de cage folder. Procmail kiest de eerste voorwaarde die overeenkomt, dus als ik een e-mail krijg van bla@cage met in het onderwerp ergens het woord VVS, dan zal die e-mail in de folder vvs terechtkomen (en niet in cage).

Er zijn nog veel meer mogelijkheden; doe eens man procmailrc en man procmailex voor meer info.


Geert Vernaeve <gvernaev@cage.rug.ac.be> Last updated February 18th 2002