Valider des adresses e-mail
Une méthode souvent utilisée (je l'avoue, par moi aussi) pour se protéger du spam par e-mail consiste à ne simplement pas indiquer d'adresse e-mail valide lors d'une inscription. Je me suis déjà inscrit un nombre incalculable de fois avec sapdojapjdspefjfejfos@dfioshdfiosfho.de quand je savais qu'aucun e-mail de validation ne serait envoyé, ou que j'avais juste besoin de quelques informations sans vouloir donner mon adresse e-mail et m'exposer ainsi au risque de SPAM. C'est tout à fait légitime, mais en tant qu'exploitants de site, nous tenons à n'avoir que des adresses e-mail valides dans notre système.
Que pouvons-nous faire pour le garantir ?
Évidemment, une démarche courante consiste à envoyer un e-mail de vérification. L'utilisateur doit en quelque sorte valider son adresse par double opt-in, via un lien qui lui est envoyé. C'est seulement après la validation que l'utilisateur a accès aux données souhaitées. Cette approche a toutefois un inconvénient décisif : même si l'utilisateur indique une adresse valide, il se peut qu'il ne s'attende pas à recevoir un e-mail de validation et soit agacé de devoir cliquer encore une fois sur un lien, ce qu'il ne fera alors peut-être plus du tout, préférant renoncer aux informations.
Que faire si l'on veut se passer de cet e-mail de vérification tout en ayant une certaine garantie que l'utilisateur indique une adresse valide ?
Étape 1 : valider la syntaxe de l'e-mail
Les adresses e-mail sont (du moins sur Internet, pour la communication via les serveurs de messagerie habituels par SMTP) construites selon le modèle localpart@domainpart.tld par exemple meine-fancy-mailadresse@devdave.de
Pour garantir ici au moins une protection rudimentaire, on peut valider l'adresse e-mail via
if (filter_var($email_address, FILTER_VALIDATE_EMAIL)) {
echo "Mailadresse gültig";
}
Des saisies comme
- asdadasd
- asddasd@asdasd
- .asd§@dfsdf
sont ainsi déjà écartées.
Étape 2 : valider l'enregistrement MX
C'est de cela que doit réellement traiter cet article. L'enregistrement MX (Mail Exchange Resource Record) indique sous quel FQDN (Full Qualified Domain Name) le serveur de messagerie est joignable. Mon enregistrement MX pointe par exemple vers le serveur de messagerie d'Uberspace, car je traite et, le cas échéant, redirige mes e-mails via Uberspace. Si aucun enregistrement MX n'est enregistré pour un domaine ou si le domaine est introuvable, le destinataire ne peut pas non plus recevoir d'e-mails via ce domaine (ça paraît logique, et ça l'est). Comment vérifier tout cela ?
$valid = checkdnsrr($email_address, "MX");
echo "Mailadresse " . ($valid ? "" : "un") . " gültig";
Si checkdnsrr (qui signifie Check DNS Resource Record) ne trouve donc aucun enregistrement MX valide, l'adresse e-mail est invalide et doit être redemandée.
Pas envie de spam, mais envie quand même de recevoir des e-mails ? Avez-vous déjà pensé aux adresses e-mail temporaires ?