Procmail: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
KKeine Bearbeitungszusammenfassung
 
(19 dazwischenliegende Versionen von 9 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== E-Mail ==
Procmail ist ein mächtiger Filter, der für viele komplexe Aufgaben verwendet werden kann. So sind z.B. variable Weiterleitungen und das Einbinden eines Spamfilters machbar. Mehr dazu unter www.procmail.org und auf dem Server in den Manpages zu procmail, procmailrc und procmailex.
=== 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:
Das Standard-Mail-Zustellungsprogramm (Local Delivery Agent - LDA) bei Hostsharing ist <tt>deliver</tt> aus dem <tt>dovecot</tt>-Paket. Hier können Filter über [[Managesieve]] angelegt und z.B. über [[Roundcube - Filter|Webmail konfiguriert]] werden. Procmail sollte nur noch von fortgeschrittenen Nutzern für komplexe Filteraufgaben benutzt werden.
<pre>
 
=== Eingehende Emails an Procmail weiterleiten ===
 
Zur Nutzung von procmail wird im Homedirectory des Users eine Datei .forward angelegt, die nur aus einer Zeile besteht:
 
<syntaxhighlight lang="bash">
"|/usr/bin/procmail"
"|/usr/bin/procmail"
</pre>
</syntaxhighlight>
Damit findet die Auslieferung der Mails nun über das Programm procmail statt und die Art der Auslieferung wird über die Datei ~/.procmailrc konfiguriert.
 
Damit werden alle Mails an das Programm procmail übergeben und die Auslieferung kann nun über die Datei [[Managesieve#Zusammenarbeit_mit_Procmail|~/.procmailrc]] konfiguriert werden.
 
=== Procmail konfigurieren ===
 
Das nachfolgende Beispiel zeigt wie ein [[Spamfilter]] eingebunden werden kann, und Emails automatisch in IMAP-Folder (Verzeichnisse) einsortiert werden können.
 
==== Verzeichnisse anlegen ====
 
Die angesprochenen Emailverzeichnisse sollten vorher angelegt worden sein, falls sie noch nicht existieren ist dies z.B. mit dem Befehle maildirmake möglich:
 
<syntaxhighlight lang="bash" line>
maildirmake Maildir
maildirmake -f Trash Maildir
maildirmake -f Spam Maildir
maildirmake -f Hostsharing Maildir
</syntaxhighlight>
 
Alternativ können die Verzeichnisse auch über die Webmail-Oberfläche anlgelegt werden. Es ist übrigens korrekt, dass die Folder beim Anlegen ohne einen führenden Punkt im Namen erstellt werden, in der .procmailrc aber mit Punkt angegeben werden.


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:
==== .procmailrc ====
<pre>
xyz00-doms@hopi:~$ maildirmake Maildir
xyz00-doms@hopi:~$ maildirmake -f Spam Maildir
xyz00-doms@hopi:~$ maildirmake -f Hostsharing Maildir
</pre>
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:
Eine beispielhafte .procmailrc:
<pre>
<syntaxhighlight lang="bash" line>
# Kein Logging als Default
## Logging abstellen
COMSAT=no
COMSAT=no
LOGABSTRACT=no
LOGABSTRACT=no
VERBOSE=no
VERBOSE=no
LOGFILE=procmail.log
LOGFILE=procmail.log
# Spamassassin für alle Mails aufrufen...
## falls passwd die default Shell des Benutzers ist, ist die folgende Zeile wichtig:
SHELL=/bin/bash
 
## Spamassassin für alle Mails aufrufen...
# Hier wird der systemweite Spamassassin-Daemon benutzt.
# Hier wird der systemweite Spamassassin-Daemon benutzt.
:0fw
:0fw
| /usr/bin/spamc -U /var/run/spamd
| /usr/bin/spamc -U /var/run/spamd
# ...und Spam in eigenem Folder aussortieren
## ...und Spam in den Spam Folder aussortieren
:0
:0
* ^X-Spam-Flag: YES
* ^X-Spam-Flag: YES
Maildir/.Spam/
Maildir/.Spam/
# Mailinglisten von Hostsharing in eine extra Box
 
:0
## Bsp. Mailinglisten von Hostsharing in eine extra Box
* ^TO_(support|technik|website)@hostsharing\.net
#:0
Maildir/.Hostsharing/
#* ^TO_(support|technik|website)@hostsharing\.net
#Maildir/.Hostsharing/
 
# Alle nicht ausgefilterten Mails landen in der normalen Mailbox
# Alle nicht ausgefilterten Mails landen in der normalen Mailbox
</pre>
</syntaxhighlight>
 
Möchte man die Mails mit Sieve filtern lassen, will man am Ende von .procmailrc evtl. das Programm "[[Managesieve#Zusammenarbeit_mit_Procmail|deliver]]" aufrufen lassen.
 
==== Abwesenheitsbenachrichtigung (vacation) ====


=== Abwesenheitsbenachrichtigung (vacation) ===
Zunächst im Home-Ordner eine Datei vacation.msg erstellen, deren Text als Nachricht verschickt werden soll.
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 :
Dann in die .procmailrc folgende Zeilen einfügen:
<pre>
<syntaxhighlight lang="bash" line>
SHELL=/bin/sh
SHELL=/bin/sh
FORMAIL=/usr/bin/formail
FORMAIL=/usr/bin/formail
SENDMAIL=/usr/sbin/sendmail
SENDMAIL=/usr/sbin/sendmail
:0 Whc: vacation.lock
:0 Whc: vacation.lock
* .*for willi
* ^TO_myself@example.com
# Nur E-Mails, die an meine Adresse adressiert sind
# Nur E-Mails, die an meine Adresse adressiert sind
* !^FROM_DAEMON
* !^FROM_DAEMON
Zeile 59: Zeile 82:
# e: letztes recipe trifft nicht zu (Adresse noch nicht im Cache vorhanden)
# 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
| ($FORMAIL -rA "Precedence: junk" -A "X-Loop: myself@example.com" ; /bin/cat vacation.msg ) | $SENDMAIL -oi -t -f myself@example.com
</pre>
</syntaxhighlight>


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.
Nun wird eine E-Mail mit dem Inhalt der Datei vacation.msg und dem Absender myself@example.com an die Absender empfangener Emails 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
=== Links zu weiteren Procmail Beispielen und Tipps ===


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


---
[[Kategorie:HSDoku]]
[[Kategorie:HSDoku]]
[[Kategorie:E-Mail]]
[[Kategorie:E-Mail]]
[[Kategorie:Procmail]]
[[Kategorie:Glossar]]
[[Kategorie:.procmailrc]]
[[Kategorie:Installationsanleitungen]]
[[Kategorie:Software]]

Aktuelle Version vom 13. Juni 2024, 12:16 Uhr

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

Das Standard-Mail-Zustellungsprogramm (Local Delivery Agent - LDA) bei Hostsharing ist deliver aus dem dovecot-Paket. Hier können Filter über Managesieve angelegt und z.B. über Webmail konfiguriert werden. Procmail sollte nur noch von fortgeschrittenen Nutzern für komplexe Filteraufgaben benutzt werden.

Eingehende Emails an Procmail weiterleiten

Zur Nutzung von procmail wird im Homedirectory des Users eine Datei .forward angelegt, die nur aus einer Zeile besteht:

"|/usr/bin/procmail"

Damit werden alle Mails an das Programm procmail übergeben und die Auslieferung kann nun über die Datei ~/.procmailrc konfiguriert werden.

Procmail konfigurieren

Das nachfolgende Beispiel zeigt wie ein Spamfilter eingebunden werden kann, und Emails automatisch in IMAP-Folder (Verzeichnisse) einsortiert werden können.

Verzeichnisse anlegen

Die angesprochenen Emailverzeichnisse sollten vorher angelegt worden sein, falls sie noch nicht existieren ist dies z.B. mit dem Befehle maildirmake möglich:

maildirmake Maildir
maildirmake -f Trash Maildir
maildirmake -f Spam Maildir
maildirmake -f Hostsharing Maildir

Alternativ können die Verzeichnisse auch über die Webmail-Oberfläche anlgelegt werden. Es ist übrigens korrekt, dass die Folder beim Anlegen ohne einen führenden Punkt im Namen erstellt werden, in der .procmailrc aber mit Punkt angegeben werden.

.procmailrc

Eine beispielhafte .procmailrc:

## Logging abstellen
COMSAT=no
LOGABSTRACT=no
VERBOSE=no
LOGFILE=procmail.log
## falls passwd die default Shell des Benutzers ist, ist die folgende Zeile wichtig:
SHELL=/bin/bash

## Spamassassin für alle Mails aufrufen...
# Hier wird der systemweite Spamassassin-Daemon benutzt.
:0fw
| /usr/bin/spamc -U /var/run/spamd
## ...und Spam in den Spam Folder aussortieren
:0
* ^X-Spam-Flag: YES
Maildir/.Spam/

## Bsp. 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

Möchte man die Mails mit Sieve filtern lassen, will man am Ende von .procmailrc evtl. das Programm "deliver" aufrufen lassen.

Abwesenheitsbenachrichtigung (vacation)

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

Dann in die .procmailrc folgende Zeilen einfügen:

SHELL=/bin/sh
FORMAIL=/usr/bin/formail
SENDMAIL=/usr/sbin/sendmail
:0 Whc: vacation.lock
* ^TO_myself@example.com
# 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

Nun wird eine E-Mail mit dem Inhalt der Datei vacation.msg und dem Absender myself@example.com an die Absender empfangener Emails 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 zu weiteren Procmail Beispielen und Tipps

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