Yadgar: Problem mit E-Mail-Formular

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]

  1. Hello,

    • woran liegt es?

    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

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. 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

      1. 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

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

      2. 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

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. 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

  2. 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.

    1. Korrigiere mich:

      mail ($_POST['formular_an'], $_POST['formular_betreff'], "From: ".$_POST['formular_von'], $body);

      Zusätzlich zum bereits Geschriebenen, schau Dir die Parameterreihenfolge an.

      1. 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

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    2. 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

      1. 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

        --

        Nur selber lernen macht schlau
        zweifeln lassen :-)