# Procmail

Procmail ist ein Mail Delivery Agent (MDA), der zur serverseitigen Filterung von E-Mail-Nachrichten verwendet wird.
Ursprünglich entwickelt von Stephen R. van den Berg, dann weiterentwickelt von Philip Guenther um die Jahrtausendwende, wurde Anfang der 2000er Jahre die Weiterentwicklung eingestellt. 2014 rief der vormalige Entwickler dazu auf, die Paketierung einzustellen. Seit etwa 2015 funktioniert auch die Webseite des Projektes nicht mehr. Über die Zeit wurden auch eine Sicherheitslücke entdeckt, die wohl aber mittlerweile behoben seien sollen, nachdem 2020 der ursprüngliche Entwickler die Arbeit wieder aufnahm und nochmals zwei neue Versionen mit Fehlerbehebungen veröffentlichte. Ob grundsätzlichen Probleme des Quellcodes behoben werden, ist unklar.
Für gewöhnlich wird Procmail von einem Mail Transfer Agent (MTA) wie zum Beispiel Sendmail oder Postfix aufgerufen. Durch Procmail kann dann eine Vorsortierung eingehender E-Mail-Nachrichten in Ordner realisiert werden. Dabei können E-Mails anhand diverser Eigenschaften gefiltert werden, wie zum Beispiel:
* Absenderadresse
* Empfänger
* Betreffzeile
* Zugehörigkeit zu einer Mailingliste
* Inhalt der E-Mail
* Spam (im Verbund mit Spamerkennungsprogrammen wie SpamAssassin)
Zu diesem Zweck bedient sich Procmail unter anderem regulärer Ausdrücke. Procmail verfügt des Weiteren über die Fähigkeit, externe Programme aufzurufen oder aber automatisiert auf E-Mails zu antworten; so lassen sich beliebte Features wie E-Mail-Weiterleitungen, Autoresponder oder Urlaubsschaltungen implementieren.
Um E-Mails in bereits bestehende Mailboxen zu filtern, liefert Procmail das Hilfsprogramm formail mit.

## Beispiel

Das folgende Beispiel einer Procmail-Steuerdatei (meist .procmailrc) scannt eingehende Mails mit SpamAssassin und filtert sie anschließend.
:0 leitet eine Filterregel ein. Das angefügte fw der ersten Regel sorgt dafür, dass Procmail wartet, bis das Programm fertig ist. Das angefügte H der beiden folgenden Regeln sorgt dafür, dass nur die Header der E-Mail durchsucht werden. Ein abschließender Doppelpunkt weist Procmail an, File-Locking zu verwenden. Das ist immer dann notwendig, wenn nicht sichergestellt ist, dass die Regel mehrfach parallel ausgeführt werden kann. Zum Beispiel wenn eine Mail in eine bestimmte mbox-Datei einsortiert werden soll, bei der durch gleichzeitige Zugriffe ein Datenverlust entstehen würde.
Zur Erklärung: Zuerst wird die E-Mail mittels einer Pipe an das Programm spamassassin gesendet und gewartet, bis das Programm fertig ist. Die nun gescannte Mail durchläuft die nächsten Filterregeln. SpamAssassin fügt gesichteten E-Mails den Header X-Spam-Status hinzu, der je nach eingestellter Schwelle Yes (für erkannten Spam) oder No (für nicht als Spam erkannte Nachrichten) lautet. Des Weiteren fügt SpamAssassin einen Header hinzu, der aus *-Zeichen besteht. Die Anzahl der Zeichen steht dabei für den abgerundeten Score (d. h. Wahrscheinlichkeit, dass die Nachricht Spam ist) der E-Mail. Der Score, nach dem eine Nachricht als Spam bewertet wird, liegt standardmäßig bei 5.
Das Beispiel filtert nach der Anzahl der Zeichen. Findet Procmail zehn oder mehr *-Zeichen, so wird die E-Mail im Nulldevice abgespeichert und somit verworfen. Wird eine Nachricht generell als Spam erkannt, so wird die Nachricht im Verzeichnis Spam abgespeichert. Alle anderen E-Mails werden in der normalen Inbox abgeliefert.