1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
<?php
// On déclare d'abord les fonctions:
// Si la fonction getmxrr n'existe pas (serveur windows),
// On la créé à l'aide de la commande DOS <nslookup>
if(!function_exists('getmxrr'))
{
function getmxrr($hostname,&$mxhosts)
{
if(!is_array($mxhosts))
$mxhosts = array();
if( !empty( $hostname ) )
{
@exec( "nslookup -type=MX $hostname", $output, $ret );
while( list( $k, $line ) = each( $output ) )
{
// On recherche la présence de d'entrées MX:
if( ereg( "^{$hostname}\tMX preference = ([0-9]+), mail exchanger = (.*)$", $line, $parts ) )
{
$mxhosts[ $parts[1] ] = $parts[2];
}
}
if( count( $mxhosts ) )
{
// S'il y a plusieurs enregistrements MX, on les classe par ordre de priorité
reset( $mxhosts );
ksort( $mxhosts );
$i = 0;
while( list( $pref, $host ) = each( $mxhosts ) )
{
$mxhosts2[$i] = $host;
$i++;
}
$mxhosts = $mxhosts2;
return true;
}else{
return false;
}
}
}
}
function mailCheck($Email)
{
// L'adresse email doit être correctement formattée
if(!eregi("^[[:alpha:]]{1}[[:alnum:]]*((\.|_|-)[[:alnum:]]+)*@[[:alpha:]]{1}[[:alnum:]]*((\.|-)[[:alnum:]]+)*(\.[[:alpha:]]{2,})$", $Email))
exit('L\'adresse '.$Email.' est mal formatée');
// On récupère le domaine
list(,$domain ) = split('@',$Email);
// On cherche des enregistrements MX dans les DNS
if (getmxrr($domain, $MXHost))
$ConnectAddress = $MXHost[0];
else
$ConnectAddress = $domain;
// On créé la connexion sur le port smtp (25)
$Connect = @fsockopen($ConnectAddress,25,&$errno,&$errstr);
if($Connect)
{
if(ereg("^220", $Out = fgets($Connect, 1024)))
{
fputs ($Connect, "HELO {$_SERVER['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);
// Si le code renvoyé par la commande RCPT TO est 250 ou 251 (cf: RFC)
// Alors l'adresse existe
if (!ereg ("^250", $To) && !ereg ( "^251", $To ))
// Adresse rejetée par le serveur
return false;
else
// Adresse acceptée par le serveur
return true;
}else{
// Le serveur n'a pas répondu
return false;
}
}else{
// Connexion au serveur de messagerie impossible
// vous pouvez afficher le message d'erreur en décommentant la ligne suivante:
// echo $errno."-".$errstr;
return false;
}
}
// Définissez ici l'adresse à vérifier
$mail = adresse mail;
if(mailCheck($mail))
echo 'L\'adresse existe';
else
echo 'L\'adresse n\'existe pas ou une erreur est survenue';
?> |
Partager