eigener Formmailer klappt nichtForum » Webzone » PHP & MySQL » eigener Formmailer klappt nicht
-
22.08.2009 um 18:37 Uhr
Da ich leider hier kein Tutorial zu einem eigenen Formmailer gefunden habe, bin ich natrlich im Internet auf die Suche gegangen. Habe auch eine recht einfache Anleitung gefunden.
Habe alles so gemacht, wie es in der Anleitung steht -> www.webmaster-portal.de/Tutorial_9_Webmaster.html (allerdings habe ich die HTML Seiten bei mir in PHP Seiten gendert, damit es in meine Homepage passt... sprich, ich hab den ganzen Mist mit "html body usw." einfach weggelassen, das braucht man ja beim includen nicht.
Das abschicken klappt auch und die Dankeseite erscheint auch, nur kommt in meinem Emailpostfach keine Mail an.
Hier ist nochmal meine Seite, damit ihr euch das vielleicht anschauen knnt -> www.little-strange.de/contact.php
Ich sag schon mal Danke!! Kuss
Nini
PS: Achja, auerdem habe ich leider nichts darber gefunden, wie ich einen Dateiupload einbinde. Muss ich da einfach nureinfgen? Irgendwie kommt mir das zu einfach vor.<input type="file">
Argh, ich bei mir gleich den Arm ab.
Der Beitrag wurde insgesamt 1 mal editiert, zuletzt 22.08.2009 um 18:52 Uhr ... -
22.08.2009 um 21:22 Uhr
Hallo,
mit dem Link zur Seite kann ich da nicht viel anfangen, ich braeucht den Code, sonst kann ich da recht wenig zu sagen
Liebe Gruesse
Alice... { signatur } ... -
22.08.2009 um 22:48 Uhr
Hihi stimmt, ist ja logisch. Tut mir leid. Warte, hier ist der Code von der Contactseite:
<?php include("head.php");?> <!--------------INHALT-----------------> <div class="title">Contact</div> <form action="mail.php" method="post"> <table border="0" width="500" cellspacing="0" cellpadding="0" align="center"> <tr> <td width="200">Name <b>*</b></font></td> <td width="300"><input type="text" name="name"></td> </tr> <tr> <td height="15" colspan="2"></td> </tr> <tr> <td width="200">Telefon</td> <td width="300"><input type="text" name="telefon"></td> </tr> <tr> <td height="5" colspan="2"></td> </tr> <tr> <td width="200">Telefax</td> <td width="300"><input type="text" name="telefax"></td> </tr> <tr> <td height="15" colspan="2"></td> </tr> <tr> <td width="200">eMail <b>*</b></td> <td width="300"><input type="text" name="email"></td> </tr> <tr> <td height="15" colspan="2"></td> </tr> <tr> <td width="200" valign="top">Mitteilung <b>*</b></td> <td width="300"><textarea cols="30" rows="10" name="text"></textarea></td> </tr> <tr> <td height="15" colspan="2"></td> </tr> <tr> <td width="200">Formular</td> <td width="300"><input type="submit" value="Senden"></td> </tr> <tr> <td height="15" colspan="2"></td> </tr> <tr> <td width="200"></td> <td width="300"><b>*</b> - notwendige Angaben!</td> </tr> </table> </form> <!--------------INHALT ende-----------------> <?php include("foot.php");?>
Dann kommt hier der Code von der Mailseite (also mail.php)
<?php $empfaenger = "nini@little-strange.de"; $betreff = "Contact"; $mailtext = "Name: $name Telefon: $telefon Telefax: $telefax eMail: $email Betreff: $auswahl Mitteilung: $text"; if(empty($name) || empty($email) || empty($text)) { header("Location: danke_fehler.php"); } else { mail("$empfaenger", "$betreff", "$mailtext", "From: $email"); header("Location: danke.php"); } ?>
Die von der Dankeseite brauchst du glaub ich nicht, weil das ist ja eigentlich ne ganz normale Seite. Die funktionierte auch (:
So msste dir das eigentlich was sagen. Tut mir leid, wegen meiner Doofiheit (:
Kuss
Nini
-
22.08.2009 um 23:39 Uhr
$from = "From: EMAILADRESSEn";
mail($empfaenger, $betreff, $mailtext, $from);
Dann klappts auch mit demNachbarnVerschicken... { signatur } ... -
22.08.2009 um 23:50 Uhr
Also muss ich das dann so einbinden:
<?php $empfaenger = "nini@little-strange.de"; $betreff = "Contact"; $mailtext = "Name: $name Telefon: $telefon Telefax: $telefax eMail: $email Betreff: $auswahl Mitteilung: $text"; if(empty($name) || empty($email) || empty($text)) { header("Location: danke_fehler.php"); } else { $from = "From: EMAILADRESSEn"; mail($empfaenger, $betreff, $mailtext, $from); header("Location: danke.php"); } ?>
*am Kopf kratz*
Ich weiss, ist wahrscheinlich eine doofe Frage, aber was muss ich denn dann alsEMAILADRESSEN eingeben?$from = "From: EMAILADRESSEn";
Oder soll das so bleiben? Kommt da meine rein... nee, oder? Weil wre ja nicht "from"
PS: Achja und sind die Anfhrungszeichen unwichtig? Kann man die einfach weglassen?
... hab jetzt alles ausgetestet. Ich glaub, ich bin zu doof. Nichts funktioniert.
Der Beitrag wurde insgesamt 2 mal editiert, zuletzt 23.08.2009 um 01:42 Uhr ... -
23.08.2009 um 08:17 Uhr
Kennst du eigentlich das PHP Manual?
Das ist ein prima Nachschlagewerk, gerade fuer so haeufig gebrauchte Befehle wie mail(); ...
Und ja die Doubleqoutes(" sind wichtig, gehoeren da aber NUR hin,
wenn keine Variable uebergeben wird, sonst wird die Variable als String behandelt, sprich der Empfaenge haette bei dir $empfaenger gelautet, der Betreff $betreff usw.
Variablen werden bei mail();, und vielen anderen Befehlen auch, ohne DQ gehandhabt
$from = "From: EMAILADRESSEn";
War als Beispiel gedacht und muesste bei dir lauten:
$from = "From: ".$email."";
Ich wuerde das Script allerdings so niemals einsetzen, ohne vorher Usereingaben gefiltert zu haben, da Formmailer gerne missbrauch werden ...
Denn wenn man da jetzt z.B. "/r/nbcc: emails@email.com" ins Feld schreiben wuerde, dann wuerde die Mail auch an emails@mail.com verschickt werden, was sicherlich nicht nach deinem Geschmack waere ...
Weiterfuehrende Links:
www.dislabs.de/index.php?ac=labor&sub=5&id=16
www.damonkohler.com/2008/12/email-injection.html
Liebe Gruesse
Alice... { signatur } ... -
23.08.2009 um 20:25 Uhr
Nein, das PHP Manual kannte ich nicht. Aber hab mir den Link angeschaut und glaube, dass ich das verstehe. Das heisst also praktisch, dass jemand das Formular "hacken" kann und deswegen muss diese Reloadsperre rein.
Hab das aber erstmal gelassen und den Code von dir hineingefgt. Der sieht jetzt so aus:
<?php $empfaenger = "nini@little-strange.de"; $betreff = "Contact"; $mailtext = "Name: $name Telefon: $telefon Telefax: $telefax eMail: $email Betreff: $auswahl Mitteilung: $text"; if(empty($name) || empty($email) || empty($text)) { header("Location: danke_fehler.php"); } else { $from = "From: ".$email."; mail($empfaenger, $betreff, $mailtext, $from); header("Location: danke.php"); } ?>
Doch nun geht es gar nicht mehr. Wenn ich meine Eingaben gemacht habe, werde ich auf die Seite mail.php weitergeleitet *lol*
Ich glaub, ich werd noch verrckt. Ist mir schon richtig peinlich.
-
23.08.2009 um 22:28 Uhr
Die Reloadsperre ist eigentlich nur dazu da, dass man ueber das Formular nicht massenweise Nachrichten verschickt, viel viel wichtiger ist die Ueberpruefung der Usereingaben, damit nicht jeder Depp dahergegen kann, um dein Script fuern Spamversand nutzen zu koennen!
=> Kontaktformulare absichern
So funktionierts auf alle Faelle
<?php // include("head.php");?> <!--------------INHALT-----------------> <?php if(isset($_POST['submit'])){ $name = get_magic_quotes_gpc() ? stripslashes($_POST['name']) : $_POST['name']; // Name $email = get_magic_quotes_gpc() ? stripslashes($_POST['email']) : $_POST['email']; // Emailadresse $telefon = get_magic_quotes_gpc() ? stripslashes($_POST['telefon']) : $_POST['telefon']; // Telefon $telefax = get_magic_quotes_gpc() ? stripslashes($_POST['telefax']) : $_POST['telefxa']; // Telefax $text = get_magic_quotes_gpc() ? stripslashes($_POST['text']) : $_POST['text']; // Nachricht if(empty($name) || empty($email) || empty($text)){ // Sofern nicht alles angegeben $message .= "Bitte danke alle benoetigten Felder ausfuellen ...<br />"; $error = "1"; } if(!(eregi("^[A-Za-z0-9]", $name)) OR (eregi("n|r", $name))){ // Name pruefen $message .= "Der Name enthaelt unzulaessige Zeichen ...<br />"; $error = "1"; } if (!(eregi("^.+@.+..+$", $email)) OR (eregi("n|r", $email))){ // Email auf korrektheit pruefen $message .= "Die Emailadresse scheint nicht korrekt zu sein ...<br />"; $error = "1"; } if($error == "1"){ // Fehlermeldung ausgeben echo "<h2>Error ...</h2><p>".$message."</p>"; }else{ // Wenn kein Fehler war // Mailtext ... $mailtext = "Name: $name\n"; $mailtext.= "Telefon: $telefon \n"; $mailtext.= "Telefax: $telefax \n"; $mailtext.= "eMail: $email \n\n"; $mailtext.= "Mitteilung: $text\n"; // Mail verschicken if(mail("nini@little-strange.de", "Contact", $mailtext, "From: ".$email)){ header("Location: danke.php"); // Weiterleitung } } // close fehler } // close submit ?> <div class="title">Contact</div> <form action="" method="post"> <table border="0" width="500" cellspacing="0" cellpadding="0" align="center"> <tr> <td width="200">Name <b>*</b></font></td> <td width="300"><input type="text" name="name"></td> </tr> <tr> <td height="15" colspan="2"></td> </tr> <tr> <td width="200">Telefon</td> <td width="300"><input type="text" name="telefon"></td> </tr> <tr> <td height="5" colspan="2"></td> </tr> <tr> <td width="200">Telefax</td> <td width="300"><input type="text" name="telefax"></td> </tr> <tr> <td height="15" colspan="2"></td> </tr> <tr> <td width="200">eMail <b>*</b></td> <td width="300"><input type="text" name="email"></td> </tr> <tr> <td height="15" colspan="2"></td> </tr> <tr> <td width="200" valign="top">Mitteilung <b>*</b></td> <td width="300"><textarea cols="30" rows="10" name="text"></textarea></td> </tr> <tr> <td height="15" colspan="2"></td> </tr> <tr> <td width="200">Formular</td> <td width="300"><input type="submit" value="Senden" name="submit"></td> </tr> <tr> <td height="15" colspan="2"></td> </tr> <tr> <td width="200"></td> <td width="300"><b>*</b> - notwendige Angaben!</td> </tr> </table> </form> <!--------------INHALT ende-----------------> <?php // include("foot.php");?>
Der Beitrag wurde insgesamt 1 mal editiert, zuletzt 23.08.2009 um 22:30 Uhr ...... { signatur } ... -
23.08.2009 um 22:49 Uhr
Du bist ein Schatz!!! Ich danke dir eine Millionen mal!!!
Ich werd das gleich mal austesten gehen.
Ja, ich dachte mir schon, dass das mit Mailrobots zu tun hat... oki...
DANKE!!!!
/edit
Also die Seite sieht gut aus... aber es klappt noch nicht ganz. Habe alle ntigen Angaben gemacht und nun kommt die Fehlermeldung:
Der Name enthaelt unzulaessige Zeichen
Die Emailadresse scheint nicht korrekt zu sein
obwohl ich ja ganz normal alles eingetragen hab.
Hab deinen Code mit einem anderen verglichen und kann keinen Fehler entdecken, ausser dass ein Code so ist:
if ( (!(eregi('^[a-z0-9_\.-]+@[a-z0-9_-]+\.[a-z0-9_\.-]+$'
und du das so hast
if(!(eregi("^[A-Za-z0-9]", $name)) OR (eregi("n|r", $name))){ // Name pruefen
Der Beitrag wurde insgesamt 1 mal editiert, zuletzt 23.08.2009 um 23:08 Uhr ... -
24.08.2009 um 08:14 Uhr
Mhh, ja ich seh grad, mein Forum hat da ein paar / gefuttert ...
Bei den Zeilen fehlte etwas:
if(!(eregi("^[A-Za-z0-9]", $name)) OR (eregi("\n|\r", $name))){ // Name pruefen
$message .= "Der Name enthaelt unzulaessige Zeichen ...<br />"; $error = "1";
}
if (!(eregi("^.+@.+\\..+$", $email)) OR (eregi("\n|\r", $email))){ // Email auf korrektheit pruefen
$message .= "Die Emailadresse scheint nicht korrekt zu sein ...<br />"; $error = "1";
}... { signatur } ...