Y a t-il un moyen de tester la validité du mail avant d'envoyer le mail ?

Invité
Invité n'ayant pas de compte PHPfrance

27 oct. 2008, 15:28

Bonjour à tous, je suis en train de monter un système de parrainage sur mon site e-commerce et je me demandais s'il existait un moyen de tester la validité de l'adresse mail avant de lui envoyer un mail.

Par exemple l'adresse mail [email protected] n'existe pas, puis-je la tester ?

En fait je voudrais pouvoir les tester puisque j'ai vu sur le net qu'au bout d'un certain nombre d'envoi à de mauvaises adresses mail, on pouvait être black lister ...

Enfin voila, avez-vous des idées la dessus ?

Mammouth du PHP | 2937 Messages

27 oct. 2008, 16:03

Vérifier l'existence de l'adresse, je ne le pense pas (ou alors, très difficilement) ; en revanche, tu peux toujours vérifier la validité de la forme de l'adresse au moyen de la fonction filter_var.
filter_var ('[email protected]', FILTER_VALIDATE_EMAIL);

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

27 oct. 2008, 16:09

Tu peux vérifier si le nom de domaine existe (avec les fonctions de réseau) mais pas si l'adresse e-mail existe.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

ViPHP
ViPHP | 4674 Messages

27 oct. 2008, 21:06

Hey :),

On peut apprécier 4 niveaux de validation pour une adresse e-mail. Du niveau le plus tolérant au plus strict, sachant que le suivant a besoin du précédent pour être effectué. On aurait : vérification de la syntaxe, de l'existence du serveur MX, s'il existe un serveur SMTP, et enfin si l'adresse existe et est activée sur ce serveur.

Premièrement donc, pour vérifier la syntaxe, on peut utiliser le module filter qui n'est pas toujours activé/installé, ou une expression régulière qui aurait cette forme :

Code : Tout sélectionner

#^([a-z0-9_\-\.]+)@([a-z0-9_\-\.]+)\.([a-z]{2,6})$#i
Attention à ne pas oublier les .museum ;-).

Ensuite, pour vérifier si le serveur existe, il suffit de prendre le domaine de l'adresse e-mail. Ainsi, toto.net est le domaine de [email protected]. Il ne reste qu'à utiliser la fonction getmxrr() et d'observer le résultat. Si tu es sur Windows, la fonction a de forte chance d'être désactivée. Si tu as accès à la couche système, tu peux utiliser la ligne de commande suivante :

Code : Tout sélectionner

nslookup -type=MX <domain> 2>null
C'est une astuce, on est sur Windows, on fait comme on peut.

Une fois le serveur MX obtenu, on peut vérifier qu'il existe un serveur SMTP associé à ce serveur. Naïvement, on ouvrirait un flux vers une adresse TPC. Par exemple : tcp://<adresse MX>, sur le port 25. Si aucune erreur n'est apparue, on continue.

Dernière étape donc, une fois connecté sur le serveur MX via TCP, on peut envoyer une requête SMTP. On enverrait plutôt VRFY qui sert à vérifier l'existence ou l'activation d'une adresse e-mail. Bien sûr, il faut se présenter avant (EHLO) et on oublie pas de quitter (QUIT). Attention toutefois, tous les serveurs n'activent pas la requête VRFY (ça peut être utilisé à des fins de spam lié à du brute force et des attaques DOS — Deny of Service et pas l'autre là ;-)).

Voilà, c'est en gros les 4 étapes pour valider une adresse e-mail. La dernière étape a peu de chance de passer, i.e. d'être validée à cause de la désactivation pratiquement systématique de la commande VRFY d'SMTP. Donc en général, je m'en tiens avec la 3ème étape. Si tu es sur un site avec de forte montée en charge, c'est à écarter à cause des timeout qui peuvent devenir assez long. Donc on écarte aussi l'étape 2. Il ne reste que l'étape 1 qui est trivial et assure quand même de la bonne forme du mail, mais pas de son existence.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
AB
ViPHP | 5818 Messages

27 oct. 2008, 22:34

Hey :),
... Il ne reste que l'étape 1 qui est trivial et assure quand même de la bonne forme du mail, mais pas de son existence.
... ce qui fait que la fonction donnée par Victor est souvent la seule vérification que l'on fait (enfin c'est mon cas). Mais comme cela ne vérifie que la forme, ton exemple qui possède une forme cohérente devrait-être accepté.

Pour le reste il est bien entendu que si la quatrième étape décrite par Hywan (qui est la seule pouvant garantir l'existence de l'email) était possible sur les serveur, cela en ferait un formidable outil pour les spammeurs. Donc n'y compte pas.

Je paraphrase ce qui a déjà été dit, mais c'est pour souligner qu'il n'y a pas de solution entière à ton problème. On fait ce genre de vérification plus pour aider pour le visiteur (s'il s'est grossièrement trompé) que comme une vérification réelle. En même temps cela exclue au passage les plaisantins débutants qui ne connaissent pas la bonne syntaxe d'un mail, mais rien de plus.

ViPHP
ViPHP | 5924 Messages

27 oct. 2008, 23:37

La meilleure vérification de l'adresse mail, c'est le mail de vérification…

ViPHP
ViPHP | 4674 Messages

28 oct. 2008, 00:41

+1. J'avais oublié d'en parler, merci Sékil' :).
C'est une solution qui marche et qui est « sûre ».
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).