Accueil > > > TESTER LA VALIDITÉ D'UNE ADRESSE EMAIL SANS ATTENDRE DE RÉPONSE DE L'INTERNAUTE
TESTER LA VALIDITÉ D'UNE ADRESSE EMAIL SANS ATTENDRE DE RÉPONSE DE L'INTERNAUTE
Information sur la source
Description
Voilà, j'ai longuement cherché, et par désespoir, j'ai écrit la fonction testMail() qui va vous permettre de tester avec une relative pertinence la validité d'une adresse e-mail. (lors de la validation d'un formulaire d'inscription par exemple) Elle effecute les vérifications suivantes : - L'email n'est il pas vide ? - Se compose t'il de caractères valides ? - Le nom de domaine de l'adresse existe-t'il ? - Que disent les enregistrements MX ? - Le serveur SMTP (port 25) répond t-il ? - Un mail de test est envoyé, que répond le serveur ? Je n'ai pas utilisé la fonction SMTP VERIFY car désactivée sur la plus-part des serveurs. Attention donc au fait que ce script envoie réellement un email de test (à personaliser) au destinataire. Bien sur certains serveur SMTP accèptent toutes les adresses avant de les résoudre ... Ces quelques tests permettront tout de même d'éliminer nombre de fausses adresses.
Source
- <?php
- require 'Net/SMTP.php';
-
- function checkEmail($email) {
- // checks proper syntax
- $regexp = "^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$";
-
- if (!eregi($regexp, $email)) {
- return false;
- }
-
- // gets domain name
- list($username,$domain)=split('@',$email);
- // checks for if MX records in the DNS
- $mxhosts = array();
- if(!getmxrr($domain, $mxhosts)) {
- // no mx records, ok to check domain
- $fp=@fsockopen($domain,25,$errno,$errstr,30);
- if (!$fp) {
- return false;
- } else {
- fclose($fp);
- return testMail($host,$email);
- }
- } else {
- // mx records found
- foreach ($mxhosts as $host) {
- $fp=@fsockopen($host,25,$errno,$errstr,30);
- if ($fp) {
- fclose($fp);
- return testMail($host,$email);
- }
- }
- return false;
- }
- }
-
- function testMail($srv, $mail)
- {
-
- $host = "mail.domain.ext";
- $from = 'user@domain.ext';
- $fromLine = "From: Service des inscriptions<$from>\n";
- $date = "Date: ".gmdate("D, d M Y H:i:s") . " GMT\n";
- $rcpt = "To: <$mail>\n";
- $subj = "Subject: Inscription\n";
- $body = "Bienvenu chez nous.";
-
- /* Create a new Net_SMTP object. */
- if (! ($smtp = new Net_SMTP($srv))) {
- // echo("Unable to instantiate Net_SMTP object\n");
- return false;
- }
-
- /* Connect to the SMTP server. */
- if (PEAR::isError($e = $smtp->connect())) {
- // echo($e->getMessage() . "\n");
- return false;
- }
-
- /* HELO to the SMTP server. */
- if (PEAR::isError($e = $smtp->helo($host))) {
- // echo($e->getMessage() . "\n");
- return false;
- }
-
- /* Send the 'MAIL FROM:' SMTP command. */
- if (PEAR::isError($smtp->mailFrom($from))) {
- // echo("Unable to set sender to <$from>\n");
- return false;
- }
-
- /* Address the message to each of the recipients. */
- if (PEAR::isError($res = $smtp->rcptTo($mail))) {
- // echo("Unable to add recipient <$mail>: " . $res->getMessage() . "\n<br />Error ".implode(": ",$smtp->getResponse()));
- return false;
- }
-
- /* Set the body of the message. */
- if (PEAR::isError($smtp->data($subj .$fromLine.$rcpt.$date. "\r\n" . $body))) {
- // echo("Unable to send data\n");
- return false;
- }
-
- /* Disconnect from the SMTP server. */
- $smtp->disconnect();
- return true;
- }
-
- // Test the function
- echo checkEmail($_REQUEST['email'])?"L'email existe":"L'email est invalide!";
- ?>
<?php
require 'Net/SMTP.php';
function checkEmail($email) {
// checks proper syntax
$regexp = "^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$";
if (!eregi($regexp, $email)) {
return false;
}
// gets domain name
list($username,$domain)=split('@',$email);
// checks for if MX records in the DNS
$mxhosts = array();
if(!getmxrr($domain, $mxhosts)) {
// no mx records, ok to check domain
$fp=@fsockopen($domain,25,$errno,$errstr,30);
if (!$fp) {
return false;
} else {
fclose($fp);
return testMail($host,$email);
}
} else {
// mx records found
foreach ($mxhosts as $host) {
$fp=@fsockopen($host,25,$errno,$errstr,30);
if ($fp) {
fclose($fp);
return testMail($host,$email);
}
}
return false;
}
}
function testMail($srv, $mail)
{
$host = "mail.domain.ext";
$from = 'user@domain.ext';
$fromLine = "From: Service des inscriptions<$from>\n";
$date = "Date: ".gmdate("D, d M Y H:i:s") . " GMT\n";
$rcpt = "To: <$mail>\n";
$subj = "Subject: Inscription\n";
$body = "Bienvenu chez nous.";
/* Create a new Net_SMTP object. */
if (! ($smtp = new Net_SMTP($srv))) {
// echo("Unable to instantiate Net_SMTP object\n");
return false;
}
/* Connect to the SMTP server. */
if (PEAR::isError($e = $smtp->connect())) {
// echo($e->getMessage() . "\n");
return false;
}
/* HELO to the SMTP server. */
if (PEAR::isError($e = $smtp->helo($host))) {
// echo($e->getMessage() . "\n");
return false;
}
/* Send the 'MAIL FROM:' SMTP command. */
if (PEAR::isError($smtp->mailFrom($from))) {
// echo("Unable to set sender to <$from>\n");
return false;
}
/* Address the message to each of the recipients. */
if (PEAR::isError($res = $smtp->rcptTo($mail))) {
// echo("Unable to add recipient <$mail>: " . $res->getMessage() . "\n<br />Error ".implode(": ",$smtp->getResponse()));
return false;
}
/* Set the body of the message. */
if (PEAR::isError($smtp->data($subj .$fromLine.$rcpt.$date. "\r\n" . $body))) {
// echo("Unable to send data\n");
return false;
}
/* Disconnect from the SMTP server. */
$smtp->disconnect();
return true;
}
// Test the function
echo checkEmail($_REQUEST['email'])?"L'email existe":"L'email est invalide!";
?>
Conclusion
Ce code fonctionne avec PEAR installé et utilise le module Net_SMTP. La fonction checkEmail() (appelée par testMail()) est issue du code (http://www.phpcs.com/code.aspx?ID=12782) de Romuald que je remercie. Le reste provient de diverses autres sources sur le WEB.
Note: ce code est expérimental. N'hésitez donc pas à me faire part de vos commentaires.
Historique
- 10 octobre 2005 22:48:32 :
- corrections mineures.
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
test validité plusieurs adresse mails [ par younes371 ]
Bonjour, Je veux envoyer des emails à plusieurs utilisateurs avec verification d'adresses mails ... J'ai ce script qui verifie la validite d'une adr
vérification d'email [ par Annadrill ]
bonjour,je cherche a faire un systeme qui lorsqu on entre son adresse email comme par exemple pour s'enregistrer à la news d'un site,un email de confi
PHP - Vérification validité de liens [ par toopix ]
Salut, Quel est le meilleur moyen pour vérifier la validité de fichiers en téléchargement sur le web. J'ai une application qui doit vérifier à par
Modification d'adresse email [ par djinko ]
Bonjour à tous,J'ai crée un formulaire nommé "modifier votre adresse electronique" qui integre l'ancien adresse, la nouvelle adresse ainsi que sa vali
Formulaire de mot de passe perdu [ par Sub_Mat ]
Bonjour à tous,Bon voila, je suis en train de mettre en place un système de récupération de mot de passe sur mon site, et j'ai beau chercher, mais je
Message d'erreur [ par roinewgames34 ]
Bonjour,J'ai voulu créé un script PHP afin de récupérer les informations d'un formulaire remplie par les visiteurs, mais, le script semble mal fonctio
Vérifier le présente d'une adresse email spécifique dans la boîte de messagerie [ par bonheur123 ]
Bonjour,.Pouvez vous m'aider à avoir un script en PHP qui vérifie la présence d'une adresse email spécifique dans une boite de messagerie donnée ?.En
e-mail [ par vinise ]
Bonjour a tous.voila jai un hebergement qui me permet de creer des adresse email ilimité.et jaimerai que a chaque fois que quelqu'un s'enregistre sur
Récupération d'une partie d'adresse email ? [ par Joez ]
je veux recupérer ce k'il y a avant l'@ dans une adresse email, en php, comment faire ?
Newsletter avec des images dans le corps [ par mitchbuck ]
Hi everybody !Petite question : je souhaite créer une newsletter façon "entreprise" dont le corps de l'email est en fait une page internet n
|
Derniers Blogs
[TECHDAYS 2010] #04 - WORKSHOP : UPGRADE DE MOSS 2007 VERS SHAREPOINT 2010[TECHDAYS 2010] #04 - WORKSHOP : UPGRADE DE MOSS 2007 VERS SHAREPOINT 2010 par pierre
Alain Bastardie (Consultant SQLi) présente le workshop d'upgrade de MOSS 2007 vers SharePoint 2010. Philisophie de la migration Faire un état des lieux avant de démarrer Utiliser des outils sur MOSS 2007 Résoudre les problèmes potent...
Cliquez pour lire la suite de l'article par pierre TECHDAYS PARIS 2010 : LA GOUVERNANCE DANS SHAREPOINT ONLINETECHDAYS PARIS 2010 : LA GOUVERNANCE DANS SHAREPOINT ONLINE par ROMELARD Fabrice
Animé par: Emmanuel Bergerat et Damien Caro La session a démarré par un premier retour sur la situation de la la solution BPOS (Business Productivity OnLine Suite) et les possibilités commerciales associées ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : ADMINISTRATION SHAREPOINT 2010TECHDAYS PARIS 2010 : ADMINISTRATION SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Patrick Guimonet et Benoit Hamet Cette session traitera des différents points exigés durant les taches d'administration : Planification (architecture, hébergement, authentification, .) Opération e...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [TECHDAYS 2010] #03 - WEB CONTENT MANAGEMENT SOUS SHAREPOINT 2010[TECHDAYS 2010] #03 - WEB CONTENT MANAGEMENT SOUS SHAREPOINT 2010 par pierre
Stephane Cordonnier de MCNext nous présente les fonctionnalités Web Content Management (WCM) sous SharePoint 2010. Qu'est-ce que le WCM ECM, GED, RM, WCM c'est quoi Plateforme SharePoint Versions SharePoint 2010 SharePoint Fondation...
Cliquez pour lire la suite de l'article par pierre [DESIGN PATTERNS] PARTIE 2: DIP: DEPENDENCY INVERSION PRINCIPLE[DESIGN PATTERNS] PARTIE 2: DIP: DEPENDENCY INVERSION PRINCIPLE par tja
C'est le dernier principe des principes du Design Orienté Objet (The Principles of Object Oriented Design) fondés par Robert C. Martin plus connu sous le pseudonyme d'Uncle Bob.
l'image empruntée de LosTechies.
Je ne traite pas les principes dans...
Cliquez pour lire la suite de l'article par tja
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|