Tester la validité d'un e-mail

Soyez le premier à donner votre avis sur cette source.

Snippet vu 26 667 fois - Téléchargée 30 fois

Contenu du snippet

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 / Exemple :


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

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
mercredi 23 octobre 2002
Statut
Membre
Dernière intervention
9 août 2006

hmm, j'ai oublié de demander si dans le code actuelle les site en ".co.uk" ou "fr.st" passe ?
Messages postés
2
Date d'inscription
mercredi 23 octobre 2002
Statut
Membre
Dernière intervention
9 août 2006

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 ^^).
Messages postés
379
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
8 octobre 2008

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
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
35
faux, une adresse mail peut avoir les caractères : {, } et +....
Messages postés
1237
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
14
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 &&.
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.