Autoresponder klappt nicht


Lord_Icon

Member
Moin,

ich hab grad ein Kundenverwaltungssystem am wickel... leider tut es nicht das, was es machen sollte.

Hersteller gibt leider kein Support, da dieses ausschließlich auf Debian betrieben werden soll. Läuft bei mir aber Stabil auf Suse.

So... hier jetzt erstmal die Datein + Inhalt:
/etc/postfix/main.cf
Code:
alias_database = hash:/etc/aliases, hash:/etc/postfix/ksaliases

/etc/postfix/ksaliases
Code:
ks0121p1: "| /root/kundensystem/ksautoresponder.php", ks0121p1
ks0114p2: "| /root/kundensystem/ksautoresponder.php", ks0114p2
ks0114p1: "| /root/kundensystem/ksautoresponder.php", ks0114p1
ks0114p3: "| /root/kundensystem/ksautoresponder.php", ks0114p3

Dieses wird dann an ein Script übergeben. Und hier scheint der Wurm drin zu sein. Dieses liegt im Anhang bei.

Dummerweise gibt es in keiner Log Datei einen Hinweiss, das irgendwas Fehlerhaft ist.
Respektive, das was ausgeführt wird.

Hier nun meine 2 Fragen:

Um das Script erstmal manuell zu testen... wir müsste ich es starten, damit eine Mail versendet wird ?

So wirklich verstehe ich noch nicht den Zusammenhang von
main.cf => /etc/postfix/ksaliases => /root/kundensystem/ksautoresponder.php
Was macht denn alias_database = hash:/etc/postfix/ksaliases
 

Attachments

Um das Script erstmal manuell zu testen... wir müsste ich es starten, damit eine Mail versendet wird ?
man nehme eine Mail (im mbox-Format) und leite sie per stdin an das Script weiter.
Code:
/root/kundensystem/ksautoresponder.php < eineMail.txt

So wirklich verstehe ich noch nicht den Zusammenhang von
main.cf => /etc/postfix/ksaliases => /root/kundensystem/ksautoresponder.php
Was macht denn alias_database = hash:/etc/postfix/ksaliases
Das ist einfach eine Tabelle in der steht, was an wen weitergeleitet werden soll. Sie muss ebenso wie die aliases-Datei mit "postalias" übersetzt werden (was Du vermutlich vergessen hast, sonst würde eine Meldung erscheinen).
Code:
man postalias
man 5 aliases
In den Aliases-Dateien kann man u.A. auch die Mail durch ein ausführbares Script pipen. Im angegebenen Beispiel vermisse ich einen Backslash vor dem letzten Empfänger, da dieser nicht weiter expandiert werden soll.
Code:
ks0121p1: "| /root/kundensystem/ksautoresponder.php", [B][COLOR="Red"]\[/COLOR][/B]ks0121p1

Abgesehen davon, dass Autoresponder vollkommen out sind, da sie selten richtig funktionieren und oftmals Probleme bereiten, ist das von Dir verwendete Script absolut unbrauchbar, da es viele Dinge falsch macht. Wenn man unbedingt einen Autoresponder braucht, sollte man "vacation" verwenden, da sich dessen Entwickler wenigstens was bei der Sache gedacht haben und die entsprechenden RFCs kennen.
 
Hi LinuxAdmin

Danke für deine Ratgebende Hilfe.

man nehme eine Mail (im mbox-Format) und leite sie per stdin an das Script weiter.
Hier könnte evtl. schon mein Problem liegen.
Denn anders, als es der Hersteller "wünscht" speichere ich die Mails nicht im MBox Format sondern im anderen (komme grad auf dessen Name nicht [jede Mail hat seine eigene Datei]).

Im Script sehe ich, das auf("php://stdin","r")) zurückgegriffen wird.
Kann es sein, das hier schon das ganze Problem liegt?
Oder kann stdin auch mit den anderen Format umgehen (also nicht mbox)

Im Web finde ich leider keine Beispieldatei von einer MBox... sodass ich das Script mal manuell testen kann.
Und mein produktiv System kurzfristig umzustellen wäre wohl äußert gewagt.

Und extra ein Testsystem aufzubauen ... **brrrr**

