php Mailer
Jenny (angemeldet als Mondfrau)
- php
Hallo ihr Lieben,
ich brauch dringend eure Hilfe wegen meines php-Mailers.
Seit Jahren hat der immer gut funktioniert, nun aber bekommen Leute, die mir eine Nachricht senden, einen Fehler angezeigt: Die Nachricht konnte nicht gesendet werden, statt einer Seite, auf der ich mich für die Nachricht bedanke. Die Nachricht von den Leuten bekomme ich allerdings doch.
Ich habe mehrere Seiten mit Mailers drauf, keiner funktioniert mehr richtig. Es wird nach dem Absenden einer Nachricht immer eine leere Seite mit einer Fehlermeldung angezeigt.
Kann mir bitte jemand helfen und mir sagen, was falsch ist? Ich wäre euch sehr dankbar dafür.
Herzliche Grüße Jenny
Hallo Jenny,
tut mir leid, die leere Seite versteckt keine Fehlermeldungen. Das Problem verlässt deinen Server nicht.
Du müsstest in PHP das Error-Reporting aufdrehen - mit error_reporting(E_ALL) - und dann mal gucken was kommt.
Rolf
Hallo Rolf,
danke für deine Antworten. Hast du keine Fehlermeldung bekommen beim Absenden? Ich hab die Mitteilung von dir erhalten. Hast du meine "Danke-Antwort" erhalten?
Liebe Grüße Jenny
Hallo Rolf,
ich hab grad nachgeschaut beim Server. Und da fand ich, dass es anscheinend seit Juni eine neue PHP Version 5.5.38-nmm2 gibt. Hat das was damit zu tun?
Liebe Grüße Jenny
Hallo Jenny,
Und da fand ich, dass es anscheinend seit Juni eine neue PHP Version 5.5.38-nmm2 gibt.
„Neu“ ist gut: Das ist die älteste noch unterstützte Version.
Hat das was damit zu tun?
Wenn du uns mal Fehlermeldungen zeigst, können wir diese Frage möglicherweise beantworten.
Viele Grüße
Robert
Hallo Robert,
danke für deine Antwort.
Diese Fehlermeldung erscheint nach dem Absenden: Die Nachricht konnte leider nicht versendet werden! Allerdings kommt die Nachricht bei mir an, nur der Absender erhält statt meiner Danke-Seite diese Fehlermeldung.
Liebe Grüße Jenny
P.S. Noch eine Frage: Obwohl ich mich registriert habe, funktioniert hier die Anmeldung nicht. Ich habe auch nach der Registrierung eine mail erhalten und dort die Registrierung sozusagen bestätigt.
Hallo Jenny,
Diese Fehlermeldung erscheint nach dem Absenden: Die Nachricht konnte leider nicht versendet werden!
Ich meinte eine PHP-Fehlermeldung, aus der hervorgeht, warum keine Nachricht versendet werden kann. Wie sieht denn der relevante Teil deines gdwmailer.php
aus?
Allerdings kommt die Nachricht bei mir an, nur der Absender erhält statt meiner Danke-Seite diese Fehlermeldung.
Wie kommt denn die Nachricht bei dir an, per Email oder wird sie in einer Datenbank gespeichert?
Noch was: Statt
Ist es deine erste Bewerbung oder ein Upgrade?
wären zwei Radiobuttons mit diesen Optionen intuitiver. Und der Hinweis, dass alle Felder ausgefüllt werden müssen, steht ganz am Anfang sehr klein und wird anschließend nicht mehr geprüft.
P.S. Noch eine Frage: Obwohl ich mich registriert habe, funktioniert hier die Anmeldung nicht. Ich habe auch nach der Registrierung eine mail erhalten und dort die Registrierung sozusagen bestätigt.
Was heißt denn „funktioniert nicht“? Ich hab deine Nachricht zusätzlich mit zu diesem Forum getaggt, damit ein Admin darauf aufmerksam wird.
Viele Grüße
Robert
Hallo Robert,
so sieht mein php Mailer aus. Die Nachricht kommt bei mir als e-mail an. Wie du siehst, gibt es eine thankyou.html, aber die erscheint eben nicht.
Liebe Grüße Jenny
<?php
// Universaler Formularmailer GDW 2005
// Die Formulardaten werden mit action="gdwmailer.php" an diese Datei geschickt und ausgewertet
// In das Formular müssen am Anfang versteckte Formularfelder eingefuegt werden:
// <input type="hidden" name="subject" value="EVALUATION">
// <input type="hidden" name="return" value="http://mondfrau.eu/thankyou.html">
// <input type="hidden" name="empfaenger" value="info@mondfrau.eu">
$trennzeichen= ":\t ";
$mailto=$_POST["empfaenger"];
$subject=$_POST["subject"];
if (isset($_POST["Email"]) && !empty($_POST["Email"])){
$mail=$_POST["Email"];
}
else{
$mail="Dein Formularmailer<Dein Formularmailer>";
}
$header="From: $mail";
$mailtext="";
while(list($_POST["name"], $value) = each($_POST))
{
if ($_POST["name"] !="return" && $_POST["name"] != "subject" && $_POST["name"] != "empfaenger")
{
if(is_array($value))
{
foreach($value as $value_array)
{
$mailtext .= $_POST["name"].$trennzeichen.$value_array."\n";
}
}
else $mailtext.=$_POST["name"].$trennzeichen.$value."\n";
}
}
if(get_magic_quotes_gpc()) $mailtext = stripslashes($mailtext);
mail($mailto, $subject, $mailtext, $header) or die ("Die Nachricht konnte leider nicht versendet werden!");
header("Location: $return");
?>
Hello,
> $trennzeichen= ":\t ";
> $mailto=$_POST["empfaenger"];
> $subject=$_POST["subject"];
Oh, jeh! Eine Spamschleuder! :-(
Hier gehen Post-Parameter direkt in die Mailheader ein. Da kann jeder Gangster Mails an Allewelt schicken.
Du brauchst einen neuen Mailer.
Leider habe ich die nächsten drei Tage keine Zeit, das genauer zu beantworten. Ich werde dein Posting aber mal zum Anlass nehmen, einen neuen Artikel fürs Wiki zu verfassen zum Thema Mailer. Und dabei können wir dann deine Fragen auch so genau beleuchten, dass Du verstehen kannst, was passieren kann und was passieren soll.
Liebe Grüße
Tom S.
Hi Jenny,
vorab: Ich empfehle den Mailer schnellstmöglich offline zu nehmen, weil er gravierende Sicherheitslücken enthält, mit denen du deine Seite zur Spamschleuder machst!
Du kannst übrigens Code auch schön formatieren.
<?php // Universaler Formularmailer GDW 2005 // Die Formulardaten werden mit action="gdwmailer.php" an diese Datei geschickt und ausgewertet // In das Formular müssen am Anfang versteckte Formularfelder eingefuegt werden: // <input type="hidden" name="subject" value="EVALUATION"> // <input type="hidden" name="return" value="http://mondfrau.eu/thankyou.html"> // <input type="hidden" name="empfaenger" value="info@mondfrau.eu">
Das ist keine gute Idee, denn dein Skript sieht nicht so aus, als würde es prüfen, von wo aus es aufgerufen wird. Das heißt, ich kann eine eigene Seite bauen, die dein Skript mit anderen „hidden“-Parametern aufruft und damit
empfaenger
subject
– sendetreturn
– weiterleitet.Ich empfehle diese konstanten Werte in (d)einer PHP-Datei als Konstante definieren.
Dazu missachtet dein Skript den Kontextwechsel zwischen HTTP Post und Email, wodurch möglicherweise die mail
-Funktion noch weiter exploitet werden kann, zum Beispiel durch mehrere Empfänger oder zusätzliche Header-Felder.
Hier werden die Werte aus $_POST
lediglich umkopiert, aber nicht wie in der Dokumentation der mail-Funktion beschrieben maskiert:
$mailto=$_POST["empfaenger"]; $subject=$_POST["subject"]; if (isset($_POST["Email"]) && !empty($_POST["Email"])){ $mail=$_POST["Email"]; } else{ $mail="Dein Formularmailer<Dein Formularmailer>"; }
Mit $_POST['Email'] = "Dein Formularmailer\r\nReply-To: evil@example.org"
ist schon gleich ein zusätzlicher Header eingefügt worden:
$header="From: $mail"; // …
An dieser Stelle würde ich normalerweise eine Fehlermeldung erwarten:
mail($mailto, $subject, $mailtext, $header) or die ("Die Nachricht konnte leider nicht versendet werden!");
Du könntest mal das error reporting anpassen und schauen, warum mail
false
zurückgibt.
Nach dem die
wird das jedenfalls nicht mehr ausgegeben, wobei $return
auch nirgends gesetzt worden ist:
header("Location: $return"); ?>
Auf das schließende ?>
kannst du übrigens verzichten, falls danach nichts mehr kommt.
Viele Grüße
Robert
Hallo Robert, hallo Jenny,
DAS HIER
Du könntest mal das error reporting anpassen und schauen, warum
false
zurückgibt.
war mein erster Hinweis. Bisher ist nichts passiert. Jenny, weißt Du, was mit error_reporting(E_ALL) gemeint ist?
Auf das schließende
?>
kannst du übrigens verzichten, falls danach nichts mehr kommt.
Das Weglassen von ?> in Dateien, die nur PHP enthalten, ist ein PHP Coding Standard und ist eigentlich keine Option.
Rolf
Hallo Robert, hallo Rainer,
vielen Dank für eure Mühe. Ich fühl mich grad total überfordert.
Nein, ich weiß nicht, was mit error_reporting(E_ALL) gemeint ist.
Zwar hab ich viel html gelernt, aber nicht php. Den php Mailer hab ich so übernommen und nur eingefügt, was notwendig war. Es hat auch bisher immer gut funktioniert. Ich hab den php Mailer auf vielen meiner Seiten und nirgends funktioniert er mehr.
Sollte ich einen anderen php Mailer nehmen? Und welchen? Und könnt ihr mir bitte dabei helfen?
Ich wäre so froh.
Vielen Dank und liebe Grüße
Jenny
Hallo Jenny,
Nein, ich weiß nicht, was mit error_reporting(E_ALL) gemeint ist.
Das steht in Rolfs Post und meinem Hinweis.
Zwar hab ich viel html gelernt, aber nicht php.
Zumindest die Basics der verwendeten Software zu verstehen ist nicht verkehrt und PHP ist auch nicht so schwierig ;)
Den php Mailer hab ich so übernommen und nur eingefügt, was notwendig war.
Das ist aber nicht zufällig ein alter, einfacher Formmailer? Du könntest mal den „Advanced“ testen – aber mit festgelegten Werten.
Viele Grüße
Robert
Hallo Robert,
danke für die Antwort. Leider weiß ich nicht, wo ich error_reporting(E_ALL) finde.
Ich glaub, ich geb es auf und lösche den php Mailer auf allen Seiten. Hab Verständnis für meine geringen Kenntnisse, denn ich bin 79 Jahre alt und nicht mehr so fit in diesen Dingen.
Danke an alle und liebe Grüße Jenny
Hallo Jenny,
das kannst Du nicht finden - das musst Du einbauen.
Die Normaleinstellung für ein produktives PHP ist, dass Fehlermeldungen nicht angezeigt werden. Grund dafür ist, dass diese Meldungen Dinge über dein Projekt verraten könnten, die ein Hacker nutzen kann.
Zum Einschalten fügst Du vorne eine Zeile ein, vor $trennzeichen= ":\t ";
, so dass es so aussieht:
<?php
// Universaler Formularmailer GDW 2005
// Die Formulardaten werden mit action="gdwmailer.php" an diese Datei geschickt und ausgewertet
// In das Formular müssen am Anfang versteckte Formularfelder eingefuegt werden:
// <input type="hidden" name="subject" value="EVALUATION">
// <input type="hidden" name="return" value="http://mondfrau.eu/thankyou.html">
// <input type="hidden" name="empfaenger" value="info@mondfrau.eu">
error_reporting(E_ALL);
$trennzeichen= ":\t ";
$mailto=$_POST["empfaenger"];
$subject=$_POST["subject"];
Damit können wir vielleicht herausfinden, was am aktuellen Mailer kaputt geht. Die generellen Einwände gegen diesen Mailer bleiben allerdings bestehen, er ist eigentlich ungeeignet für einen produktiven Einsatz.
Rolf
Lieber Rolf,
Damit können wir vielleicht herausfinden, was am aktuellen Mailer kaputt geht.
wir sollten lieber herausfinden, was Jenny tatsächlich mit dem Mailer erreichen möchte, um ihr zu einer besseren Lösung zu raten, anstatt nur drauf zu hauen, dass der gegenwärtige gefährlich sei.
Liebe Grüße,
Felix Riesterer.
Habe zwar hier seit Jahren nichts mehr geschrieben und ich kann hier auch nicht mehr viel beitragen, aber das muss dann doch noch mal sein: Das Script habe ich verbrochen (hier eine frühe Variante in einem SELFHTML-Artikel, ich habe in meinem Archiv noch eine aktuellere, die der von Jenny genutzten Variante noch ähnlicher ist). Aber zu meiner Verteidigung muss ich sagen, dass das eine modifizierte Variante ist — das mit dem frei definierbaren Empfänger wurde von irgendjemandem hinzugefügt. Ich bin erstaunt, dass das Script immer noch im Netz rumgeistert.
Grüße
Patrick
Hallo Patrick,
Habe zwar hier seit Jahren nichts mehr geschrieben und ich kann hier auch nicht mehr viel beitragen, aber das muss dann doch noch mal sein: Das Script habe ich verbrochen […]
Was heißt denn verbrochen? Die von Jenny verwendete Version ist eine Verschlimmbesserung deines Skripts – und dein Skript ist in der gefundenen Form zwar nicht optimal, aber eigentlich immer noch funktionsfähig.
Viele Grüße
Robert
Hallo Jenny (angemeldet als Mondfrau),
Noch eine Frage: Obwohl ich mich registriert habe, funktioniert hier die Anmeldung nicht. Ich habe auch nach der Registrierung eine mail erhalten und dort die Registrierung sozusagen bestätigt.
Es gibt keinen Benutzer Mondfrau. Du solltest die Registrierung einfach noch mal durchführen.
Bis demnächst
Matthias
Hallo Matthias,
ich kann die Registrierung nicht nochmal durchführen. Denn sowohl mein Name (Mondfrau) als auch meine e-mail Adresse existieren bereits, erhalte ich als Antwort.
Nach meiner Registrierung habe ich von SELFHTM-Wiki diese Info erhalten und den Link angeklickt:
Hallo,
jemand mit der IP-Adresse 86.56.200.15, wahrscheinlich Sie selbst, hat das Benutzerkonto „Mondfrau“ bei SELFHTML-Wiki registriert.
Um die E-Mail-Funktionen von SELFHTML-Wiki (wieder) zu aktivieren und um zu bestätigen, dass dieses Benutzerkonto wirklich zu Ihrer E-Mail-Adresse und damit zu Ihnen gehört, öffnen Sie bitte folgenden Link in Ihrem Browser:
http://wiki.selfhtml.org/wiki/Special:ConfirmEmail/7c7d8fed6b476f765ac922e157433476
Liebe Grüße Jenny
Hallo Jenny,
Wiki-Accounts und Forum-Accounts sind zwei verschiedene Paar Schuhe, für das Forum kannst du dich hier registrieren: https://forum.selfhtml.org/users/sign_up
Gruß
Julius
Hallo Jenny,
ich brauch dringend eure Hilfe wegen meines php-Mailers.
welchen denn?
Seit Jahren hat der immer gut funktioniert, nun aber bekommen Leute, die mir eine Nachricht senden, einen Fehler angezeigt: […]
Ist da eventuell eine neue PHP-Version auf dem Server installiert (worden)?
Viele Grüße
Robert
Liebe Jenny,
Du solltest umgehend mit Deinem Support Kontakt aufnehmen. Es ist möglich, dass man aus Sicherheitsgründen (Stichwort SPAM-Schleuder) dieses Script irgendwie unschädlich machen wollte und deshalb etwas eingestellt hat, was Dein Script offensichtlich nicht verträgt. Außerdem kann Dir Dein Support auch etwas zu den von PHP generierten Fehlermeldungen sagen, die der Webserver in eine Logdatei schreibt, wenn Du an diese Infos nicht selbst dran kommst.
Hier kann man Dir nur dringendst ans Herz legen, dass Du diesen Mailer umgehend entsorgst! Das Argument "hat bisher immer tadellos getan" ist gerade in diesem Fall eine zweischneidige Sache: Die Spammer fanden das auch. Aber im Zweifelsfall haftest Du für den von Deinem Mailer versandten Spam...
Liebe Grüße,
Felix Riesterer.