Postfix, eingehende Mail an pipe weitergeben, wie?
Postfix, eingehende Mail an pipe weitergeben, wie?
Hallo,
Ich möchte Mails die an eine bestimmte Adresse gehen z.b. foo@bar.de an ein Script weiterleiten.
Eigentlich würde man das ja über die aliases machen, mein Postfix läuft allerdings komplett virtual und mit MySQL.
Wie kriege ich es nun hin Mails an eine pipe zu übergeben?
Ich möchte Mails die an eine bestimmte Adresse gehen z.b. foo@bar.de an ein Script weiterleiten.
Eigentlich würde man das ja über die aliases machen, mein Postfix läuft allerdings komplett virtual und mit MySQL.
Wie kriege ich es nun hin Mails an eine pipe zu übergeben?
Re: Postfix, eingehende Mail an pipe weitergeben, wie?
lege eine zusätzliche hashtable für lokale user an und definiere sie vor den virtual_* Einträgen in der main.cf:
In /etc/postfix/localusers werden dann lokale user die mails empfangen können sollen mit "<username> OK" eingetragen und per postmap die zugehörige .db generiert.
Dann kann wie gewohnt die .forward des users für alle weitere aktionen genutzt werden.
Um mails bzw deren inhalt an scripte weiter zu leiten bietet sich procmail an, damit lassen sich auch einfach filter definieren, damit z.b. nur mails an scripte weitergeleitet werden die dem gewünschten format entsprechen oder von bestimmten Absendern stammen.
Code: Alles auswählen
local_recipient_maps = hash:/etc/postfix/localusers
Dann kann wie gewohnt die .forward des users für alle weitere aktionen genutzt werden.
Um mails bzw deren inhalt an scripte weiter zu leiten bietet sich procmail an, damit lassen sich auch einfach filter definieren, damit z.b. nur mails an scripte weitergeleitet werden die dem gewünschten format entsprechen oder von bestimmten Absendern stammen.
Re: Postfix, eingehende Mail an pipe weitergeben, wie?
Mit Procmail.
Re: Postfix, eingehende Mail an pipe weitergeben, wie?
procmail verstehe ich irgendwie nicht. schon gar nicht mit virtuellen Usern. Ich habe es installiert aber verstehe 0. Es wäre schon super wenn ich da noch viele Filter nutzen könnte nur soll alles weitere ganze normal weiter funktionieren. Also nur das was an eine einzige Adresse geht soll gepiped werden. Genial wäre es natürlich wenn man sofort noch den Inhalt vom Betreff, Body und das Attachment bekommen würde zur weiter verarbeitung. Allerdings sollen wie erwähnt alle anderen eMail Adressen unberührt bleiben und weiter so laufen wie bisher.
Den Postfix habe ich nach dem workaround.org Tutorial aufgesetzt.
Den Postfix habe ich nach dem workaround.org Tutorial aufgesetzt.
Re: Postfix, eingehende Mail an pipe weitergeben, wie?
Ok procmail ist da definitiv für meine Anwendung die bessere Alternative. Hab ihn nun auch am laufen aber nun kommen keine Mails mehr an. Also die werden gepiped. "delivered to procmail Service" aber wie sage ich procmail das er die mails erstmal einfach alle ungefiltert und die Postfächer zustellt? Diese sind natürlich virtuell.
Re: Postfix, eingehende Mail an pipe weitergeben, wie?
Habe ich auf die schnelle gefunden, ob es klappt, musst du sehen.
http://standish.home3.org/virtual-procmail
http://standish.home3.org/virtual-procmail
Re: Postfix, eingehende Mail an pipe weitergeben, wie?
Ja das habe ich auch schon gefunden. Klappt aber nicht. 