Sie muss ebenso wie die aliases-Datei mit "postalias" übersetzt werden
/etc/postfix/ksaliases
sowie
/etc/postfix/ksaliases.db
haben den gleichen Zeitstempel. Drum müsste das vom Verwaltungssystem mit umgesetzt worden sein. Sicherheitshalber hab ich es aber dennoch nochmal manuell ausgeführt. Leider keine Besserung.

Im angegebenen Beispiel vermisse ich einen Backslash vor dem letzten Empfänger, da dieser nicht weiter expandiert werden soll.
Hab ich auch mal manuell geändert und postalias nochmal drübergeschickt.
Leider immer noch keine Besserung.

Abgesehen davon, dass Autoresponder vollkommen out sind .......
DAS kann ich nicht ändern. Das Verwaltungssystem gibt mir das so vor.
Ich bin schon froh, das die autoresonders.php als einzige Datei nicht verschlüsselt ist.
 
Testmail (Daten müssen noch angepasst werden!):
Code:
From [email protected]  Thu Mar 11 23:09:12 2010
Return-Path: <[email protected]>
X-Original-To: empfaenger
Delivered-To: [email protected]
Received: by meinserver.mydomain.de (Postfix, from userid 500)
	id 3C0D6150154; Thu, 11 Mar 2010 23:09:12 +0100 (CET)
Date: Thu, 11 Mar 2010 23:09:11 +0100
To: [email protected]
Subject: Ein Test
Message-ID: <[email protected]>
User-Agent: nail 10.5 4/27/03
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
From: [email protected] (Joe Tester)

blah blah
Die zwei \n am Ende, die das v-Bulletin unterschlägt, sind wichtig...

DAS kann ich nicht ändern. Das Verwaltungssystem gibt mir das so vor.
Ich bin schon froh, das die autoresonders.php als einzige Datei nicht verschlüsselt ist.
Es zwingt Dich niemand, das auch anzubieten (es funktioniert ja im Moment sowieso nicht ;)).
Wenn Du unbedingt das Script verwenden willst, sorge wenigstens dafür, dass der richtige Absender verwendet wird (der nicht unbedingt im vorher im "To:"-Feld stand), dass Mails an Mailinglisten ignoriert werden und dass jeder Empfänger maximal eine Mail erhält. Such Dir die entsprechenden RFCs raus und sorge dafür dass das Script sich an die Standards hält.
 
DANKE...

Bin nun der Sache schon ein bissel näher gekommen.

Also:
Das Script läuft. Einmal mit deiner Mail [mbox] (geänderte Absender/Empfänger) und einmal mit einer realy Email von mir selbst.

Somit muß also irgendwas nciht korrekt übergeben werden.

Ich fasse meine Configuration nochmal zusammen:

main.cf
alias_database = hash:/etc/aliases, hash:/etc/postfix/ksaliases
alias_maps = hash:/etc/aliases, hash:/etc/postfix/ksaliases

/etc/postfix/ksaliases
ks0121p1: "| /root/kundensystem/ksautoresponder.php", ks0121p1


postalias /etc/postfix/ksaliases
/etc/init.d/postfix restart

