Diese Anzeige ist nur für
Nicht-Mitglieder sichtbar!

Jetzt kostenlos registrieren

mail() - Funktion funktioniert nicht

Fragen zum Thema PHP können hier gestellt werden

Moderatoren: Basti, Guillermo, Andreas W.

mail() - Funktion funktioniert nicht

Beitragvon Blackeye am 10.10.2011, 18:03

Hey Leute!

folgendes Szenario:
Ich versuche auf einer Homepage ein Kontaktformular zu machen,
bei dem der Nutzer seinen Namen, seine eMail, seine Nachricht, etc. eingibt und anschließend auf senden klickt.
Das Übliche eben. Ich hab also ein Formular mit html erstellt, und eine kontakt_mail.php in action="verlinkt":

Code: Alles auswählen
[b](...)[/b]<form action="kontakt_mail.php" method="post" name="form1" target="_self" id="form1">
          <p>
            <label class="form_kontakt" for="name">Name:</label>
            <input name="name" type="text" class="kontakt_input" id="name" tabindex="1" />
          </p>
          <p>
            <label for="email" class="form_kontakt">e-Mail:</label>
            <input name="email" type="text" class="kontakt_input" id="email" tabindex="2" />
            <br /> [b](...)[/b]
         


Die kontakt_mail.php ist html-mäßig eigentlich zu der Seite mit dem Formular identisch (vom Formular abgesehen), mit 2 Ausnahmen:
1)
Es stehen vor dem html-Code folgende php-Zeilen:

Code: Alles auswählen
<?php

$absendername = $_POST["name"];
$absender = $_POST["email"];
$betreff = $_POST["betreff"];
$nachricht = $_POST["text"];
$empfaenger = $_POST["test123@googlemail.com"];

$extra = "From: $absendername <$absender>\n";
$extra .= "Content-Type: text/html\n";

$text = "$absendername hat dir durch das Kontaktformular auf deiner Homepage folgendes mitgeteilt: \n\n".$nachricht;

mail($empfaenger, $betreff, $text, $extra);

?>


und 2) hab ich im Content-bereich der Seite noch einmal eine Übersicht erstellt, die die gesendete Nachricht anzeigt:

Code: Alles auswählen
<p><span class="kontakt_anzeige">Name: </span><?php echo "$absendername"; ?><br /> [b](...)[/b]</p>


Nur erhalte ich einfach keine eMail. Der Rest im Contentbereich wird soweit auch richtig dargestellt, also werden die Daten aus dem Formular wohl richtig ausgelesen...
Daher denke ich, dass der Fehler wohl an einer Einstellung am Server liegt. Ich verwende einen kostenlosen Webspace von funpic, ist das möglicherweise das Problem?
Ich habe leider noch nicht sehr viel Erfahrung in Sachen php, deswegen bitte ich bei simplen Anfängerfehlern um Nachsicht. :)

Eine weitere Frage möchte ich aus Interesse noch hinten anstellen:
Beim Klick auf den Submit-Button im Formular, öffnet sich ja ein neues Fenster (sofern man target="_blank" in das form-Tag schreibt). Wie kann ich das Fenster als eine Art Popup aussehen lassen, sprich fest vorgegebene Größe, nicht skalierbar und ohne Toolbar? Google sagt das geht mit Javaskript (onclick ... etc).
Der in das button-Tag des Submitbuttons von mir eingefügte Skriptschnipsel wird aber scheinbar völlig ignoriert. Richtig ist das Skript wohl, da ich es von einer sehr zuverlässigen Seite übernommen habe.

schonmal Danke, und sorry für den langen Roman. :wink:
Benutzeravatar
Blackeye
Mitglied
 
Beiträge: 83
Registriert: 27.12.2006, 01:36
Wohnort: Bayern
Diese Anzeige ist nur für
Nicht-Mitglieder sichtbar!
 
Jetzt kostenlos registrieren

Re: mail() - Funktion funktioniert nicht

Beitragvon Guillermo am 10.10.2011, 23:27

Hi Blackeye,

