begin process at 2012 02 15 08:35:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

E-Mail / Messagerie

 > TESTER LA VALIDITÉ D'UN E-MAIL

TESTER LA VALIDITÉ D'UN E-MAIL


 Information sur la source

Note :
8,8 / 10 - par 5 personnes
8,80 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :E-Mail / Messagerie Niveau :Initié Date de création :26/05/2001 Date de mise à jour :25/03/2002 11:37:36 Vu :22 466

Auteur : Romuald

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Cette source va vous permetre de tester la validité d'une adresse e-mail.

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 bien?  

Source

  • <?php
  • function emailCheck($email, &$err) {
  • if ($email == "") {
  • $err = "L'email est vide";
  • return false;
  • }
  • if (!preg_match("/^[-a-z0-9\._]+@[-a-z0-9\.]+\.[a-z]{2,4}$/i", $email)) {
  • $err = "Le format de l'email n'est pas valide";
  • return false;
  • }
  • list($nom, $dom) = explode("@", $email); // On récupère le nom de domaine dans la variable $dom
  • if (gethostbyname($dom) == $dom) { // si vous n'êtes pas sous Windows, vous pouvez utiliser directement la condition (!checkdnsrr($dom))
  • $err = "Ce nom de domaine n'existe pas";
  • return false;
  • }
  • return true;
  • }
  • ?>
  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  • "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
  • <html>
  • <head>
  • <title>Test de validité d'e-mail</title>
  • </head>
  • <body bgcolor="white">
  • <form action="email.php" method="post">
  • <input type="text" name="semail" value="<?php echo $semail ?>">
  • <input type="submit" value="Valider cet email">
  • <?php
  • if (isset($semail)) {
  • ?>
  • <hr>
  • Résultat :<br>
  • <?php
  • if (emailCheck($semail, $err))
  • echo "Cette adresse email est valide";
  • else
  • echo "Erreur : " . $err;
  • }
  • ?>
  • </form>
  • </body>
  • </html>
