Variablen im Mailtext bei phpmail() aus formular auslesen
AlphaSky
- php
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
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
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
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
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
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
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
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
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.
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
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:
if ($action == "save") {
mail ($mail, "betreff", "body Danke");
mail ("alphasky@web.de", "neuer Eintrag", "huhu");
Dann folgen die Anweisungen and ie SQL-DB, um die Infos einzutragen
cu, ALphaSky
Hallo nochmal;
habe nochmal einiges ausprobiert;
Das Script sieht jetzt so aus:
if ($action == "save") {
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
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
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 ?
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