Procmail

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen

E-Mail

Procmail als Mailfilter einrichten

Procmail ist ein mächtiger Filter, der für viele komplexe Aufgaben verwendet werden kann. So sind z.B. eine variable Weiterleitung oder ein Spamfilter machbar. Mehr dazu unter www.procmail.org und auf dem Server in den Manpages zu procmail, procmailrc und procmailex.

Zur Nutzung von procmail muss zunächst im Homedirectory des Users eine Datei .forward angelegt werden. Diese bekommt als Inhalt nur die Zeile:

"|/usr/bin/procmail"

Damit findet die Auslieferung der Mails nun über das Programm procmail statt und die Art der Auslieferung wird über die Datei ~/.procmailrc konfiguriert.

Das nachfolgende Beispiel zeigt eine einfache .procmailrc, mit der ein Spamfilter sowie das Einsortieren in mehrere IMAP-Folder vorgenommen wird. Die IMAP-Folder sollten vorher angelegt werden, falls sie noch nicht existieren:

xyz00-doms@hopi:~$ maildirmake Maildir
xyz00-doms@hopi:~$ maildirmake -f Spam Maildir
xyz00-doms@hopi:~$ maildirmake -f Hostsharing Maildir

Alternativ lassen sich diese Folder auch über die Webmail-Oberfläche anlegen. Es ist übrigens korrekt, dass die Folder beim Anlegen ohne einen führenden Punkt im Namen erstellt werden, während sie im unten angegebenen Dateinamen diesen Punkt haben.

Eine beispielhafte .procmailrc:

# Kein Logging als Default
COMSAT=no
LOGABSTRACT=no
VERBOSE=no
LOGFILE=procmail.log
# Spamassassin für alle Mails aufrufen...
# Hier wird der systemweite Spamassassin-Daemon benutzt.
:0fw
| /usr/bin/spamc -U /var/run/spamd
# ...und Spam in eigenem Folder aussortieren
:0
* ^X-Spam-Flag: YES
Maildir/.Spam/
# Mailinglisten von Hostsharing in eine extra Box
:0
* ^TO_(support|technik|website)@hostsharing\.net
Maildir/.Hostsharing/
# Alle nicht ausgefilterten Mails landen in der normalen Mailbox

Abwesenheitsbenachrichtigung (vacation)

Zunächst erstellen wir im Ordner Maildir eine Datei vacation.msg, deren Text als Nachricht verschickt werden soll.

In die .procmailrc fügen wir folgende Zeilen ein :

SHELL=/bin/sh
FORMAIL=/usr/bin/formail
SENDMAIL=/usr/sbin/sendmail
:0 Whc: vacation.lock
* .*for willi
# Nur E-Mails, die an meine Adresse adressiert sind
* !^FROM_DAEMON
# Daemons (Mailinglisten) ausschließen
* !^X-Loop: myself@example.com
# Loop vermeiden: eigene E-Mail ausschließen
| formail -rD 8192 vacation.cache
# Adresse des Senders im Cache speichern
:0 ehc
# e: letztes recipe trifft nicht zu (Adresse noch nicht im Cache vorhanden)
| ($FORMAIL -rA "Precedence: junk" -A "X-Loop: myself@example.com" ; /bin/cat vacation.msg ) | $SENDMAIL -oi -t -f myself@example.com

Eine E-Mail mit dem Inhalt der Datei vacation.msg und dem Absender myself@example.com wird an den Sender geschickt. Allerdings nur, wenn die Adresse noch nicht in der vacation.cache-Datei vorhanden war. Damit wird vermieden, dass ein Absender immer wieder die Abwesenheitsnachricht erhält.

Links Weitere Beispiele und Tipps

http://pm-doc.sourceforge.net/pm-tips.html

http://lipas.uwasa.fi/~ts/info/proctips.html (Timo's procmail tips and recipes)