<?php
function emailCheck($email, &$err) {
        if ($email == "") {
                $err = "L'email est vide";
                return false;
        }

        if (!preg_match("/^[-a-z0-9\._]+@[-a-z0-9\.]+\.[a-z]{2,4}$/i", $email)) {
                $err = "Le format de l'email n'est pas valide";
                return false;
        }

        list($nom, $dom) = explode("@", $email); // On récupère le nom de domaine dans la variable $dom

        if (gethostbyname($dom) == $dom) { // si vous n'êtes pas sous Windows, vous pouvez utiliser directement la condition (!checkdnsrr($dom))
                $err = "Ce nom de domaine n'existe pas";
                return false;
        }
        return true;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
        <head>
                <title>Test de validité d'e-mail</title>
        </head>
        <body bgcolor="white">
                <form action="email.php" method="post">
                        <input type="text" name="semail" value="<?php echo $semail ?>">
                        <input type="submit" value="Valider cet email">
<?php
if (isset($semail)) {
?>
                        <hr>
                        Résultat :<br>
<?php
        if (emailCheck($semail, $err))
                echo "Cette adresse email est valide";
        else
                echo "Erreur : " . $err;
}
?>
                </form>
        </body>
</html>   

 Conclusion

La fonction emailCheck() prend comme paramètre l'email et une variable qui à la sortie de la fonction contiendra le libellé de l'erreur si erreur il y a (ce qui permet d'indiquer ce qui ne va pas).
Elle retourne vrai si l'email est valide, faux sinon.

Note: il est possible que la fonction ne soit pas parfaite et que certaines adresses valides soit vues comme invalides. Si vous en trouvez envoyez moi un e-mail avec l'adresse qui ne passe pas je tenterai de corriger le problème.

Mise à jour :
- utilisation de preg_match plus rapide que la fonction ereg.
- portage du nombre max de caractères pour le domaine global à 4 (pour les domaines en .info)


 Sources du même auteur

CHARGE DE LA MACHINE
Source avec Zip PARSEUR DE DATES
Source avec Zip CLASSE POUR UTILISER LES SOCKETS
TRANSFORMER UNE URL EN LIEN CLIQUABLE
LES COOKIES

 Sources de la même categorie

Source avec Zip Source avec une capture FORM TO MAIL AVEC PROTECTION PAR TOKEN ET CAPTCHA CONTRÔLES ... par cod57
Source avec Zip Source avec une capture FORMULAIRE VERS COURRIEL BASIQUE AVEC CONTRÔLE CAPTCHA ANTI ... par cod57
Source avec Zip CHAT EN PHP ET JQUERY par pitchoubrazil
Source avec Zip Source avec une capture FORMULAIRE DE CHOIX MULTI-CONTACT VALIDE XHTML 1.0 TRANSITIO... par aventurier19
Source avec Zip Source avec une capture WEB MESSENGER par EvildarkEurope

Commentaires et avis

Commentaire de tiptep le 23/12/2001 15:43:32

pour le format de l'adresse entrée, on peut aussi utiliser ces fourchettes-là :

^([0-9,a-z,A-Z]+)([.,_]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[.]([0-9,a-z,A-Z]){2}([0-9,a-z,A-Z])?$

Commentaire de cresus18 le 14/03/2004 21:27:13

Je trouve ce script très pratique, ca m'aura permis d'approfondir les expressions régulières qui sont vraiment quelque chose d'utile.

Mais je pense que pour les adresses email, il y a beaucoup d'hébergeurs qui proposent ce service et qui possèdent leur propre structure d'adresse. Certes elles se ressemblent, mais je pense qu'il n'y a vraiment que la structure xxx@xxx.xxx qui permettent de ne pas oublier les autres et qu'il faut éviter de rajouter des contraintes.

De plus il existe une source pour aller tout de suite voir auprès de l'hébergeur si l'utilisateur existe vraiment à cette adresse : http://www.phpcs.com/code.aspx?ID=21070


Par rapport à la source de romuald, je rajouterai juste que l'on peut trouver le caractère "_" avant le "@" et cette structure est possible pour les adresses Yahoo! qui est un hébergeur plutot connu.

Commentaire de grandvizir le 26/01/2005 18:12:27

Histoire de raccourcir le code, je propose simplement:

function CheckEMail($imail) {
  return ($imail!="") && (preg_match("/^[-a-z0-9\._]+@[-a-z0-9\.]+\.[a-z]{2,4}$/i", $imail));
}

Ensuite, on traite le message d'erreur comme on veut. En ce qui concerne l'histoire de DNS, merci de rajouter une condition supplémentaire avec &&.

Commentaire de coucou747 le 12/09/2005 21:05:35 administrateur CS

faux, une adresse mail peut avoir les caractères : {, } et +....

Commentaire de gabs77 le 26/03/2006 20:03:52

pour ceux aukel sa ne fonctionne pas
particulièrement ceux ki ont un fournisseur d 'accès free
et k ils ont des msg d erreur qui comporte des remarques du style

"Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in ..."

il faut rajouter dans mail.php dansla page qui envoie l email
au tout début de la page :

"ini_set ("SMTP","smtp.free.fr");"
(si vous avez un autre opérateur ke free,remplacer par votre opérateur )

et la sa devrai fonctionner

Commentaire de nEoBaHaMuT le 09/08/2006 21:02:19

coucou747 il est tout de même rare de voir des email avec les caractères {, } et + n'est-ce pas ?
La seul fois ou jai du utiliser les caractères { et } c'était pour l'envoie d'un formulaire par mail avec un code entre {} avant le mail du destinataire pour que le client de messagerie comprenne qu'il devait analyser l'email et y extraire les infos préformaté... (si c'est pas clair faut le dire ^^).

Donc pour un site basic on peut eventuellement ce passer de ces caractère (surtout que pour les grosse firms comme microsoft hotmail, yahoo!, etc... ce genre de caractère ne sont pas accepté si je ne me trompe pas (j'ai un doute du coup ^^).

Commentaire de nEoBaHaMuT le 09/08/2006 21:09:10

hmm, j'ai oublié de demander si dans le code actuelle les site en ".co.uk" ou "fr.st" passe ?

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,607 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales