Heim > php教程 > PHP源码 > Hauptteil

PHP prüft genau, ob die E-Mail-Adresse existiert

大家讲道理
Freigeben: 2016-11-08 14:02:24
Original
1396 Leute haben es durchsucht

Hintergrund

Es gibt viele Möglichkeiten, E-Mail-Adressen in PHP zu überprüfen. Die häufigste Methode besteht darin, reguläre Ausdrücke selbst zu schreiben.

filter_var

filter_var ist eine in PHP integrierte Variablenfiltermethode. Sie bietet viele praktische Filter und kann zur Überprüfung von Ganzzahlen, Gleitkommazahlen, E-Mail-Adressen, URLs, MAC-Adressen usw. verwendet werden.

Spezifische Filterreferenz: filter.validate

Wenn filter_var false zurückgibt, bedeutet dies, dass die Variable den Filter nicht passieren kann, was bedeutet, dass sie illegal ist.




$email = "lastchiliarch@163.com";
 
var_dump(filter_var($email,  FILTER_VALIDATE_EMAIL));
 
 
$email = "asb";
var_dump(filter_var($email,  FILTER_VALIDATE_EMAIL));
 
$email = "1@a.com";
var_dump(filter_var($email,  FILTER_VALIDATE_EMAIL));
Nach dem Login kopieren

Ausgabe:

string(21) "lastchiliarch @163.com"

bool(false)

string(7) "1@a.com"

Für illegale Postfächer wie asb The Das Format hat „false“ zurückgegeben, aber für 1@a.com hat es bestanden, war aber immer noch leicht fehlerhaft.

Wenn jedoch die allgemeinen Regeln befolgt werden, wird 1@a.com als legitime E-Mail-Adresse betrachtet. Gibt es also eine Möglichkeit, dies genauer zu überprüfen?

checkdnsrr

checkdnsrr wird tatsächlich verwendet, um den DNS-Eintrag des angegebenen Hosts abzufragen. Wir können damit überprüfen, ob das Postfach vorhanden ist.

Für 1@a.com existiert der MX-Eintrag definitiv nicht.

   
$email = "lastchiliarch@163.com";
    var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX"));
    $email = "1@a.com";
    var_dump(checkdnsrr(array_pop(explode("@",$email)),"MX"));
Nach dem Login kopieren

Ausgabe:

bool(true)

bool(false)

Wie Sie sehen, ist es perfekt. Der einzige Nachteil ist, dass es zu langsam ist. Daher ist es nicht geeignet, diese Methode zur gleichzeitigen Überprüfung einer großen Anzahl von Postfächern zu verwenden.

filter_var checkdnsrr

Wir können filter_var und checkdnsrr zur Überprüfung kombinieren. Bei der überwiegenden Mehrheit der illegalen Postfächer schlägt filter_var definitiv fehl, und der Rest wird verwendet

checkdnsrr für weitere Beurteilung.

$email_arr = array("lastchiliarch@163.com", "1@a.com");
    foreach($email_arr as $email) {
        if (filter_var($email) === false) {
            echo "invalid email: $email \n";
            continue;
        }
 
        if(checkdnsrr(array_pop(explode("@",$email)),"MX") === false) {
            echo "invalid email: $email \n";
            continue;
        }
    }
Nach dem Login kopieren

Ausgabe: ungültige E-Mail: 1@a.com

Aber Es ist zu beachten, dass wir nur feststellen können, dass 163.com existiert, da wir nur den MX-Eintrag überprüfen, aber nicht beweisen können, dass der Benutzer lastchiliarch existiert.

Wenn Sie die Existenz des Postfachs genauer bestimmen möchten, können Sie nur eine Verbindung zum SMTP-Server herstellen, um es zu überprüfen.

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage