AlphaSky: Variablen im Mailtext bei phpmail() aus formular auslesen

Hallo

ich ahb in meiner php-Seite einige Eingabefelder:

...
<tr><td>E-Mail: </td><td><input type=text name=mail value=@></td></tr>
...

Jetzt möchte ich mit mail eine Email an mich versenden, die mir ein paar Formulardaten übermittelt.

mail("alphasky@web.de",
     "neuer Eintrag",
     "Es hat sich jemand eingetragen Name: $vname $nname email: $mail",
     "From: alphasky@web.de\r\nReply-To: alphasky@web.de");

Das funktionier leider nciht. Die EMail kommt zwar an, aber ohne die Daten wie $vname $nname $mail.

Woran liegt das und wie bekomme ich die Daten in die Mail ?

Vielen Dank,
AlphaSky

  1. Guude!

    <tr><td>E-Mail: </td><td><input type=text name=mail value=@></td></tr>

    Hier würde ich auf alle Fälle ein paar "s einfügen: name="mail" usw.

    Das funktionier leider nciht. Die EMail kommt zwar an, aber ohne die Daten wie $vname $nname $mail.

    In den neueren PHP-Versionen funktioniert das aus Sicherheitsgründen so nicht mehr. Die geposteten Variablen musst Du dann mit $_POST["mail"] etc. ansprechen. Übermittelst Du sie per GET-Methode (was hier nicht zu empfehlen wäre), verwende $_GET["mail"].

    LG
    Lemmy

    Neue Homepage, neues Design: http://www.olison.com

    --
    Realität ist die Illusion, die durch ein zu geringes Maß an Alkohol entsteht...
    1. Hier würde ich auf alle Fälle ein paar "s einfügen: name="mail" usw.

      Also das ist ja alles innerhalb der php-datei.
      Muss ich da nicht die "s escapen ?  name="mail" ?

      Und kann ich dann das $POST direkt einsetzen

      mail("$_POST["mail"]",    ?

      cu
      AlphaSky

      1. Hallihallo

        Also das ist ja alles innerhalb der php-datei.
        Muss ich da nicht die "s escapen ?  name="mail" ?

        Ja, es gibt aber noch eine Möglichkeit, ist aber nicht immer günstig.

        if (diesunddas)
           {  // Klammer der Bedingung öffnen
        ?>
        <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
         <input type....>
        </post>
        <?php
           }  // Klammer der Bedingung schließen
        ?>

        Je nach der Menge der einzusetzenden Variablen,
        ist der Quelltext kleiner und übersichtlicher.

        Und kann ich dann das $POST direkt einsetzen

        mail("$_POST["mail"]",    ?

        Ja

        Tschö, Auge

        1. Hallo,

          Und kann ich dann das $POST direkt einsetzen

          mail("$_POST["mail"]",    ?

          Ja

          NEIN! Sowas sollte man unbedingt vermeiden, weil solche Formmailer
          leicht von Spammern mißbraucht werden können.

          siehe: http://forum.de.selfhtml.org/archiv/2002/12/31513/#m170487

          Wenn Du die mail eh nur an Dich schicken willst, spricht doch nichts
          dagegen, die Adresse im Script zu definieren anstatt sie mit dem
          Formular zu verschicken.

          Gruß,
          dimde

          1. Hallo

            Hallo,

            Und kann ich dann das $POST direkt einsetzen

            mail("$_POST["mail"]",    ?

            Ja

            NEIN! Sowas sollte man unbedingt vermeiden, weil solche Formmailer
            leicht von Spammern mißbraucht werden können.

            Da hast du recht. Wenn du aber die Daten des Formulars z.B.
            an dich und an den Ausfüllenden schicken willst, brauchst du
            dessen Emailadresse. Die kann aber in dem Moment nur aus dem
            Formular kommen. Oder du gibstdem User nur die Möglichkeit,
            per Email mit dir in Kontakt zu treten, was etwas umständlich
            sein kann. Und mit einer Prüfung der Adresse bei der Übergabe
            aus dem Formular kommst du auch nicht weiter. Die Prüfung
            würde ja auch bei Mißbrauch des Formmailers erfolgen.

            Wenn Du die mail eh nur an Dich schicken willst, spricht doch nichts
            dagegen, die Adresse im Script zu definieren anstatt sie mit dem
            Formular zu verschicken.

            Das würde ich auch bevorzugen.

            Tschö, Auge

            1. Hallo Auge,

              NEIN! Sowas sollte man unbedingt vermeiden, weil solche Formmailer
              leicht von Spammern mißbraucht werden können.

              Da hast du recht. Wenn du aber die Daten des Formulars z.B.
              an dich und an den Ausfüllenden schicken willst, brauchst du
              dessen Emailadresse. Die kann aber in dem Moment nur aus dem
              Formular kommen.

              Jep, in dem Fall geht das natürlich nicht anders. Im Ausgangsposting
              gings halt darum, eine mail an ihn selbst zu versenden und da kommt es
              ja bei Formmailern häufig vor, dass auch diese Adresse _unnötigerweise_
              aus dem Formular kommt - daher mein Aufschrei :)

              <quote>
              Jetzt möchte ich mit mail eine Email an mich versenden,
              die mir ein paar Formulardaten übermittelt.
              </quote>

              Gruß,
              dimde

              1. Hallo dimde

                <quote>
                Jetzt möchte ich mit mail eine Email an mich versenden,
                die mir ein paar Formulardaten übermittelt.
                </quote>

                Ja ja, hab' ich vorhin auch nochmal nachgelesen,
                da ist die Adresse hartkodiert der richtige Weg.

                Tschö, Auge

                1. Mag schon sein, aber ich muss im Ende 2 Mails versenden:

                  Eine an mich mit den registrierten Daten Name, email, .....
                  _Und_ eine bestätigung an den User: "Danke, dass Sie sich ...."

                  Vor allem habe ich das Script nicht programmiert; ich habe nur den Auftrag von der Schulleitung dieses Feauture hinzuzufügen und will da halt nix kaputt machen.

                  Also brauche ich ja zwingend die Information "mail" aus dem Formular.

                  Aber warum stellt das überhaupt ein Sicherheitsrisiko dar ?
                  Ein Spammer könnte jetzt meinetwegen den Empfänger einsetzen, aber der Body ist doch nicht frei wählbar ?"

                  cu, AlphaSky

                  PS: ich bin für alle mwthoden offen, Hauptsache, es kommt eine Bestätigungsmail beim User + eine bei mir an.

                  1. Hallo

                    Mag schon sein, aber ich muss im Ende 2 Mails versenden:

                    Eine an mich mit den registrierten Daten Name, email, .....
                    _Und_ eine bestätigung an den User: "Danke, dass Sie sich ...."

                    Dann brauchst du eine Emailadresse aus dem Formular (Anfragender)
                    und die deinige solltest du im Skript fest notieren.
                    Das sind ja dann wohl auch zwei verschiedene Emails, oder?

                    Vor allem habe ich das Script nicht programmiert; ich habe nur den Auftrag von der Schulleitung dieses Feauture hinzuzufügen und will da halt nix kaputt machen.

                    Aber warum stellt das überhaupt ein Sicherheitsrisiko dar ?
                    Ein Spammer könnte jetzt meinetwegen den Empfänger einsetzen, aber der Body ist doch nicht frei wählbar ?"

                    Wenn ich jemanden ärgern will, ist mir das aber egal.
                    Der kriegt dann die Emails.
                    Ich kann mir ja ein Formular schreiben, das ich an dein
                    verarbeitendes Skript schicke. Da kann ich dann auch
                    mehrere Emailadressen eintragen.
                    Um das zu verhindern muß man abfragen, woher die Daten kommen.

                    if ($HTTP_SERVER_VARS["HTTP_REFERER"] == "mein_formular.html")
                       {
                       // Verarbeitung
                       }
                    else
                       {
                       echo "<p>Zugriff nicht gestattet!</p>";
                       }

                    Und es ist eine Prüfung fällig, ob da vielleicht
                    mehrere Adressen angegeben wurden. Davon ausgehend,
                    daß normalerweise eine Email an den Anfragenden
                    verschickt wird, könnten mehrere Adressen in einer
                    Zeile kommagetrennt notiert sein. In Emailadressen
                    gibt es aber kein Komma. Also suche nach dem
                    ersten Komma.

                    if (ereg("([,]{1})", $mail))
                       {
                       echo "<p>Dies ist keine gültige Emailadresse</p>";
                       // oder: Das waren mehrere Emailadressen! Das wahr wohl nix!
                       // oder so ähnlich :-)
                       }
                    http://www.php3.de/manual/de/function.ereg.php
                    (http://www.php.net/ ist momentan nicht erreichbar.)

                    Es gibt auch noch andere Möglichkeiten der Prüfung.
                    Es gibt aber bestimmt auch andere Möglichkeiten, dir
                    Adressen unterjubeln zu wollen, da kenne ich mich nicht aus.

                    Tschö, Auge

                    1. Hi,

                      Habe den Fehler entdeckt.

                      1. Habe ich das Fled "Email" jetzt mit den  value="@" geschrieben und dann hab ich

                      2. die mail-Aufforderungeinfach UNTER den submit getan.

                      Woran es lag, weiß ich nicht, aber jetzt klappt es   ;-))))
                      UPDATE: Es lag an dem zu früh eingefügten "mail(xy)"

                      Wie kann ich im Body der Message:   1) eine neue zeile einfüen <br> ??
                                                          2) Variablen angeben $name oder "$name" oder '$name'

                      Un wie kann ich den Absender angeben ?
                      Im Moment sieht bei mir sie Zeile so aus:

                      Save Routine

                      if ($action == "save") {

                      Mailer Danke

                      mail ($mail, "betreff", "body Danke");

                      Mailer webmaster

                      mail ("alphasky@web.de", "neuer Eintrag", "huhu");

                      Dann folgen die Anweisungen and ie SQL-DB, um die Infos einzutragen

                      cu, ALphaSky

                      1. Hallo nochmal;

                        habe nochmal einiges ausprobiert;
                        Das Script sieht jetzt so aus:

                        Save Routine

                        if ($action == "save") {

                        Mailer Danke

                        Mailer webmaster

                        if (ereg("([,]{1})", $mail))
                              {
                              echo "<p>Dies ist keine gültige Emailadresse</p>";
                              }
                           else
                              {
                           mail ($mail, "GGW MAIL", "Vielen Dank für Ihren Eintrag im GGW Jahrgangs-Archiv");
                           mail ("alphasky@web.de", "neuer Eintrag", "Es hat sich jemand eingetragen");
                              }
                        (Hier folgt die Save-Routine für die SQL-DB)

                        Es gibt leider keinen eindeuigen HTTP-refferer !
                        Das gesamte Script ist eine index.php4
                        Die einzelnen teile werden aufgerufen durch
                        domain/jgarchiv/?action=show (Start)
                        domain/jgarchiv/?action=add (Formular)
                        domain/jgarchiv/?action=save (Da greift dann das Mail-Script)
                        u.s.w.

                        Wenn ich also einen  HTTP-Refferer eingebe, weiß ich nciht, wie ich den definieren soll !
                        Denn es gibt ja  domain/jgarchiv/?action=orderby&factor=name und andere und ich kann von allen aus auf das ADD bzw. SAVE kommen.
                        Wie soll ich also den reffere angeben, wenn die index.php4 nicht mal im Link direkt angesprochen wird ?

                        Und vor allem: Wie setze ich den dann in das Script?
                        So etwa ?

                        if action=save
                           if (komma in $mail)
                              if HTTP-REFFERER=xy
                              {
                           mailer-geschichte
                           {
                        DB-Eintragung
                        {

                        cu, AlphaSky

                        1. Hallo

                          Es gibt leider keinen eindeuigen HTTP-refferer!
                          Das gesamte Script ist eine index.php4
                          Die einzelnen teile werden aufgerufen durch
                          domain/jgarchiv/?action=show (Start)
                          domain/jgarchiv/?action=add (Formular)
                          domain/jgarchiv/?action=save (Da greift dann das Mail-Script)
                          u.s.w.

                          Du solltest dir Gedanken über das Konzept machen.
                          Die Startseite (z.B.) braucht keinen Parameter (action=show).
                          (Übrigens ohne "/" vor dem "?")
                          Dann kannst du z.B. feststellen ob jemand direkt von der
                          Startseite kommt, (!isset($action)) kommt von Start.
                          Wozu man das im speziellen Fall auch immer gebrauchen kann.
                          Dann könntest du auch die Variable $action abfragen.
                          Wenn $action == "add" führe das Skript aus, sonst nicht.

                          Tschö, Auge

                          1. Hi,

                            also die domain ist wirklich so:

                            http://ggw.biz-worms.de/ggwonline/jgarchiv/?action=show
                            Und wenn ich den letzten / weglasse, leitet er mich autom. auf die
                            gleiche Adresse mit / um.

                            Ich kapier jetzt nur net, wie ch das ganze einbinden soll.

                            if (!isset($action == add)) )
                            u.s.w. oder anders ?

                            Also man gibt alle Daten ein, und klcikt auf "Eintragen".
                            Dann wird aufgerufen ?action=save
                            Also wäre action=add ja der einzige Refferer. Nur wie binde ich den ein ?

                            UND: Wie kann ich in der  mail (x@y.de, "Betreff" "Body")
                            im BODY eine neue Zeile machen ?   geht das mit <br> ??

                            cu, AlphaSky

                            PS: Was mache ich, wenn der Thread im Archiv verschlungen wurde ?

                            1. Hallo

                              UND: Wie kann ich in der  mail (x@y.de, "Betreff" "Body")
                              im BODY eine neue Zeile machen ?   geht das mit <br> ??

                              Bei einer HTML-Mail ja, sonst mit "\n".

                              Hoffentlich wissen, was du wissen wolltest, sonst weiterfragen.

                              Tschö, Auge