# cd /usr/ports/mail/procmail && make install && make clean
oder
# portupgrade -RN `cd /usr/ports/mail/procmail && make clean | tail -n1 | awk '{print $4}'`
https://www.manitu.de/service/howtos/procmailrc-Dateien.pdf
Wenn "procmail" ohne Parameter aufgerufen wird, dann wird die Konfigurationsdatei im Homeverzeichnis ausgewertet ($HOME/.procmailrc) und das Systempostfach des Users ($MAIL z.B.: /var/mail/fritz) gelesen.
Will man "procmail" mit einer rc-Datei starten, die an einer anderen Stelle im Dateisystem liegt, muss diese als Parameter uebergeben werden.
# vi /etc/mail/aliases # fritz: "| procmail /usr/local/etc/procmailrc"
# newaliases
zum konvertieren einer Mailbox:
# formail -ds < old_mailbox >> new_mailbox
und wenn es von Procmail gleich weiter verarbeitet werden soll:
# cat old_mailbox | formail -ds procmail -Y /usr/local/etc/procmailrc
Für Procmail ist eine E-Mail erst zu Ende, wenn der Datenstrom abreißt. Mit anderen Worten, das Dateiende erreicht wurde.
Da ich "procmail" nur als Filter verwende (um die E-Mails in eine Datenbank einzupflegen) und nicht komplett studiere, ist auf dieser Seite auch nichts weiter zu finden.
Weitere Beispiele:
# man procmailex
<hidden ~/.procmailrc>
################################################################################ ### unvollstaendige Liste von Filtertypen ### siehe "man procmailrc" fuer die vollstaendige Liste von Filtertypen # :0 # Abbruch wenn filter zutrifft # :0c # ... immer weiter machen, auch wenn Filter zutrifft # :0H # nur Header pruefen # :0h # nur Header zur weiteren Pruefung weiterleiten # :0B # nur Message Body pruefen # :0b # nur Message Body zur weiteren Pruefung weiterleiten # :0D # Gross-/Kleinschreibung beachten ################################################################################ ###---------->General Setup<---------- SHELL = /bin/sh PATH =$HOME/bin:/usr/bin:/usr/ucb:/bin:/usr/local/bin:. ### Das Verzeichnis ($HOME/Mail/) muss existieren! ### hier werden die unten in den Regeln definierten Verzeichnisse angelegt MAILDIR = $HOME/Mail/ ### hier werden die Mails auch nochmal komplett reingeschrieben #DEFAULT=$MAILDIR/mbox LOGFILE = $HOME/procmail.log LOCKFILE=$HOME/.lockmail ###----------> maildirs <--------- ### Folgendes wird von Procmail ausgefuehrt: ### Die Verzeichnisse "mail/cur/", "mail/new/", "mail/tmp/" ### wird angelegt, wenn es noch nicht existiert, ### dann wird jede einzelne E-Mail ### in eine separate Datei geschrieben. ### ### $MAILDIR/mail/new/ ### "1060434162.57559_0.mail.domain.de", "1060434163.57563_0.mail.domain.de", ... #:0c #mail/ ###----------> E-Mails in separate Dateien <--------- ### Das Verzeichnis "mail/" ### muss schon existieren, dann wird jede ### einzelne E-Mail in eine separate ### Datei geschrieben. ### ### $MAILDIR/mail/ ### "msg.Cvi", "msg.Dvi", ... #:0c #mail ###----------> "MH"-Format <--------- ### Das Verzeichnis wird angelegt, ### wenn es noch nicht existiert. ### Die E-Mails werden im "MH"-Format geschrieben ### das bedeutet, jede einzelne E-Mail wird in ### eine separate Datei geschrieben und die ### Namen der Dateien sind fortlaufend ### nummeriert. ### ### $MAILDIR/20030809/ ### "1", "2", "3", ... #:0c #`date +%Y%m%d`/. ###----------> Multi-part messages <--------- ### ### Content-Type: multipart/mixed; boundary=ELM965173874-25050-0_ ### Content-Type: multipart/mixed; boundary="------------BA45271FBDAA479CECA7E20A" ### ### Write a recipe that inserts into a variable (call it BOUND) the boundary string. ### Note that the potential quotes (") are not to be part of that string. ### Also note that the header might be divided on multiple lines as in ### ### Content-Type: multipart/mixed; ### boundary=ELM965173874-25050-0_ ### ### There are alternative solutions, which not necessarily are quite equivalent. ### The first one is putting high up in your ~/.procmailrc recipe file the line(s) ### ### BOUND1=`formail -z -x"Content-Type:" | awk -F= '{ print $2 }' | sed -e 's/\"//g' | tr -d '\n'` ### ### A second one is: ### ### :0h ### * ^Content-Type: ### { BOUND2=`egrep -i 'boundary=' | awk -F= '{ print $2 }' | sed -e 's/\"//g'` } ### ### This was not in the exercise, but you can then have recipes like ### ### :0: ### * ! BOUND2 ?? ^^^^ ### WhateverFolder ### ################################################################################ ###----------> Zeichenerkennung in der zweiten Zeile <--------- ### Write a recipe to detect a "whatever pattern" on exactly the second line of the body of an incom ing message. ### Ignore case in the pattern. ### ### :0B: ### * ? sed -n 2p | egrep -is 'whatever pattern' ### WhateverPatternMail ### Wenn die Filterzeilen "*^From" weckgelassen werden, ### dann werden die Mails auch in die System-Mailbox ### eingetragen. ### ganze Mail :0c *^From testmaildir-complete/. ### Mail-Kopf :0ch *^From testmaildir-head/. ### Mail-Body :0cb *^From testmaildir-body/. ### Verschiebt Mails mit dem Wort "Werbung" im Betreff in den Papierkorb :0H: * ^Subject:.*Werbung .trash ### E-Mails mit binaerem (nicht lesbarem) Anhang werden hier verarbeitet :0 *^From * ^Content-Type: multipart/ { :0 B * ^Content-.*base64 { :0 { RULE="Email mit binaerem Anhang" } :0: testmaildir-base64/. } }
</hidden>