mail formular will nicht senden x_X
venty_13
- php
Hallo zusammen!
Ich hab heute die PHP funktion mail() verwenden wollen aber irgendwas ist da gegen mich... oder hab ich mir vielleicht selbst ein bein gestellt?
hier das script:
<html>
<body>
<form action="test.htm" method="post">
Dein Name: <input type="text" name="name"><br>
Deine E-Mail-Adresse: <input type="text" name="mail"><br>
<input type="submit" value="OK">
</form>
<?php
$text = "Hallo" . $name . ",\n" ;
$text .= "Der Test hat funktioniert." ;
$header = "From: venty_13@gmx.at" ;
mail($mail, "PHP-Test", $text, $header);
?>
</html>
</body>
Ich hoffe ihr könnt da was machen oder mir eine gute Alternativlösung geben.
Mfg Venty
Lieber venty_13,
Ich hoffe ihr könnt da was machen oder mir eine gute Alternativlösung geben.
http://aktuell.de.selfhtml.org/artikel/php/form-mail/
Liebe Grüße,
Felix Riesterer.
hab ich schon probiert aber da kommt jede menge code am anfang der datei die garnicht dortstehen sollte x_X
am browser dürfte es nicht liegen sovern der überhaupt was mit php zu tun hat...
Außerdem wird auch im quelltext der seite der php code angezeigt und das ist mit ziemlicher sicherheit nicht normal...
hier der code salat der angezeigt wird:
'; # Welchen Betreff sollen die Mails erhalten? $strSubject = 'test'; # Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden? # Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben! $strReturnhtml = 'http://www.scripter.gnx.at'; # Welche(s) Zeichen soll(en) zwischen dem Feldnamen und dem angegebenen Wert stehen? $strDelimiter = ":\t"; ### Ende Konfiguration ### if($_POST) { $strMailtext = ""; while(list($strName,$value) = each($_POST)) { if(is_array($value)) { foreach($value as $value_array) { $strMailtext .= $strName.$strDelimiter.$value_array."\n"; } } else { $strMailtext .= $strName.$strDelimiter.$value."\n"; } } if(get_magic_quotes_gpc()) { $strMailtext = stripslashes($strMailtext); } mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom) or die("Die Mail konnte nicht versendet werden."); header("Location: $strReturnhtml"); exit; } ?>
mfg Venty
Mahlzeit Venty,
Außerdem wird auch im quelltext der seite der php code angezeigt und das ist mit ziemlicher sicherheit nicht normal...
Mit Sicherheit nicht, das stimmt.
hier der code salat der angezeigt wird:
'; # Welchen Betreff sollen die Mails erhalten? $strSubject = 'test';
usw.
Das sieht so aus, als würde alles zwischen dem einleitenden <?php und dem ersten im PHP-Code auftauchenden ">" nicht angezeigt - alles danach aber schon. So verhält sich eigentlich nur ein Browser, der keine Ahnung hat, was er da vorgesetzt bekommt (Stichwort "Dokumenttyp") und versucht, ihm unbekannte Tags einfach zu ignorieren. WAS GENAU steht denn im HTML-Quelltext? Der gesamte PHP-Code? Dann würde ich vermuten, dass Du entweder kein PHP installiert bzw. zur Verfügung hast oder dass Deine Datei nicht durch PHP geparst wird.
MfG,
EKKi
also muss ich den Dateityp verifizieren wie du das am anfang schon gesagt hast oder?
dann hätte er nämlich ja keinen grund mehr die unbekannten tags zu ignorieren...
ich probiers gleich und poste das ergebnis.
mfg Venty
Mahlzeit Venty,
also muss ich den Dateityp verifizieren wie du das am anfang schon gesagt hast oder?
Nein. Dein Webserver muss wissen, dass der Dateien mit der Endung ".php" (welche Endung hat Deine Datei überhaupt?) dem PHP-Parser übergeben muss, damit dieser sie bearbeitet. Das, was PHP dann zurückgibt, liefert der Webserver anschließend aus.
MfG,
EKKi
moin,
Nein. Dein Webserver muss wissen, dass der Dateien mit der Endung ".php" (welche Endung hat Deine Datei überhaupt?) dem PHP-Parser übergeben muss, damit dieser sie bearbeitet. Das, was PHP dann zurückgibt, liefert der Webserver anschließend aus.
also, jetzt endet die Datei auf .php, aber ich dachte das währ egal? Naja, jetzt ist der code weg aber ich habe immer noch keine mail verschiken können. Es kommt zwar keine fehlermeldung mehr (Seite konnte nicht gefunden werden), aber die mails kommen irgend wie nicht an x_X
hmm...
mfg Venty
Mahlzeit Venty,
also, jetzt endet die Datei auf .php, aber ich dachte das währ egal?
Natürlich nicht! Woher soll der Webserver wissen, dass er auch normale .html-Dateien an den PHP-Parser zur Verarbeitung schicken soll? Grundlagenwissen ...
Naja, jetzt ist der code weg aber ich habe immer noch keine mail verschiken können. Es kommt zwar keine fehlermeldung mehr
Dann solltest Du vielleicht Dein PHP etwas gesprächiger machen ...
(Seite konnte nicht gefunden werden),
Das allerdings klingt so, als ob Du ganz gehörig etwas falsch machst.
aber die mails kommen irgend wie nicht an x_X
Natürlich kommen "irgendwie" keine Mails an, wenn "irgendwie" und "irgendwo" ein Fehler aufgetreten ist. Wenn Du möchtest, dass Dir jemand hilft, tun die Leute hier im Forum das sehr gerne ... allerdings musst Du dafür relevante Informationen liefern. "Irgendwie" hilft hier "irgendwie" nicht weiter.
MfG,
EKKi
Hier ist das Skript:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>e-mail schreiben</title>
<meta http-equiv="content-type"
content="text/html; charset=iso-8859-1">
<meta name="content-language" content="de">
<meta name="title" content="e-mail schreiben">
<meta name="author" content="Thomas Venturini">
<meta name="publisher" content="Thomas Venturini">
<meta name="copyright" content="Thomas Venturini">
<meta name="keywords" content="e-mail">
<meta name="stichworte" content="e-mail">
<meta name="description" content="e-mail">
<meta name="language" content="deutsch">
<meta name="revisit" content="After 1 days">
<meta name="robots" content="index, follow">
<link rel="stylesheet" href="desing.css" type="text/css">
</head>
<body>
<form action="<?php echo $_POST['PHP_SELF']; ?>" method="post">
Dein Name: <input type="text" name="name"><br>
Deine E-Mail-Adresse: <input type="text" name="mail"><br>
<input type="submit" value="OK">
</form>
<?php
$text = "Hallo" . $name . ",\n" ;
$text .= "Der Test hat funktioniert." ;
$header = "From: venty_13@gmx.at" ;
mail($mail, "PHP-Test", $text, $header);
?>
</html>
</body>
Mit den php-fehler Befehlen kann ich nicht viel anfangen... wie soll ich die in meine Datei einbinden? Ich probier mal weiter...
mfg Venty
Mahlzeit Venty,
Hier ist das Skript:
Das ist schön und gut - ist aber nicht wirklich hilfreich:
<form action="<?php echo $_POST['PHP_SELF']; ?>" method="post">
Was steht im HTML-Quelltext, den der Browser "zu Gesicht" bekommt?
Dein Name: <input type="text" name="name"><br>
Deine E-Mail-Adresse: <input type="text" name="mail"><br>
<input type="submit" value="OK">
</form><?php
$text = "Hallo" . $name . ",\n" ;
Verlasse Dich NIEMALS darauf, dass aus Eingabefeldern in HTML automagisch Variablen in PHP mit demselben Namen werden! Greife lieber direkt auf das entsprechende superglobale Array (in Deinem Fall $_POST) zu.
mail($mail, "PHP-Test", $text, $header);
Du rufst die Funktion einfach nur auf - mail() liefert aber einen Rückgabewert, der schon einiges über den erfolgreichen Versandversuch aussagt. Wieso ignorierst Du ihn?
Spätestens direkt vor diesem Funktionsaufruf (sinnvollerweise jedoch gleich zu Beginn des Skripts) solltest Du mittels [http://de3.php.net/manual/en/function.error-reporting.php@title=error_reporting()] dafür sorgen, dass alle möglichen Fehler und Warnungen ausgegeben werden ... das erleichtert die Fehlersuche ungemein.
MfG,
EKKi
Ich gebs auf,
hier ist der gesammte quelltext:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>einfacher-Formmailer</title>
<meta http-equiv="content-type"
content="text/html; charset=iso-8859-1">
<meta name="content-language" content="de">
<meta name="title" content="egal">
<meta name="author" content="Venty">
<meta name="publisher" content="Venty">
<meta name="copyright" content="Venty">
<meta name="keywords" content="egal">
<meta name="stichworte" content="egal">
<meta name="description" content="egal">
<meta name="language" content="deutsch">
<meta name="revisit" content="After 1 days">
<meta name="robots" content="index, follow">
<link rel="stylesheet" href="desing.css" type="text/css">
</head>
<body>
<?php
$strEmpfaenger = 'venty_13@gmx.at';
$strFrom = 'test@test.tv';
$strSubject = 'test';
$strReturnhtml = 'http://www.scripter.gnx.at';
$strDelimiter = ":\t";
if($_POST)
{
$strMailtext = "";
while(list($strName,$value) = each($_POST))
{
if(is_array($value))
{
foreach($value as $value_array)
{
$strMailtext .= $strName.$strDelimiter.$value_array."\n";
}
}
else
{
$strMailtext .= $strName.$strDelimiter.$value."\n";
}
}
if(get_magic_quotes_gpc())
{
$strMailtext = stripslashes($strMailtext);
}
mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)
or die("Die Mail konnte nicht versendet werden.");
header("Location: $strReturnhtml");
exit;
}
?>
<h1>Beispielformular</h1>
<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">
<!-- Hier die eigentlichen Formularfelder eintragen. Die folgenden sind Beispielangaben. -->
<dl>
<dt>Ihr Name:</dt>
<dd><input type="text" name="Versender" /></dd>
<dt>Ihre E-Mail:</dt>
<dd><input type="text" name="E-Mail" /></dd>
<dt>Sie können:</dt>
<dd><input type="checkbox" name="kannwas[]" value="HTML" />HTML <input type="checkbox" name="kannwas[]" value="PHP" />PHP</dd>
<dt>Sie sind:</dt>
<dd><input type="radio" name="sexus" value="M" />Mann <input type="radio" name="sexus" value="Frau" />Frau</dd>
<dt>Sie mögen:</dt>
<dd><select name="Browser"><option value="Opera">Opera</option><option value="Mozilla">Mozilla</option></select></dd>
<dt>Bemerkungen:</dt>
<dd><textarea name="Bemerkungen" rows="3" cols="20">Bemerkungen</textarea></dd>
</dl>
<!-- Ende der Beispielangaben -->
<p>
<input type="submit" value="Senden" />
<input type="reset" value="Zurücksetzen" />
</p>
</form>
</body>
</html>
anfangs war das der "Einfache-Formmailer" aus der Dokumentation.
ich hab eh nicht viel geändert, nur dass was man zu konfigurieren war und ich hab versucht das ganze mal in den <body> zu tun, was ja eigentlich keinen Unterschied machen dürfte.
Vfg Venty
Mahlzeit venty_13,
Ich hab heute die PHP funktion mail() verwenden wollen aber irgendwas ist da gegen mich...
"Irgendwas ist gegen mich" ist genauso wie "funktioniert nicht" oder auch "geht nicht" keine hilfreiche Problembeschreibung. Was genau funktioniert nicht? Was soll funktionieren? Welche Fehlermeldungen werden ausgegeben?
<html>
<body>
Es fehlt eine Dokumenttyp-Angabe sowie der Kopf des HTML-Dokuments.
Dein Name: <input type="text" name="name"><br>
Deine E-Mail-Adresse: <input type="text" name="mail"><br>
$text = "Hallo" . $name . ",\n" ;
mail($mail, "PHP-Test", $text, $header);
Was soll in den Variablen $name und $mail enthalten sein? Verlasse Dich NIEMALS darauf, dass die Werte von Formularfeldern automagisch in gleichnamigen Variablen zur Verfügung stehen. Dieses Sicherheitsloch früherer PHP-Versionen (Welche nutzt Du?) sollte eigentlich überall behoben bzw. ausgeschaltet sein (Um welchen Hoster handelt es sich?).
Du solltest Dich vielleicht zusätzlich noch mit dem EVA-Prinzip vertraut machen.
MfG,
EKKi
» Es fehlt eine Dokumenttyp-Angabe sowie der Kopf des HTML-Dokuments.
ist nur die test version ;)
» Was soll in den Variablen $name und $mail enthalten sein? Verlasse Dich NIEMALS darauf, dass die Werte von Formularfeldern automagisch in gleichnamigen Variablen zur Verfügung stehen. Dieses Sicherheitsloch früherer PHP-Versionen (Welche nutzt Du?) sollte eigentlich überall behoben bzw. ausgeschaltet sein (Um welchen Hoster handelt es sich?).
www.smog.at ... php version? kp komt doch darauf an was auf dem server istalliert ist oder?
EVA-Prinzip = sie kommt, flippt aus und ich schlaf auf dem Sofa ;)
spaß bei seite, dass kommt noch aber im grunde ist es eh klar...
mfg Venty
Mahlzeit Venty,
» Es fehlt eine Dokumenttyp-Angabe sowie der Kopf des HTML-Dokuments.
ist nur die test version ;)
Das mag sein, aber auch diese sollte aus validem Code bestehen.
www.smog.at ... php version? kp komt doch darauf an was auf dem server istalliert ist oder?
Ja. Erstelle eine einfache PHP-Datei, die nichts außer
<?php
phpinfo();
?>
enthält, speichere sie unter einem unverfänglichen Namen ("phpinfo.php" ist NICHT SINNVOLL!), lade sie auf den Server hoch und rufe sie auf. Wie sieht die Ausgabe aus?
EVA-Prinzip = sie kommt, flippt aus und ich schlaf auf dem Sofa ;)
spaß bei seite, dass kommt noch aber im grunde ist es eh klar...
"Kommt noch" bedeutet - das zeigen nahezu sämtliche Erfahrungen der Vergangenheit - so viel wie "passiert nie". Gewöhne Dir in Deinem eigenen Interesse an, gleich von Anfang an sauber zu programmieren. Wenn Du einmal mit Spaghetti-Code anfängst, wird diese Datei immer Spaghetticode bleiben - Du wirst Dir nie wieder die Zeit nehmen, den Code komplett umzustricken und aufzuräumen, immer wieder andere Dinge wichtiger sind.
MfG,
EKKi
echo $begrüßung;
Ja. Erstelle eine einfache PHP-Datei, die nichts außer
phpinfo();
enthält, speichere sie unter einem unverfänglichen Namen ("phpinfo.php" ist NICHT SINNVOLL!), lade sie auf den Server hoch und rufe sie auf. Wie sieht die Ausgabe aus?
Warum siehst du den Namen phpinfo.php als nicht sinnvoll an und was wäre ein sinnvoller Name dafür?
echo "$verabschiedung $name";
Mahlzeit dedlfix,
Ja. Erstelle eine einfache PHP-Datei, die nichts außer
phpinfo();
enthält, speichere sie unter einem unverfänglichen Namen ("phpinfo.php" ist NICHT SINNVOLL!), lade sie auf den Server hoch und rufe sie auf. Wie sieht die Ausgabe aus?Warum siehst du den Namen phpinfo.php als nicht sinnvoll an und was wäre ein sinnvoller Name dafür?
Weil von bösen Menschen™ gerne (z.B. per Google) nach Dateien genau dieses Namens gesucht und die Ausgabe ausgewertet wird und anschließend möglicherweise in der jeweiligen PHP-Installation enthaltene Schwachstellen ausgenutzt werden.
MfG,
EKKi
echo $begrüßung;
Warum siehst du den Namen phpinfo.php als nicht sinnvoll an und was wäre ein sinnvoller Name dafür?
Weil von bösen Menschen™ gerne (z.B. per Google) nach Dateien genau dieses Namens gesucht und die Ausgabe ausgewertet wird und anschließend möglicherweise in der jeweiligen PHP-Installation enthaltene Schwachstellen ausgenutzt werden.
Dadurch verschwinden keine Schwachstellen. Wenn ich sie ausnutzen wollte, prüfte ich gezielt diese Schwachstelle und wäre nicht auf diese Ausgabe angewiesen. Anstatt eine obskuren Namen zu vergeben wäre ein Zugriffschutz sinnvoller, wenn man aus welchem Grunde auch immer die öffentliche Anzeige vermeiden möchte. Manch ein Hoster stellt absichtlich die phpinfo()-Ausgabe ins Netz, damit sich potentielle Kunden über die verfügbaren Leistungsmerkmale informieren können. Und nun? Willst du daraufhin den Hoster meiden damit deine Sicherheitslücken nicht ausgenutzt werden können? Ansonsten findet sich immer ein Kunde, der so "freundlich" ist, eine phpinfo()-Ausgabe rumliegen zu haben.
echo "$verabschiedung $name";
echo $begrüßung;
Nachtrag:
Weil von bösen Menschen™ gerne (z.B. per Google) nach Dateien genau dieses Namens gesucht
Wenn man nach signifikanten Texten einer phpinfo()-Ausgabe statt nach Dateinamen sucht, findet man mit dem gleichen Aufwand mehr Ergebnisse.
echo "$verabschiedung $name";
hi,
die php version die auf dem server läuft ist 4.3.9
5 ist doch die neueste oder?
dann müsste doch mit dieser hier auch noch alles (einigermaßen) funktionieren oder?
mfg Venty