Benutzer-Werkzeuge

Webseiten-Werkzeuge

A PCRE internal error occured. This might be caused by a faulty plugin

procmail

====== Procmail ====== ===== Installation: ===== # cd /usr/ports/mail/procmail && make install && make clean oder # portupgrade -RN `cd /usr/ports/mail/procmail && make clean | tail -n1 | awk '{print $4}'` ===== Einfuehrung: ===== 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 Fuer Procmail ist eine E-Mail erst zu Ende, wenn der Datenstrom abreisst. Mit anderen Worten, das Dateiende. 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 ===== mehrere Beispiele einer ~/.procmailrc mit erklärungen ===== <hidden ~/.procmailrc> <file bash ~/.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/. ### 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/. } } </file> </hidden>

procmail.txt · Zuletzt geändert: 2018/09/24 17:21 von manfred