Par

Vérifier la validité d’une adresse mail en php

Une lubie fréquente des grosses entreprises est de vérifier la validité des adresses mails collectées lors de jeux-concours par exemple.

La solution la plus simple est bien évidemment l’envoi d’un mail à l’adresse proposée par l’utilisateur, avec obligation pour ce dernier de cliquer sur un lien afin de valider sa candidature. Mais certains responsables web poussent parfois le délire paranoïaque jusqu’à demander de vérifier au moment de la procédure d’inscription la validité possible d’une adresse, avant de faire l’envoi innéluctable du mail de confirmation tant redouté.

Voici une première fonction, assez simple et qui satisfaira la plupart des pervers ineptes que vous pourriez avoir comme client :

function is_valid_email($email) {
	if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*(\+[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email))
		return false;
	return true;
}

Si malgré tout cela ne suffit pas, soyez certain que le sadique que vous avez en face est loin d’avoir fini de vous emm….der.
Vous pourrez toutefois essayer de le contenter avec la fonction suivante, qui a le mérite, totalement inutile à mon humble avis (mais je ne suis pas le client), de vérifier l’existence du nom de domaine.

function check_email_mx($email) {
	if( (preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $email)) ||
		(preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email)) ) {
		$host = explode('@', $email);
		if(checkdnsrr($host[1].'.', 'MX') ) return true;
		if(checkdnsrr($host[1].'.', 'A') ) return true;
		if(checkdnsrr($host[1].'.', 'CNAME') ) return true;
	}
	return false;
}

Si cela ne suffit toujours pas … changez de client !

NB : il est tout à fait possible, pour une compréhension plus universelle de ce texte, de changer le terme de “client” par “patron”, “chef de projet” …