Überprüft mail() den From-Header?

Beim Testen meines Kontaktformulars ist mir folgendes aufgefallen:

Gebe ich als Absender eine Adresse mit einer existierenden Domain an, wird mir die Mail zugesandt; existiert die Domain jedoch nicht, liefert mail() zwar true zurück, eine Mail erhalte ich jedoch nie. Wird die Existenz der Absenderdomain wirklich an irgendeiner Stelle überprüft?

Nein, von mail() nicht. Da zählt nur die Syntax.

Und bevor du fragst: Ja man kann per PHP einigermaßen prüfen, ob eine E-Mail-Adresse existiert, was allerdings zum einen recht aufwendig ist und zum anderen recht viel Arbeitsleistung beansprucht, sowie dir auch keine absolute Sicherheit bieten kann/wird, wodurch es dementsprechend nicht zu empfehlen ist.

Bleibt im Prinzip nur die Syntax-Prüfung vor dem Absenden von mail() - aber ob das soviel hilft, darf man auch bezweifeln :wink:

MfG
myPages

Probier mal das:

at.php.net/manual/de/function.gethostbyname.php

Folgendes:

[code]<?php

echo mail($sendto, $subject, $message, “From: “.$name.” <”.$email.">");

?>[/code]

Für $email="irgendwas@domaingibts.de" wird 1 ausgegeben und die Mail wird gesendet.
Für $email="irgendwas@domaingibtsnicht.de" wird 1 ausgegeben und die Mail wird nicht gesendet.

meinen Beitrag gelesen?

<?php

$mail="test@hotmail.com";

$host = substr($mail, strpos($mail, "@"));
if(gethostbyname($host) == $host)
   echo "Host existiert nicht";
else
   mail();

Ich hab deinen gelesen, ja. Hast du auch meine beiden gelesen?

Eine Mailadresse kann man wie folgt einiger massen korrekt überprüfen

$mailok = !empty($params['Email']) && (preg_match("/^([\w|\.|\-|_]+)@([\w||\-|_]+)\.([\w|\.|\-|_]+)$/i",$params['Email'])==true); if ($mailok && strpos(PHP_OS,'WIN') ===false) { list($user, $domain) = split("@", $params['Email']); $mailok =checkdnsrr($domain, "MX"); }

wobei natürlich $params anzupassen wäre.

Moin,

ihr verkennt anscheinend das Problem von Horst :wink: Das Problem ist nicht die Syntaxprüfung, sondern das Absenden an nicht existierende E-Mail-Adressen :wink:

Um euch das Ganze jetzt mal zu ersparen und da ich vorhin schon schrieb, dass man die Existenz einer E-Mail-Adresse bedingt prüfen kann, zeig ich euch mal kurz ein Beispiel. Das Wichtigste ist dabei die folgenden Funktion: checkdnsrr

$email = "beispiel@adresse.de";
list($user, $host) = explode("@", $email);

if(checkdnsrr($host, "MX") or checkdnsrr($host, "A")) { // Mail-Adresse ist existent. }
else { // Mail-Adresse ist nicht existent. }

MX steht dabei für Mail Exchanger Ressource Road
A für Address Ressource Road

Nachteile: Es wird nicht überprüft, ob $user existiert und man benötigt den Zugang zu einem DNS-Server. Die Anfrage an den DNS-Server kann sich u.U. auch hinziehen und den Webserverprozess blockieren.

MfG
myPages

Der Code ist ja ähnlich dem von mir geposteten und der ist einige tausend mal problemlos im Einsatz.

Muss gestehen, hab deinen Code nur kurz überflogen und das vermutlich übersehen :wink: Na ja, sollte wohl mal schlafen gehen … bin grad einfach zu müde.

MfG
myPages

So richtig ausschlafen ist da genau das richtige.

Aber wer den Code mal testen will, bitte sehr das geht hier:

http://czarnowski.bplaced.net/index.php?seite=kontakt

Ah, das kann natürlich sein. Vielen Dank!