Problem mit E-Mail-Formular
Yadgar
- php
0 Tom0 Zork im Work0 Zork im Work0 Tom
0 Ingo Turski0 Tom
High!
Ich versuche gerade, in meinem Webspace zu Übungszwecken ein Formular zu installieren, mit dem E-Mail an meine Adresse übermittelt werden kann... Fehlermeldungen bekomme ich keine, trotzdem stelle ich beim Einloggen in mein E-Mail-Konto regelmäßig fest, dass keine E-Mail übermittelt wurde - woran liegt es?
Hier ist der Code für das Formular:
[code=html]
<html>
<head>
<title>PHP: Übermittlung von E-Mail-Daten, Projekt 12-1 (McCarty, PHP Grundlagen, S. 255ff)</title>
</head>
<body>
<h2>Formular zur Übermittlung von E-Mail-Daten</h2>
<form method="post" action="McCarty_255.php">
Geben Sie hier Ihre Daten ein:<br>
<input type="text" name="daten" size="24"><br><br>
<input type="submit" value="Absenden!">
<input type="hidden" name="formular_an" value="yazdegird@gmx.de">
<input type="hidden" name="formular_von" value="wis.pc05@eurochannel.de">
<input type="hidden" name="formular_betreff" value="Testmail!">
<input type="hidden" name="formular_url" value="McCarty_257.html">
</form>
</body>
</html>
[/code]
und hier der eigentliche Mailer:
[code=php]
<html>
<head>
<title>PHP: Übermittlung von E-Mail-Daten, Projekt 12-1 (McCarty, PHP Grundlagen, S. 255ff)</title>
</head>
<body>
<?php
$body = "";
foreach ($_POST as $name=>$value)
{
$body = body . "$name=$value\n";
}
mail ($_POST['formular_an'], $_POST['formular_betreff'], "From: ".$_POST['formular_von'], $body);
// header("Location: {$_POST['formular_url']}");
?>
</body>
</html>
[/code]
Hello,
siehe https://forum.selfhtml.org/?t=163818&m=1067029
Mach kleine Schritte, dann bleibt es überschaubar und vor Allem überprüfbar.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
High!
Das Mailproblem ist (erst einmal) gelöst - ich hatte nicht bedacht, dass dass Feld "formular_von" leer bleiben muss!
Bliebe nur noch die Sache mit header()... solange ich die Funktion weglasse, läuft alles prima, wenn ich sie dazunehme, wird die Mail zwar verschickt, ich werde aber nicht zur dort genannten Seite (Übermittlungsbestätigung) weitergeleitet!
Bis bald im Khyberspace!
Yadgar
Hello,
Bliebe nur noch die Sache mit header()... solange ich die Funktion weglasse, läuft alles prima, wenn ich sie dazunehme, wird die Mail zwar verschickt, ich werde aber nicht zur dort genannten Seite (Übermittlungsbestätigung) weitergeleitet!
Was steht denn drin in $_POST['formular_url']?
Lass es Dir mal mit echo htmlspecialchars($_POST['formular_url']) ausgeben.
Ich vermute, dass da etwas masliert wird. Und Du hast nicht daran gedacht...
Location-Header müssen "fully qualified URLs" sein, also mit Scheme (http://).
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Mahlzeit,
Bliebe nur noch die Sache mit header()... solange ich die Funktion weglasse, läuft alles prima, wenn ich sie dazunehme, wird die Mail zwar verschickt, ich werde aber nicht zur dort genannten Seite (Übermittlungsbestätigung) weitergeleitet!
Kein Wunder - schließlich erzeugst Du vorher schon Output. Die Funktion "header()" funktioniert aber nur, wenn noch nichts an den Browser geschickt wurde ... wenn Du Dich ans EVA-Prinzip halten würdest, gäbe es keine Probleme. :-)
MfG,
EKKi
High!
Kein Wunder - schließlich erzeugst Du vorher schon Output. Die Funktion "header()" funktioniert aber nur, wenn noch nichts an den Browser geschickt wurde ... wenn Du Dich ans EVA-Prinzip halten würdest, gäbe es keine Probleme. :-)
Ach so ist das... ich habe jetzt das HTML-Head-Brimborium mal weggelassen - und siehe da, es funktioniert! Danke für den Tip! Bei McCarty war davon aber nichts zu lesen...
Bis bald im Khyberspace!
Yadgar
Fehlermeldungen bekomme ich keine,
Naja, Du machst auch keine Fehlerprüfung.
trotzdem stelle ich beim Einloggen in mein E-Mail-Konto regelmäßig fest, dass keine E-Mail übermittelt wurde - woran liegt es?
<title>PHP: Übermittlung von E-Mail-Daten, Projekt 12-1 (McCarty, PHP-Grundlagen, S. 255ff)</title>
<input type="hidden" name="formular_an" value="yazdegird@gmx.de">
Der Autor dieses Buches sollte gevierteilt werden. Gut, es ist ein Beispiel, aber so dämlich sollte eigentlich niemand mehr sein und die Empfängeradresse für jeden manipulierbar als Formulardatum zu übermitteln - auch und gerade in Einsteigerbüchern. Dieses Formular ist eine erstklassige Spamquelle.
$body = "";
foreach ($_POST as $name=>$value)
{
$body = body . "$name=$value\n";
$body = $body . $name . "=" . $value . "\n";
}
mail ($_POST['formular_an'], $_POST['formular_betreff'], "From: ".$_POST['formular_von'], $body);
Im Großen und Ganzen scheint der Code in Ordnung. Baue hier noch eine Prüfung des Rückgabewertes von mail() ein, auch wenn ich nicht so recht glaube, dass es dort schon hakt. Ich würde eher auf eine übereifrige Spamabwehr tippen, aber wo genau Deine Mails nun verlustig gehen, kann Dir am ehesten derjenige sagen, der Einsicht in die Protokolle der beteiligten Mailserver hat.
Korrigiere mich:
mail ($_POST['formular_an'], $_POST['formular_betreff'], "From: ".$_POST['formular_von'], $body);
Zusätzlich zum bereits Geschriebenen, schau Dir die Parameterreihenfolge an.
Hello,
mail ($_POST['formular_an'], $_POST['formular_betreff'], "From: ".$_POST['formular_von'], $body);
Zusätzlich zum bereits Geschriebenen, schau Dir die Parameterreihenfolge an.
Naja, habe ich eben auch drüber nachgedacht, Yadgar 'was dazu zu schreiben. Aber das "From" landet jetzt wunderbar im Mail-Body. Ich war nur nicht sicher, ob die Header eventuell durch Übergabe eines leeren Strings "vernichtet" werden könnten.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hi,
Der Autor dieses Buches sollte gevierteilt werden.
ganz Deiner Meinung, aber:
mail ($_POST['formular_an'], $_POST['formular_betreff'], "From: ".$_POST['formular_von'], $body);
Im Großen und Ganzen scheint der Code in Ordnung.
eben nicht. Hier werden Usereingaben ungeprüft in den Mail-Header übertragen, was Massenspams geradezu herausfordert.
freundliche Grüße
Ingo
Hello Ingo,
Der Autor dieses Buches sollte gevierteilt werden.
ganz Deiner Meinung, aber:mail ($_POST['formular_an'], $_POST['formular_betreff'], "From: ".$_POST['formular_von'], $body);
Im Großen und Ganzen scheint der Code in Ordnung.
eben nicht. Hier werden Usereingaben ungeprüft in den Mail-Header übertragen, was Massenspams geradezu herausfordert.
Das kann man so pauschal gar nicht sagen.
Denn es wäre durchaus möglich, dass auf das Array mit den Post-Daten an dieser Stelle schon diverse Prozeduren Anwendung gefunden haben.
Selbstverständlich ist Dein Hinweis nicht unberechtigt, aber den Variablennamen sieht man es doch nicht an.
Harzliche Grüße vom Berg und Frohe Weihnachtszeit
Tom