Zur Aktivierung des lokalen Mailfilters mit ../maildrop muss man die Datei /etc/couriermaildropfilter anlegen:
echo /usr/bin/maildrop > /etc/courier/maildropfilter
Dann kann jeder User im Verzeichnis ~/.mailfilters Dateien mit Filterregeln erstellen.
- rcptfilter: wird aufgerufen um die Adresse zu überprüfen, ähnlich wie bei den .courier-Dateien, kann man hier auch die Unteradressen anhängen, z.B. rcptfilter-wiki oder rcptfilter-default (Der Aufruf erfolgt, sobald der versendende Server den "rcpt to" Befehl sendet)
- smtpfilter: wird aufgerufen, wenn rcptfilter mit EXITCODE=99 beendet wurde und nachdem der Mailtext empfangen wurde (aber noch nicht bestätigt), Unteradressen sind natürlich auch möglich
Beispiele
rcptfilter-default
if ($MAILFILTER =~ /^rcptfilter-pl2002/) { echo "This address is outdated. Remove the suffix if you want to contact me." EXITCODE=97 exit }
Funktion: jede Mail an "username-pl2002..." wird abgewiesen.
rcptfilter
import SENDER if ($SENDER eq user@example.com) { echo "You are not allowed to send me mails." EXITCODE=99 exit }
Funktion: jede Mail an username@host, die von user@example.com versendet wird, wird mittels smtpfilter gefiltert.
rcptfilter und rcptfilter-default
EXITCODE=99 exit
Funktion: alle Mails werden über smtpfilter gefiltert
smtpfilter
if (/^Content-Type: text/html/) { echo "I don't accept HTML Mails." EXITCODE=97 exit }
Funktion: Mail, die nur HTML enthält, wird nicht angenommen.
Man sollte in seine rcptfilter* Regeln einbauen, die Mails von Mailinglisten immer annehmen, sonst kann es passieren, dass man automatisch aus einer Liste ausgetragen wird.
Eine Regel könnte z.B. so aussehen:
if (($FROM =~ /@lists.sourceforge.net$/) && ($TCPREMOTEHOST =~ /sourceforge.net$/)) { EXITCODE=0 exit }
SpamAssassins Bayes-Filter anlernen bzw. korrigieren
~/.mailfilters/rcptfilter-salearn-default
EXITCODE=99 exit
~/.mailfilters/smtpfilter-salearn-default
if (/^Received: .*by $HOSTNAME/:1,2 > 1) { echo "Are you trying to fool me?" EXITCODE=97 # we dont receive it more than once exit } if (/^Received: .*\(AUTH:.*by $HOSTNAME/) { EXITCODE=0 # received with authentication exit } echo "You are not authorized to send mails to this address." EXITCODE=97 exit
~/.mailfilter-salearn
import EXT WHAT='' logfile "salearn.log" if ($EXT =~ /^salearn-spam$/) WHAT="spam" if ($EXT =~ /^salearn-ham$/) WHAT="ham" if ($WHAT == '') { EXITCODE=0 exit } log "$FROM reports $WHAT" MIME=`reformime -i -s 1.2` if (($EXITCODE == 0) || ($MIME =~ /content-type: messsage\/rfc822/)) { xfilter "reformime -s 1.2 -e" SALEARN=`salearn --$WHAT --single` log "sa-learn: $SALEARN" } EXITCODE=0 # no error message please exit
~/.courier-salearn-default
|maildrop -f $SENDER .mailfilter-salearn
siehe auch localmailfilter maildropfilter dot-courier