je genauer du das Problem beschreibst, desto einfacher ist es für uns dir zu helfen, du tust also gut darin so weit auszuholen :D
Dein Fehler liegt konkret in dieser Zeile:
Code: Alles auswählen
$empfaenger = $_POST["test123@googlemail.com"];


Wenn du sie durch diese Zeile ersetzt sollte es funktionieren:
Code: Alles auswählen
$empfaenger = "test123@googlemail.com";


Du bekommst die Empfänger ja nicht durch das Formular also mittels einer POST Anfrage, du weißt ja wo du die Mail hinschicken willst also musst du sie einfach in die Variable $empfaenger schreiben und nicht aus dem Array $_POST holen :)

Zu deiner zweiten Frage:
Du kannst auch das "onsubmit" Event / Attribut von Formularen verwenden.
Code: Alles auswählen
<form method="..." action="..." onsubmit="tuJenes();">
...
</form>


Viele Grüße,
Guillermo
Gebildet ist der, der weiß, wo er findet, was er nicht weiß.
Benutzeravatar
Guillermo
Moderator
 
Beiträge: 1093
Registriert: 01.10.2007, 18:18
Wohnort: Bayern

Re: mail() - Funktion funktioniert nicht

Beitragvon Blackeye am 10.10.2011, 23:46

Danke!
Ja, ist völlig klar. :oops:
Aber das hab ich beim 100. Mal Durchlesen immer noch überlesen. :D
Funktioniert jetzt logischerweise alles.

Und Danke für den Tipp mit onsubmit.

Noch eine kleine Frage:
Ich will überprüfen lassen, ob die eMail tatsächlich versendet wurde und das Ergebnis auf der Seite anzeigen lassen.
Nach 5 Minuten Google:
Code: Alles auswählen
(...)
$check = mail($empfaenger, etc);
if ($check == true){
echo "Erfolgreich Versendet";
}else{
echo "Es ist ein Fehler aufgetreten"; }


Ist das so korrekt? Weil der Sinn bei der Herangehensweise erschließt sich mir hier nicht ganz.
Außerdem hätte er mir doch vorhin einen Fehler anzeigen müssen, da die eMail wegen dem Fehler im Code (das $_POST musste ja weg) nicht versendet wurde.

Und Danke nochmals :)
Benutzeravatar
Blackeye
Mitglied
 
Beiträge: 83
Registriert: 27.12.2006, 01:36
Wohnort: Bayern

Re: mail() - Funktion funktioniert nicht

Beitragvon Guillermo am 11.10.2011, 00:44

Wie sich die Funktion mail genau verhält kannst du in der PHP Dokumentation (http://de.php.net/manual/en/function.mail.php) nachlesen. Wenn die e-Mail erfolgreich losgeschickt wurde gibt sie eben true zurück, stimmt also wie dus gemacht hast :)
Dass keine Fehlermeldung angezeigt wurde liegt entweder daran dass du nicht alle Fehler ausgeben lässt oder dass die Funktion mail die Argumente nicht hinreichend prüft, z.B. ob die e-Mail Adresse auch wirklich eine e-Mail Adresse ist. Es kann auch sein dass die mail() false zurückgibt wenn keine gültige e-Mail Adresse übergeben wurde, kannst du ja mal ausprobieren :)

Ersteres kannst du hiermit einstellen:
Code: Alles auswählen
error_reporting(E_ALL);


Viele Grüße,
Guillermo

P.s. Einen Fehler musste es nicht zwangslaufig geben, es kann sein dass das $_POST["x@x@"] einen leeren String zurückgibt
Gebildet ist der, der weiß, wo er findet, was er nicht weiß.
Benutzeravatar
Guillermo
Moderator
 
Beiträge: 1093
Registriert: 01.10.2007, 18:18
Wohnort: Bayern

Re: mail() - Funktion funktioniert nicht

Beitragvon my-webdesigner.com am 11.10.2011, 12:03

Guillermo hat geschrieben:Es kann auch sein dass die mail() false zurückgibt wenn keine gültige e-Mail Adresse übergeben wurde, kannst du ja mal ausprobieren :)

