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;
}
