Snippet pour vérifier un email au niveau serveur mx
Ce code permet, si votre hébergement permet les sockets, de vérifier la validité d’une adresse email au niveau serveur. Donc, une adresse de forme xxx@xxx.com sera peut être bonne au niveau syntaxe, mais renverra une erreur, car non connu au niveau du serveur MX
function CheckMail($Email) {
global $HTTP_HOST;
$Return = array();
if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $Email)) { // test si le format de l'email est bon
$Return[0]=false;
$Return[1]="$Email a un format non valide.";
return $Return;
}
list($Username, $Domain) = split("@", $Email); // Split le nom et le domaine
if (checkdnsrr($Domain, "MX")) { //verifie existance serveur de mail sur ce domaine
if (getmxrr($Domain, $MXHost)) { // Si enregitrement MX , on le met comme adresse de connexion
for ($i = 0,$j = 1; $i < count ($MXHost); $i++,$j++) {
echo "Result($j) - $MXHost[$i]<BR>";
}
}
$ConnectAddress = $MXHost[0];
} else { // Si pas d'enregistrement MX, on met simplement le domaine comme adresse de connexion
$ConnectAddress = $Domain;
}
$Connect = fsockopen($ConnectAddress, 25);
if ($Connect) { // Si socket ouvert
if (ereg("^220", $Out = fgets($Connect, 1024))) {
fputs($Connect, "HELO $HTTP_HOST\r\n");
$Out = fgets($Connect, 1024);
fputs($Connect, "MAIL FROM: <{$Email}>\r\n");
$From = fgets($Connect, 1024);
fputs($Connect, "RCPT TO: <{$Email}>\r\n");
$To = fgets($Connect, 1024);
fputs($Connect, "QUIT\r\n");
fclose($Connect);
if (!ereg ("^250", $From) || !ereg ("^250", $To)) { // Si adresse n'existe pas
$Return[0]=false;
$Return[1]="$Email n'existe pas sur le serveur mail.";
return $Return;
}
}
} else { // Si la connection echoue
$Return[0] = false;
$Return[1] = "Impossible de se connecter au serveur mail ($ConnectAddress).";
return $Return;
}
// Si tout est OK
$Return[0]=true;
$Return[1]="$Email EXISTE BIEN.";
return $Return;
}