Wie gesagt hab ich es auch schon mit /ks0121p1 gemacht (wie von dir vorgeschlagen.

Hab ich noch andere Möglichkeiten die Übergabe an die ksautoresponder.php zu überprüfen ?

EDIT
Endlich ist /var/log/mail gesprächig.

Mar 12 14:08:49 Rootsystem local[30403]: fatal: execvp /root/kundensystem/ksautoresponder.php: Permission denied

Mar 12 14:05:38 Rootsystem postfix/local[29883]: DEB64E075: to=<[email protected]>, orig_to=<[email protected]>, relay=local, delay=0.26, delays=0.22/0.01/0/0.03, dsn=4.3.0, status=deferred (temporary failure. Command output: local: fatal: execvp /root/kundensystem/ksautoresponder.php: Permission denied )

Datei hat root:root + 755 Rechte.
777 bringt auch nichts.

Ebenfalls
chown mail:mail ksautoresponder.php mit 777 Rechten bringt auch eine Zugriffsverletzung.

Welches Prog greift denn nun auf diese Datei zu... Theorisch doch Postfix. Also mail:mail.
 
Last edited by a moderator:
Ist /root/kundensystem/config.inc.php (und ggf. /root/kundensystem/functions.php, falls verwendet) vom Script aus lesbar?
Darf Dein Scripr einem MySQL-Socket öffnen? Mails versenden (z.B. per sendmail-wrapper)?
 
Hi Whistler,

ich hab jetzt mal in den ersten Zeilen des Script folgendes reingeschrieben:

Code:
$from = 'info@meine_dom.de';
$to = 'info@meine_dom.de';
$subject = testmail;
$content = bla;

                $header  = "From: \"$to\" <$to>\n";
                $header .= "Reply-To: no@reply\n";
                $header .= "Return-Path: ".$to."\n";
                $header .= "Sender: ".$to."\n";
                $header .= "Content-Type: text/plain\n";
                $header .= "X-Mailer: Kundensystem AutoResponder\n";

mail($from, "AutoReply [$to]: ".$subject, html_entity_decode($content), $header);

Manuell ausgeführt bekomme ich eine Mail mit den Betreff "testmail".
Script selbst klappt also.

Schicke ich nun eine Email worauf der Autoresponder normalerweise reagieren sollte, erhalte ich wieder diesen "zugriff verweigert" in den Logs.
Somit denke ich mal, das das Script selbst nicht "angefasst" werden kann... obwohl 777 und mitlerweile auch auf mail:mail als Eigentümer.

Wer führt denn nun das Script aus ?
 
Der MTA, also vermutlich nicht root.

Da chmod 777 /root normalerweise eine sehr schlechte Idee ist, würde ich erstmal mit
Code:
ks0121p1: "| /usr/bin/strace -o /tmp/autoresponder.log /usr/bin/php /root/kundensystem/ksautoresponder.php", ks0121p1
schauen, was wirklich ist und dann passende Berechtigungen setzen.

PS: Einen Shebang wie "#!/usr/bin/php -q" hast Du schon am Anfang?
 
AHHH... nun kommt ein bissel Licht ins Dunkle.

Die Log hat annähernd 2500 Zeilen... die letzten dabei sind aber (denke ich) die ausschlaggebenden:

Code:
open("/root/kundensystem/ksautoresponder.php", O_RDONLY) = -1 EACCES (Permission denied)
write(2, "Could not open input file: /root"..., 66) = 66

Vermutlich steht RDONLY für ReadOnly, was aber nicht korrekt ist.
Diese Datei hat 777.
Mittlerweile hab ich folgende Inhaber (vergeblich) versucht:
root:root
mail:mail
dovecot:dovecot
postfix:postfix
nobody:nobody <= weil das tmp/log File dieser Eigentümer war.

PS: Einen Shebang wie "#!/usr/bin/php -q" hast Du schon am Anfang?
Jetzt ja. Ich hatte vorher kein -q dran gehabt.


Soll ich die ganze Log mal posten oder waren die oben genannten Zeilen schon das Gesuchte ?
 
RDONLY sagt nur, daß er die Datei nicht beschreiben will - auch wenn er es dürfte.

nobody:nobody ist schonmal ganz gut - nur muß das Script dann auch in einem für diesen User erreichbaren Pfad ("/root/" ist das nicht und sollte es auch nicht sein) stehen.
 
JAAA!!!!

Das war der auschlaggebende Hinweis.

Aber statt den Ordner die entsprechenden Rechte zu geben, hab ich die Datei einfach in /etc/postfix/ gelegt.

Und siehe da... es klappt dann einwandfrei.

VIELEN DANK für die Hilfe/Hinweise
 
Schön für Dich, dass es jetzt funktioniert.

ABER: Bitte sei so gut und verbessere das Script, dass es nicht so völlig brain-dead ist, wie die Version, die Du gepostest hast.
Zumindest solltest Du die Absender-Adresse nicht aus dem alten "To:"-Feld ermitteln. Nichts ist ärgerlicher für den Verwalter einer Mailingliste, wenn solche Autoresponder Listen zuspammen und man den Schuldigen nicht einfach finden und abmelden kann, weil der Autoresponder die Mailingliste als Absender verwendet anstatt des richtigen Empfängers.
 

Back
Top