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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
<?
/*
===============================================================================
== ==
== ==
== Fonction permettant de verifier une adresse mail. ==
== Cette fonction va verifier l'adresse mail fournie en argument ==
== de plusieurs manières. Premièrement a l'aide d'expressions régulière ==
== afin de vérifier la syntaxe de celle-ci. ==
== ensuite une verification mx afin de verifier le domaine ==
== et puis une connection sur le serveur afin de valider l'user ==
== ==
== function verif_email($email,$debug) ==
== ==
== $email adresse à verifier. ==
== $debug information de deboguage. ==
== ==
== ==
===============================================================================
*/
function verif_email($email,$debug=false)
{
global $HTTP_HOST;
$Return= array();
/*
Tableau pour contenir les info que la fct renvoie.
$return['0'] = true/false état.
$return['1'] = message.
Nous sommes au commencement de nos test ici nous allons validé la syntaxe
utilisé dans la variable $email.
fonction utilisé eregi();
*/
if (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $email))
{
/*
Pour plus d'information sur la fonction eregi() veuillez voir : l'excellente page
*/
$Return[0]=false;
$Return[1]="${email} cet E-Mail n'as pas la bonne syntaxe.";
if ($debug) echo "Erreur : ${email} cet E-Mail n'as pas la bonne syntaxe.<br>";
return $Return;
}//fin if regexp.
else if($debug) echo "Confirmation : ${email} cet E-Mail n'as pas la bonne syntaxe.<br>";
/*
Notre première étape franchie avec succès, nous devons maintenant verifier l'existance
d'un serveur a cette adresse.
pour ce faire nous allons prendre la variable $email, et la diviser en ces deux composante.
d'une part l'utilisateur et d'autre part le domaines une adresse mail ayant la forme
<a href="mailto:utilisateur@domaine.com">utilisateur@domaine.com</a>.
nous allons créer deux variables pour contenir cela
$util utilisateur
$domaine le domaine.
voyons cela en action.
*/
list ( $util, $domaine ) = split ("@",$email);
/*
maintenant on check l'existance du domaine.
1) checkdnsrr
*/
if ( checkdnsrr ( $domaine, "MX" ) ) {
if($debug) echo "Confirmation : MX record du {$domaine} existe.<br>";
/*
nous sauvons l'adress du mx record pour testerl'existence de serveur mail sur le domaine.
1) getmxrr:
*/
if ( getmxrr ($domaine, $mxHote))
{
if($debug)
{
echo "Confirmation : MX record du {$domaine} confirmer par MX LOOKUP.<br>";
for ( $i = 0,$j = 1; $i < count ( $mxHote ); $i++,$j++ )
{
echo " Result($j) - $mxHote[$i]<BR>";
} // fin for
} //fin if debug
} //fin if getmxrr
/*
la fonction getmxrr a stocké les information concernant les mx records dans le tableau $mxHote
nous allons employé l'une de ces valeurs pour notre connection.
*/
$cible= $mxHote[0];
}//fin if checkdnsrr
else {
// si il n'y a pas de MX record simplement prendre le $domaine comme adresse pour la connection socket .
$cible = $domaine;
if ($debug) echo "Confirmation : MX record du {$domaine} n'existe pas.<br>";
} //fin else checkdnsrr.
/*
nous sommes a la dernière étape a ce stade nous savons que l'adresse à une syntaxe valide et nous savons si le serveur mail
est renseigné. nous allons donc ouvrir une session sur l'hote $mxHote et si nous obtenons une réponse valide allons checker
l'utilisateur.
1) fsockopen:
*/
$connection= fsockopen ($cible,25);
if ($connection)
{
if ($debug) echo "Connection réussie sur {$cible} SMTP.<br>";
/*
la connection est réussie sur le serveur smtp.
nous devons donc normalement recevoir une reponse contenant le code 220
plus d'information sur le protocol smtp:
1) fgets:
*/
if ( ereg ( "^220", $Out = fgets ( $Connect, 1024 ) ) ) {
// nous saluons le serveur smtp.
fputs ( $connection, "HELO $HTTP_HOSTrn" );
if ($debug) echo "en cours : HELO $HTTP_HOST<br>";
$Out = fgets ( $connection, 1024 ); // reception reponse serveur.
// envois de l'adresse de l'envoyeur au serveur.
fputs ( $connection, "MAIL FROM: <{$email}>rn" );
if ($debug) echo "en cours : MAIL FROM: <{$email}><br>";
$From = fgets ( $connection, 1024 ); // reception reponse serveur.
// envois de l'adresse cible.
fputs ( $connection, "RCPT TO: <{$email}>rn" );
if ($debug) echo "en cours : RCPT TO: <{$email}><br>";
$To = fgets ( $Connect, 1024 ); // reception reponse serveur.
// cloture de la connection.
fputs ( $connection, "QUITrn");
if ($debug) echo "en cours : QUIT<br>";
fclose($connection);
// nous verifions les reponse du serveur a propos de la commande to et mail.
// le serveur renvois le code 550 si elle n'existe pas
// check du mailbox.
if ( !ereg ( "^250", $From ) || !ereg ( "^250", $To )) {
$Return[0]=false;
$Return[1]="{$email} le serveur rejete l'adresse.";
if ($debug) echo "{$email} le serveur rejete l'adresse.<br>";
return $Return;
}
}
}//fin if $connection
else {
$Return[0]=false;
$Return[1]="connection impossible E-Mail server ({$cible}).";
if ($debug) echo "connection impossible E-Mail server ({$cible}).<br>";
return $Return;
}
$Return[0]=true;
$Return[1]="{$email} cet email est valide";
return $Return;
} //fin verif_email.
?> |
Partager