Re: Postfix, eingehende Mail an pipe weitergeben, wie?
Also die Mails werden umgeleitet, soviel passt schonmal
/var/log/Mail.log
in meiner master.cf
In der /etc/procmailrc
Procmail loggt garnichts und passieren tut auch nichts. Auch werden die Mails nicht zugestellt. Also nur ab procmail übergeben und das war es dann.
/var/log/Mail.log
Code: Alles auswählen
Dec 9 21:37:21 ns3067246 postfix/pipe[29479]: 51AE5FFBC3: to=<XXXXX@dmant.ovh>, relay=procmail, delay=0.17, delays=0.12/0.02/0/0.03, dsn=2.0.0, status=sent (delivered via procmail service)
Dec 9 21:37:21 ns3067246 postfix/qmgr[26438]: 51AE5FFBC3: removed
Code: Alles auswählen
procmail unix - n n - - pipe
flags=DORX user=vmail argv=/usr/bin/procmail -t -o SENDER=${sender} -m USER=${user}@${domain} DOMAIN=${domain} EXTENSION=${extension} RECIPIENT=${recipient} /etc/procmailrc
Code: Alles auswählen
LOGFILE=/var/log/procmail.log
VERBOSE=yes
HOME=/secure/vmail/$DOMAIN/$USER/Maildir
MAILDIR=$HOME/Maildir
SH=/bin/sh PATH=/bin:/usr/bin:/usr/local/bin
:0:
$MAILDIR
Re: Postfix, eingehende Mail an pipe weitergeben, wie?
Du lässt gerade _alle_ mails an procmail weitergeben, das ist dir klar? Wozu procmail als zusätzliches relay wenn du nur Nachrichten an einen bestimmen user per script verarbeiten willst
Hast du es wie von mir beschrieben mit local_recipients in der postfix zustellkette probiert? Das ist die deutlich schlankere und schnellere Variante. Zudem muss procmail dafür nicht dauerhaft als dienst laufen, sondern wird nur angestoßen wenn wirklich eine mail an den/die user eingehen die in der local_recipients map definiert sind. Ansonsten arbeitet Postfix wie gewohnt seine Zustellkette ab.
Die .forward eines solchen users kann dann z.b. so aussehen:
exit code 75 ist eine temporärer fehler, postfix würde daher eine erneute Zustellung versuchen (mails gehen nicht verloren!). Procmail agiert eigentlich nur als client damit an postfix entweder eine korrekte Zustellung gemeldet oder ein Fehlercode zurückgegeben wird - dann hast du auch saubere logeinträge von postfix im Falle eines Fehlers.
Die .procmailrc eines users in der local_recipients:
Der erste Eintrag verwirft alles was nicht von irgend einem user aus mydomain.tld kommt oder vom user@myotherdomain.tld.
Der zweite Eintrag verwirft alle html-formatierten mails (katastrophe beim parsen in scripten und völliger Unsinn für automatisierte Auswertung)
Der dritte Eintrag matcht nochmal ausschließlich auf authorisierte domain + user aus anderer domain, piped die email an formail (einfaches filtern/parsen der header), sed reduziert mir die "From: " zeile auf die mailadresse des absenders und diese wird dann zusammen mit dem inhalt der mail an das script übergeben.
Eingriff in den MTA (postfix) ist minimal; procmail wird nur gestartet wenn wirklich nötig (nicht noch ein dienst der dauerhaft ressourcen frisst...) und procmail + script werden nur als der lokale user ausgeführt -> deutlich sicherer.
Diese Variante läuft bei mir auf mehreren MX- und lokalen relays zum abfangen und verarbeiten von diversen Statusnachrichten und Warnungen von externen Diensten oder lokalen Geräten (Drucker) die kein brauchbares SNMP beherrschen und nur mails versenden können.