Es wäre zu schön, wenn das funktionieren würde ;)
In der Realität gibt mail() jedoch auch bei fehlerhaften Eingabedaten true zurück. Selbst dann, wenn etwa der Betreff oder der "From"-Absender fehlt.
Deshalb ist es erforderlich, sämtliche Daten zu überprüfen, bevor mail() aufgerufen wird, auch der Sicherheit wegen und um sein Script nicht zum Opfer von Spam-Bots zu machen (!).

Eine ganz logische Erklärung für das Verhalten von mail():
Angenommen, ich möchte ein Mail an einen lokalen Namensraum wie "localhost" senden. Eine E-Mail Adresse wie "root@localhost" wäre denkbar und in dem Fall sogar ohne TLD valide.
Benutzeravatar
my-webdesigner.com
Mitglied
 
Beiträge: 656
Registriert: 20.04.2010, 12:42
Wohnort: Wien

Re: mail() - Funktion funktioniert nicht

Beitragvon Guillermo am 11.10.2011, 15:40

Es war ja nur eine Vermutung, deshalb mein Hinweis auf einen Test :).
Sogar bei deinem hypotetischen Fall weißt deine e-Mail "root@localhost" das Muster - localpart "@" domain - auf (http://www.faqs.org/rfcs/rfc2822.html). Ich finde dass innerhalb der mail()-Funktion wenigstens auf eine leere Zeichenkette geprueft werden sollte.

Viele Grüße,
Guillermo
Gebildet ist der, der weiß, wo er findet, was er nicht weiß.
Benutzeravatar
Guillermo
Moderator
 
Beiträge: 1093
Registriert: 01.10.2007, 18:18
Wohnort: Bayern

Re: mail() - Funktion funktioniert nicht

Beitragvon my-webdesigner.com am 11.10.2011, 16:13

Guillermo hat geschrieben:Ich finde dass innerhalb der mail()-Funktion wenigstens auf eine leere Zeichenkette geprueft werden sollte.

Der Meinung bin ich auch - es sollte sogar so weit gehen, dass die Funktion nur true zurückgeben dürfte, wenn das Mail auch tatsächlich gesendet wurde. Den Gedanken fortsetzt sogar nur, wenn die Empfänger-IP einen MX-Eintrag aufweist, wenn der gegnerische Mailserver erreichbar ist und wenn die Mail auch vom gegnerischen Mailserver akzeptiert wurde.
Ganz ehrlich und ohne Ironie :)

Aber andererseits wäre ein (notwendiger) Filter davor UND eine Überprüfung innerhalb der mail()-Funktion unnötig redundant.
Zudem wäre die Fehlerbehandlung schwierig bis nicht sinnvoll möglich.
Ich denke nicht, dass jemand einfach ein Mail versendet, ohne die Felder vorher selbst geprüft zu haben. Zumindest sollte das nicht geschehen.

Noch ein Argument für eine "stupide" mail()-Funktion: Durch Plugins kann ich meinem Mailserver alle erdenklichen Verhaltensweisen beibringen. Wenn ich von PHP aus ein Mail an "GOD" senden will (aus welchem Grund auch immer und was auch immer damit geschehen möge), sollte das auch ohne Murren klappen - auch ohne User- und Domainpart - der entsprechende Code als Gegenstück vorausgesetzt.
Übrigens sind die meisten Mailserver so konfiguriert, dass Mails an lokale User (z.B. "root") auch ohne "@localhost" zugestellt werden.
Benutzeravatar
my-webdesigner.com
Mitglied
 
Beiträge: 656
Registriert: 20.04.2010, 12:42
Wohnort: Wien

Re: mail() - Funktion funktioniert nicht

Beitragvon Guillermo am 11.10.2011, 16:25

Dann klingt es logisch dass auf nichts und niemanden geprüft wird :D
Dann sind die meisten Mailserver nicht spezifikationsgemäß - schade :D

Viele Grüße,
Guiller
Gebildet ist der, der weiß, wo er findet, was er nicht weiß.
Benutzeravatar
Guillermo
Moderator
 
Beiträge: 1093
Registriert: 01.10.2007, 18:18
Wohnort: Bayern


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste