Mails lassen sich nicht verschicken

hallöchen,
also ich hab ein php programm aus einem buch abgeschrieben um mails zu verschicken nur leider kommen die mails nicht an :frowning:
habs vom webserver versucht da gings nicht dann hab ich xampp installiert inc. mailserver und es geht immer noch nicht.

danke im vorraus

Hallo favorite,

leider haben wir keine Glaskugel, und ohne diese weiss ich nicht was du für eine Fehlermeldung bekommst, ob du eine bekommst, von welchem buch du welchen code abgeschrieben hast.

Ohne diese Dinge kann man dir schlicht einfach nicht helfen.

also ich weiß jetzt nicht genau welches script du verwendest :wink:

aber nach diesem muster funktioniert das bei mir recht gut…

<?php :blush:to = "[email protected]";
$subject = "Hi!"; $body = "Hi,\n\nHow are you?"; if (mail($to, $subject, $body)) { echo(" Message successfully sent!"); } else { echo(" Message delivery failed... "); } ?\>

natürlich kannst du auch den text aus einem formular lesen in dem du die post funktion verwendest … dass sieht dann zirka so aus …

$to = $_POST[„age“];

Da ich mal schätz dass du nicht weißt von was ich hier rede hab dir hier gleich mal ein gleiches tutorial dazugegeben :smile:

Als Beginn erstellen wir eine Seite mit einem ganz normalen Formular.

Dieses könnte zum Beispiel so aussehen:

Ihr Vorname:

Für dieses Formular benötigen wir kein PHP, also können wir das Formular auch in einem normalen HTML-Dokument speichern (z.B. seite1.html).

Es ist auch wichtig, dass wir allen Eingabefeldern einen einzigartigen Namen zuweisen, damit wir sie nach dem Absenden auf der zweiten Seite auch korrekt abfragen können.
Haben zwei Felder den selben Namen, so wird nur das letztere Feld übertragen, da die vorige Eingabe überschrieben wird (entspricht einer Neudefinition dieser Variable)

Als nächstes erstellen wir seite2.php, an welche die Eingaben (hier: Ihr Name) gesendet wird.

Der Inhalt der seite2.php sieht dann so aus:

<?php :echo $_POST["vorname"];
?\>

Wir erinnern uns an das Input-Feld mit dem Namen vorname auf :seite1.html, genau diese Eingabe rufen wir jetzt mit :blush:_POST[„vorname“]; ab.
Klicken wir auf der Formularseite auf Absenden, so wird seite2.php :aufgerufen, dabei werden die Daten übermittelt und von dieser ausgegeben.

Mit $_POST[„vorname“]; können wir also die gesendeten Daten wieder :abfragen.
[„vorname“] gibt den Namen des abgefragten Inputfeldes aus der :Formularseite an (hier vorname).

Diese Abfrage kann auch in einer Variable gespeichert werden, um :diese dann später flexibler weiterverarbeiten zu können.

Der Code dafür würde so aussehen:

<?php :blush:vorname = $_POST["vorname"];
echo $vorname; ?\>

Soll $_POST[„vorname“]; in einer Variable ($vorname) gespeichert :werden, darf $_POST[„vorname“]; nicht in Anführungszeichen stehen, :da dieses sonst als Text interpretiert wird.

Natürlich können wir damit mehrere Eingaben abrufen. Dazu müssen die :Befehle untereinander stehen.

<?php :blush:vorname = $_POST["vorname"];
$nachname = $\_POST["nachname"]; ?\>

Quelle: php-einfach.de

<?php $nachname = $HTTP_POST_VARS['nachname'];
$mail = $HTTP\_POST\_VARS['mail']; $kommentar = $HTTP\_POST\_VARS['kommentar']; if($mail != ""){ $mailtext = "Name: "; $mailtext .= $nachname; $mailtext .= "\n"; $mailtext .= "e-Mail-Adresse: "; $mailtext .= $mail; $mailtext .= "\n"; $mailtext .= "Anfrage: "; $mailtext .= "\n"; $mailtext .= $kommentar; $absender = "From: "; $absender .= $mail; mail("[[email protected]](mailto:[email protected])","Anfrage über das Kontarktformular",$mailtext,$absender); print("Ihre e-Mail wurde erfolgreich verschickt"); }else{ print("Sie haben keine e-Mail-Adresse angegeben ... "); print("[Zurück...](Kontakt.html)"); } ?\> Tut mir leid,hätte gleich dran denken können ;D Das ist die Ausgabe wenn ich eine Mail verschicken will: Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp\_port" setting in php.ini or use ini\_set() in Q:\xampp\htdocs\Polep\Mail.php on line 21 Ihre e-Mail wurde erfolgreich verschickt

jaaa schonmal Danke für deine Hilfe aber bei deinem Code taucht die nächste Meldung auf:

Warning: mail() [function.mail]: „sendmail_from“ not set in php.ini or custom „From:“ header missing in Q:\xampp\htdocs\Polep\Hallo.php on line 31

Message delivery failed…

Was genau muss ich in die Datei php.ini schreiben?

Also grundsätzlich solltest du dich erstmal mit den entsprechenden RFCs zum Thema SMTP auseinander setzen. Dabei erhälst du dann schöne Einblicke in die Verarbeitung von eMails. Außerdem kannst du dir da einen Überblick verschaffen über die nötigen und die optionalen Parameter, die eine eMail enthalten muss / kann.

Der From-Header ist einer der Bestandteile, die definitiv wichtig und notwendig sind! Unter http://de.php.net/manual/en/function.mail.php kannst du im Example #2 sehen, dass der From-Header im Parameter „Header“ übergeben wird. Du brauchst also nichts in der php.ini einstellen, sondern einfach nur den entsprechenden Header im Script setzen.

Im Übrigen hängt immer von der Grund-Konfiguration in der php.ini ab, ob der Mail-Versand funktioniert oder nicht. Da allerdings immer der Server, auf dem das PHP-Script läuft, der Server ist, der die eMail verschickt, entspricht die Absende-IP-Adresse nicht unbedingt der IP-Adresse die der MX-Record der Absende-Adresse beinhaltet. Sprich: Eine DNS-Auflösung des Absende-Servers liefert eine andere IP-Adresse. Einige eMail-Server prüfen dies vor der Annahme einer eMail und wenn diese Prüfung fehlschlägt, wird die eMail bereits im Vorfeld abgelehnt. Deshalb empfehle ich eher die Verwendung einer SMTP-Mailer-Klasse / -Funktion. Fertige Scripte für derartige Anwendungen gibt es zu Hauf. Unter Anderem im Zend-Framework, bei PEAR, etc.