Fehler bei der E-Mail-Adressen Überprüfung

DerEisige

Erfahrenes Mitglied
Hallo Leute

Ich hab eine kleine Funktion geschrieben die die E-Mail-Adressen auf meiner Webseite auf Richtigkeit und Existenz Prüfen soll.

PHP:
function eMailSyntax($adresse){
	if(substr_count($adresse, '@') == 1){ // Genau ein @
    	if(strrpos($adresse, '@') < 1){
			return false;
		} //Fehler: Kein Zeichen vorm @
		elseif(substr_count($adresse, '.') >= 1 ){ //Mind. ein Punkt
			if(strrpos($adresse, '.') < (3 + strrpos($adresse, '@'))){ return false; } //Fehler: @ muss vor dem letzten Dot sein und mind. ein Zeichen dazwischen liegen
		}else{ return false; } //Fehler: Kein Dot vorhanden
	}else{ return false; } //Fehler: Mehr als ein @
	
	list($LocalPart, $DomainPart) = explode("@", $Address); //zerlegung der email Adresse
	if(($Connection = @fsockopen($DomainPart, 80, $ErrorNumber, $ErrorString, 5)) === false) //Domain Existenz prüfen
    	return false;
  	fclose($Connection);
  	return true;
}
Nun hab ich folgendes Problem das egal welche E-Mail-Domain ich überprüfe „False“ zurück gegeben wird.

Hoffe dass ihr mir helfen könnt.
mfg. derEisige
 
Für die Syntax-Prüfung der Email kannst du eigentlich die vorgefertigte Funktion filter_var() verwenden.

Ob eine Mail-Adresse tatsächlich existiert kann man nicht zuverlässig prüfen, höchstens den MX abfragen, ob rein theoretisch da eine Email-Adresse dahinter liegen könnte. Das geht mit getmxrr().

Das mit deinem einigermaßen komplizierten Code zu machen halte ich für - sagen wir mal - gewagt.
 
Prüfe nur die Syntax der E-Mail-Adresse, die Existenz zu prüfen gibt eigentlich wenig Sinn. Wenn du unbedingt willst das eine gültige E-Mail verwendet wird, kannst du einen Link an die E-Mail schicken der erst aktiviert werden muss.

Und nutze wie schon gesagt die fertige Funktion filter_var(), weil deine Syntaxprüfung lässt sehr viel falsches zu.
 
Hallo,

also ich benutze für eine Überprüfung diese Funktion

PHP:
//
// Mailadresse prüfen:
function isValidEmail($email) {
    if (!ereg("^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+.([a-zA-Z0-9-]{2,4})$", $email))
    {
        return false;
    }
    else
    {
        if (function_exists("checkdnsrr"))
        {
            // Anmerkung: "checkdnsrr" ist auf Windowsplattformen nicht implementiert.
            list($user, $host) = explode("@", $email);
            if(checkdnsrr($host, "MX") || checkdnsrr($host, "A"))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return true;
        }
    }
}

Vll hilft sie dir ja weiter weiter, bzw. wenn du kein PHP 5 hast.
 
also ich benutze für eine Überprüfung diese Funktion

Dazu ein Zitat von Wikipedia

The local-part of the email address may use any of these ASCII characters:

  • Uppercase and lowercase English letters (a–z, A–Z)
  • Digits 0 to 9
  • Characters ! # $ % & ' * + - / = ? ^ _ ` { | } ~
  • Character . (dot, period, full stop) provided that it is not the first or last character, and provided also that it does not appear two or more times consecutively (e.g. John..Doe@example.com)

Conversely, many websites check email addresses much more strictly than the standard specifies, rejecting addresses containing valid characters like + or / signs
 
Zurück