Postfix: Mails erst durch Script nudeln
Hallo zusammen, möchte gern nochmal ein Postfix-Problem auf euch loslassen, nachdem mir dabei schon öfter von euch geholfen wurde :) Ziel: Eine angenommenen Mail erst durch ein Script jagen, bevor sie weiterverarbeitet wird. Bisheriger Ansatz (war nicht faul, hab gegoogelt): Dachte daran, denselben Ansatz wie Spamassasin zu machen. Da wird ja auch jede eingehende Mail nach gewissen Kriterien untersucht und dann zurückgegeben. Also Änderung in der master.cf: ######## smtp inet n - y - - smtpd -o content_filter=postfixfilter: postfixfilter unix - n n - - pipe flags=RQ user=filter argv=/home/filter/postfixfilter -f ${sender} -- ${recipient} ######## Weiterhin einen user und eine group filter:filter angelegt. In das Verzeichnis /home/filter/ ein script "postfixfilter" geparkt. In erster Instanz wollte ich die Mail nicht verändern sondern so durchpipen, also Inhalt von "postfixfilter": ######## #! /bin/bash | /usr/bin/sendmail -i "$@" ######## Ergebnis ist leider, es klappet nich so janz. Auszug aus /var/log/mail: ######## May 5 15:34:57 schaefer_test postfix/qmgr[1938]: warning: end of input while receiving string data from service private/local May 5 15:34:57 schaefer_test postfix/qmgr[1938]: warning: private/local: malformed response May 5 15:34:57 schaefer_test postfix/master[1936]: warning: process /usr/lib/postfix/local pid 2014 exit status 1 May 5 15:34:57 schaefer_test postfix/master[1936]: warning: /usr/lib/postfix/local: bad command startup -- throttling ######## Bin ich mit meinem Weg generell auf dem Holzweg oder hab ich nur ein paar Denkfehler? Jede Hilfe ist willkommen, auch Doku-Verweise. Bernd -- [Zufallssig 7] When in danger or in doubt, run in circles, scream and shout!
Am Mittwoch, 5. Mai 2004 15:46 schrieb Bernd Tannenbaum:
möchte gern nochmal ein Postfix-Problem auf euch loslassen, nachdem mir dabei schon öfter von euch geholfen wurde :)
Ziel: Eine angenommenen Mail erst durch ein Script jagen, bevor sie weiterverarbeitet wird.
Bisheriger Ansatz (war nicht faul, hab gegoogelt): Dachte daran, denselben Ansatz wie Spamassasin zu machen. Da wird ja auch jede eingehende Mail nach gewissen Kriterien untersucht und dann zurückgegeben.
Also Änderung in der master.cf: ######## smtp inet n - y - - smtpd -o content_filter=postfixfilter: postfixfilter unix - n n - - pipe flags=RQ user=filter argv=/home/filter/postfixfilter -f ${sender}
Wo hast Du denn das "Q" her?
-- ${recipient}
-- Andreas
Hallo zusammen, Am Mittwoch, 5. Mai 2004 15:56 schrieb Andreas Winkelmann:
Am Mittwoch, 5. Mai 2004 15:46 schrieb Bernd Tannenbaum:
Also Änderung in der master.cf: ######## smtp inet n - y - - smtpd -o content_filter=postfixfilter: postfixfilter unix - n n - - pipe flags=RQ user=filter argv=/home/filter/postfixfilter -f ${sender}
Wo hast Du denn das "Q" her?
Aus nem HowTo für die Einrichtung von Spamassasin. Hab ja gehofft, den Mechanismus als Basis nehmen zu können. Das Flag wird aber tatsächlich als "unknown" angemeckert und ignoriert. Ich nehms raus, ändert aber leider nix. Am Donnerstag, 6. Mai 2004 01:18 schrieb Christian Boltz:
Hallo Bernd, hallo Leute, Am Mittwoch, 5. Mai 2004 15:46 schrieb Bernd Tannenbaum:
In erster Instanz wollte ich die Mail nicht verändern sondern so durchpipen, also Inhalt von "postfixfilter": ######## #! /bin/bash
| /usr/bin/sendmail -i "$@"
Das kann so nicht funktionieren. Ich hab eben mal ein kleines Testscript erstellt, das an "less" statt sendmail pipt. Das Script sieht dann so aus: | less Dann füttere ich es: echo "hallo Welt" | ./testscript Ergebnis: ./testscript: line 3: syntax error near unexpected token `|' ./testscript: line 3: ` | less' Damit das Script funktioniert, braucht man noch eine Katze ;-) cat | less In Deinem Script also: cat | /usr/bin/sendmail ..... Alternativ müsste auch /usr/bin/sendmail .... < /dev/stdin funktionieren, das spart sogar eine Pipe und das cat ein.
Denke auch, das Problem liegt am Script. Leider helfen deine Änderungen auch nicht weiter, die Fehlermeldung bleibt unverändert. Trotzdem danke für die Hilfen, ich versuch mich noch was weiter dran. Bernd -- [Zufallssig 8] "I heard if you play the Windows XP CD backwards, you get a satanic message." "That's nothing, if you play it forward, it installs Windows XP"
Hi zusammen, also habs hinbekommen. Ist vielleicht nicht der eleganteste Weg, aber dafür auch von Leuten leicht anwendbar, die sich nicht so mit der Cryptic einer Postfix-master.cf auskennen: 1) procmail im postfix aktivieren. 2) einen user als fake einrichten. 3) Alle eingehenden Mails an diesen user umlenken. 4) in der .procmailrc dieses users die mails verarbeiten. In der .procmailrc kann man recht angenehm alle shell-Befehle nutzen und mit Variablen erarbeitete Größen der Mail zwischenspeichern. So kann man z.B. wie ich brauchte abhängig vom subject die Mails an verschiedene Relais weiterleiten etc.... Wers auch versucht: Viel spass. Bernd -- [Zufallssig 11] "Before you insult someone, walk a mile in their shoes. Then, you will be a mile away from them, and will have their shoes."
Hallo Bernd, hallo Leute, Am Mittwoch, 5. Mai 2004 15:46 schrieb Bernd Tannenbaum:
möchte gern nochmal ein Postfix-Problem auf euch loslassen, nachdem mir dabei schon öfter von euch geholfen wurde :)
Ziel: Eine angenommenen Mail erst durch ein Script jagen, bevor sie weiterverarbeitet wird. [...] In erster Instanz wollte ich die Mail nicht verändern sondern so durchpipen, also Inhalt von "postfixfilter": ######## #! /bin/bash | /usr/bin/sendmail -i "$@"
Das kann so nicht funktionieren. Ich hab eben mal ein kleines Testscript erstellt, das an "less" statt sendmail pipt. Das Script sieht dann so aus: | less Dann füttere ich es: echo "hallo Welt" | ./testscript Ergebnis: ./testscript: line 3: syntax error near unexpected token `|' ./testscript: line 3: ` | less' Damit das Script funktioniert, braucht man noch eine Katze ;-) cat | less In Deinem Script also: cat | /usr/bin/sendmail ..... Alternativ müsste auch /usr/bin/sendmail .... < /dev/stdin funktionieren, das spart sogar eine Pipe und das cat ein.
Ergebnis ist leider, es klappet nich so janz. Auszug aus /var/log/mail: ######## May 5 15:34:57 schaefer_test postfix/qmgr[1938]: warning: end of input while receiving string data from service private/local
Das dürfte wohl mit dem fehlerhaften Testscript zusammenhängen, der Rest sind sowieso Folgefehler. Gruß Christian Boltz -- Wenn Du Dich weiter doof stellst, dann: Warning: loading builtin philipp-cool-down.dll. Couldn't be loaded! Expect trouble!!! [Philipp Zacharias in suse-linux]
Bernd Tannenbaum schrieb:
In erster Instanz wollte ich die Mail nicht verändern sondern so durchpipen, also Inhalt von "postfixfilter": ######## #! /bin/bash | /usr/bin/sendmail -i "$@" ######## Mal von allem anderen abgesehen: Bei anderen Zusätzen zu Postfix ist es doch wohl so, dass Postfix auf einem weiteren Port lauscht, auf dem dann kein Content-Filter liegt, damit kein Loop entsteht. Das Zusatzprogramm mailt dann an den zusätzlichen Port zurück. Wenn du einfach das sendmail-Kommando in deinem Script aufrufst, kommt die Mail doch bei Postfix wieder frisch auf Port 25 rein und du hast deinen Loop... Oder?
Hans
participants (4)
-
Andreas Winkelmann
-
Bernd Tannenbaum
-
Christian Boltz
-
Hans Moser