Categories
Linux Plesk

Plesk/qmail: globales procmail Script

Die Möglichkeit Spam-Mails mittels procmail in einen Unterordner zu verschieben hatte ich hier schon mal aufgeschrieben. Leider bietet Qmail meines Wissens nicht die Möglichkeit ein procmail Rezept global anzuwenden sondern prinzipiell nur über die Einbindung in das .qmail-File des jeweiligen Postfachs.

Zumindest die Erstellung/Anpassung des procmail-Rezeptes kann man aber global Abhandeln. Prinzipiell wird das Script einfach nur in der .qmail Datei verlinkt:

| true
| preline /usr/bin/procmail -p /etc/procmail_spam

Soweit eigentlich logisch. Es gibt jedoch einen kleinen Haken: Das procmail Script benötigt das aktuelle Verzeichnis bzw. das aktuelle Postfach um die Mails richtig zu verschieben. Normalerweise steht das aktuelle Verzeichnis ja in der Umgebungsvariable $PWD – aber procmail löscht einige dieser Variablen aus Sicherheitsgründen. Auf neueren Plesk-Systemen bekommt man das Verzeichnis nur über die DELIVERED_TO Umgebungsvariable – welche nur gesetzt wird wenn man den besagten “Sicherheitsmechanismus” von Procmail ausschaltet (-p) und damit den Zugriff auf alle Umgebungsvariablen erlaubt.

LOGFILE=/var/log/procmail.log
#VERBOSE=YES
MAILDIRMAKE=/usr/bin/maildirmake
 
MAIL_HOME=`if [ -n "$DELIVERED_TO" ]; then echo $DELIVERED_TO | awk -F @ '{print "/var/qmail/mailnames/"$2"/"$1}'; else /bin/pwd; fi`
MAIL_HOME=`if [ -e "$MAIL_HOME" ]; then echo $MAIL_HOME; fi`

# sollte es keine Ordner Junk geben, diesen anlegen
DUMMY=`test -d $MAIL_HOME/Maildir/.Junk || echo "Junk" >> $MAIL_HOME/Maildir/courierimapsubscribed`
DUMMY=`test -d $MAIL_HOME/Maildir/.Junk || $MAILDIRMAKE -f Junk $MAIL_HOME/Maildir/`
 
# Spam-Mails nach 30 Tagen löschen
DUMMY=`find $MAIL_HOME/Maildir/.Junk/cur/ -type f -mtime +30 -exec rm -f {} \\;`
DUMMY=`find $MAIL_HOME/Maildir/.Junk/new/ -type f -mtime +30 -exec rm -f {} \\;`
 
# Spam-Mails in den Ordner Junk verschieben
:0 w
* ^Subject:.\*\*\*\*\*SPAM\*\*\*\*\*
$MAIL_HOME/Maildir/.Junk/
 
# Wichtig: alle weiteren Mails normal zustellen
:0 w
$MAIL_HOME/Maildir/

Um die .qmail Files anzupassen habe ich mir ein Script geschrieben. Sollte jemand einen eleganten Weg kennen ein Procmail-Script auch global in die Qmail Kette einzubinden darf er sich gerne melden ;)

Update: für neuere Plesk-Versionen war leider ein Update des Scripts nötig, da qmail dort anders aufgerufen wird und daher /bin/pwd nicht auf das richtige Homeverzeichnis verweist.

Categories
Linux

Procmail: failure notices / undeliverables

Folgendes reciept für Procmail filtert für mich jetzt diverse Arten von “failure notices”.

Klar, man könnte sicherlich auch einige Zeilen zusammenfassen, aber ich finde es so übersichtlicher. Ausserdem kenne ich jetzt eine weitere Möglichkeit “komplexe” Regeln mit ODER zu verknüpfen…

SUBJECT_DELIVERFAIL=
:0
* 1^0 ^Subject: *failure notice
* 1^0 ^Subject: *(|Mail )delivery \(?fail(ed|ure)
* 1^0 ^Subject: *((Returned|Undelivered) mail|Message)(: (.*User unknown|see transcript for details))?
* 1^0 ^Subject: *Undeliver(ed|able) (Mail|Message):? Returned to Sender
* 1^0 ^Subject: *Undeliverable:
* 1^0 ^Subject:.*undeliverable mail
* 1^0 ^Subject: *Mail System Error.*Returned Mail
* 1^0 ^Subject: *Delivery Status Notification
* 1^0 ^Subject:.*Message you sent blocked
* 1^0 ^Subject:.*Delivery Notification: Delivery has failed
* 1^0 ^Subject:.*Mail status report
* 1^0 ^Subject:.*Benachrichtung zum .*Fehlgeschlagen
* 1^0 ^Subject:.*Message you sent was blocked
* 1^0 ^Subject:.*Warning: could not send message for past
{ SUBJECT_DELIVERFAIL=1 }

:0 w
* SUBJECT_DELIVERFAIL ?? ^^1^^
./Maildir/.Trash/
Categories
Linux Plesk

Procmail: Mails sortieren

Procmail ist sehr praktisch um z.B. Serverseitig Mails in (IMAP-)Ordner zu sortieren. Die Filter-Syntax ist sehr leistungsfähig aber auch etwas gewöhnungsbedürftig. Mittlerweile lege ich jeden Filter immer Serverseitig an. Der Vorteil liegt auf der Hand: Die Filter müssen nicht auf jedem Client (Handy etc.) mühsam eingerichtet werden. Auch habe ich bisher immer mal wieder vergessen bei einer Neuinstallation des Mail-Clients die Filter zu sichern ;-).