Hast du es wie von mir beschrieben mit local_recipients in der postfix zustellkette probiert? Das ist die deutlich schlankere und schnellere Variante. Zudem muss procmail dafür nicht dauerhaft als dienst laufen, sondern wird nur angestoßen wenn wirklich eine mail an den/die user eingehen die in der local_recipients map definiert sind. Ansonsten arbeitet Postfix wie gewohnt seine Zustellkette ab.
Die .forward eines solchen users kann dann z.b. so aussehen:
Code: Alles auswählen
"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75"
Die .procmailrc eines users in der local_recipients:
Code: Alles auswählen
:0:
*!^From(.*@mydomain.tld||someone@myotherdomain.tld)
/dev/null
:0:
*.*\<html\>.*
/dev/null
:0:
* ^From(.*@mydomain.tld||someone@myotherdomain.tld)
| ( formail -f -k -X "From:" ) | sed 's/^From:.*<//g;s/>$//g;/^--/,$d;/^ *$/d' | $HOME/myscript.sh
Der zweite Eintrag verwirft alle html-formatierten mails (katastrophe beim parsen in scripten und völliger Unsinn für automatisierte Auswertung)
Der dritte Eintrag matcht nochmal ausschließlich auf authorisierte domain + user aus anderer domain, piped die email an formail (einfaches filtern/parsen der header), sed reduziert mir die "From: " zeile auf die mailadresse des absenders und diese wird dann zusammen mit dem inhalt der mail an das script übergeben.
Eingriff in den MTA (postfix) ist minimal; procmail wird nur gestartet wenn wirklich nötig (nicht noch ein dienst der dauerhaft ressourcen frisst...) und procmail + script werden nur als der lokale user ausgeführt -> deutlich sicherer.
Diese Variante läuft bei mir auf mehreren MX- und lokalen relays zum abfangen und verarbeiten von diversen Statusnachrichten und Warnungen von externen Diensten oder lokalen Geräten (Drucker) die kein brauchbares SNMP beherrschen und nur mails versenden können.
Re: Postfix, eingehende Mail an pipe weitergeben, wie?
Ich habe procmail nun am laufen. War doch garnicht so kompliziert paar Änderungen und dann ging es
master.cf
/etc/procmailrc
Das klappt jetzt soweit. Es passiert nun halt nichts ausser das alle Mails einmal durch procmail gehen. Zugestellt werden sie auch, geloggt wird auch. Also das funktioniert.
Jetzt muss ich mir nur noch eine Regel bauen wo ich auf Betreff Inhalt und Anhang prüfe und die Daten dann, bzw die Anhang als PDF weiter gebe, also prüfen ob an "fax@domain.tld" geht, der Betreff eine Nummer bzw nur aus Nummern besteht und ob in der ersten Zeile der Email eine "PIN" steht. Passt alles, das ganze an ein Programm weiter geben.
master.cf
Code: Alles auswählen
procmail unix - n n - - pipe
flags=DORX user=vmail argv=/usr/bin/procmail -t -m /etc/procmailrc ${sender} ${recipient} ${user} ${domain}
Code: Alles auswählen
LOGNAME = $1
EXTENSION = $2
SHELL=/bin/sh
LOGFILE=/tmp/procmail_log
DEFAULT=$HOME/$4/$3/
VERBOSE=yes
:0
$DEFAULT
Jetzt muss ich mir nur noch eine Regel bauen wo ich auf Betreff Inhalt und Anhang prüfe und die Daten dann, bzw die Anhang als PDF weiter gebe, also prüfen ob an "fax@domain.tld" geht, der Betreff eine Nummer bzw nur aus Nummern besteht und ob in der ersten Zeile der Email eine "PIN" steht. Passt alles, das ganze an ein Programm weiter geben.
Re: Postfix, eingehende Mail an pipe weitergeben, wie?
Schau mal dir mal den Link an, da wird erklärt wie man Mail2Fax realisiert.dmant hat geschrieben:11.12.2017 17:11:05Jetzt muss ich mir nur noch eine Regel bauen wo ich auf Betreff Inhalt und Anhang prüfe und die Daten dann, bzw die Anhang als PDF weiter gebe, also prüfen ob an "fax@domain.tld" geht, der Betreff eine Nummer bzw nur aus Nummern besteht und ob in der ersten Zeile der Email eine "PIN" steht. Passt alles, das ganze an ein Programm weiter geben.
http://www.1tn.de/papers/hylafax-email2 ... teway.html
Re: Postfix, eingehende Mail an pipe weitergeben, wie?
Ist es leider nicht... die Entwicklung ist eingestellt und der Entwickler selber (P. Günther) empfiehlt es, aufgrund von Sicherheitsmängeln nicht mehr zu nutzen. Mein Rat wäre, es an solch sensibler Stelle keinesfalls mehr zu benutzen.dmant hat geschrieben:09.12.2017 13:24:27Ok procmail ist da definitiv für meine Anwendung die bessere Alternative.
Siehe https://en.wikipedia.org/wiki/Procmail
Procmail was an early example of a mail filtering tool and language. Procmail is no longer maintained, yet as it had just a single publicized security vulnerability since its Philip Gunther stopped maintaining it[3], it remains in wide use as its capabilities are better than its alternatives.
und https://marc.info/?l=openbsd-ports&m=14 ... 915839&w=2
Unfortunately, I don't see procmail as a good base for mail filtering now.