De l'art de bien traiter les adresses électroniques

Et oui, parce qu’une adresse électronique, ça ne se maltraite pas ! Plus sérieusement, j’ai été confronté, il y a quelques temps, à une tâche à laquelle tout développeur Web est un jour confronté : récolter et traiter une adresse électronique. En l’occurrence, il s’agissait d’un banal formulaire de contact qui envoyait un message électronique, mais derrière cette banalité se cachent quelques pièges.

Premièrement, comment contrôler que l’adresse est valide, qu’elle existe bien et que l’utilisateur n’a pas entré n’importe quoi ? Deux solutions fort différentes s’offrent à nous.

Première solution : envoyer un message à l’adresse indiquée avec un lien de validation. Si cette solution permet d’être absolument certain de la validité de l’adresse et du fait qu’elle est lue, elle présente plusieurs inconvénients.

Tout d’abord, cela impose que le message de vérification parte rapidement et que l’utilisateur y réponde tout aussi rapidement (sans que le message ne se perde dans son dossier de courrier indésirable…). Pas très pratique, surtout si l’adresse est stockée dans une application dont l’utilisateur n’a pas connaissance : il pourrait alors se demander pourquoi un tel message lui parvient brusquement alors qu’il n’a rien demandé, voire y répondre très tardivement s’il ne consulte pas fréquemment ses messages. Du coup, les adresses stockées peuvent rester non validées un bon moment. Du point de vue du développeur, la tâche représente également un certain investissement puisqu’il faut gérer l’envoi du message et le module de validation des données.

Tester la syntaxe : n’en faites pas trop !

La seconde solution, qui peut être complémentaire de la première et permet un autre niveau de contrôle, est de vérifier la syntaxe de l’adresse. Cela permet un contrôle immédiat de l’adresse saisie, sans obliger la consultation de la boite aux lettres et sans même avoir à recharger la page, si l’on utilise du JavaScript par exemple.

La syntaxe officielle est synthétisée dans la RFC 3696. Mais sa mise en application peut être ardue si l’on veut à tout prix tout respecter, d’autant que les règles peuvent changer. Pour tout vous dire, j’avais commencé à réfléchir à les mettre en œuvre mais il y a tellement de conditions et d’exceptions que le code aurait fait des centaines de lignes pour un résultat incertain.

Si l’on va à l’essentiel, la première partie d’une adresse électronique, celle située avant le dernier arobase de l’adresse, peut contenir à peu près n’importe quoi. Il ne semble donc pas pertinent de tester quoi que ce soit dessus, si ce n’est qu’elle ne peut commencer ou se terminer par un point, que deux points ne peuvent s’y suivre et que sa taille est de 64 caractères au maximum.

La seconde partie, le nom de domaine, est un peu plus structurée. Ce nom de domaine est séparé en niveaux qui se lisent de droite à gauche ; par exemple, le premier niveau du domaine du blog que vous êtes en train de lire est info, le second niveau est tb06, etc. Aucun niveau de domaine ne peut commencer ou se terminer par un tiret. Les seuls caractères autorisés dans un niveau sont les caractères ASCII alphanumériques et le tiret (pas d’espaces ni de ponctuation, donc). Attention, le domaine de premier niveau ne peut pas être entièrement numérique. Enfin, la longueur maximale d’un nom de domaine est de 255 caractères mais une adresse électronique complète ne peut de toute façon pas dépasser 254 caractères.

Reste un dernier point sur lequel il faut être très vigilant : les adresses électroniques sont sensibles à la casse. Pas question, donc, de tout passer en majuscules ou en minuscules lors de l’utilisation de l’adresse (stockage, envoi de message…).

Exemple pratique… à ne pas suivre

Je terminerai sur une anecdote personnelle qui illustre bien l’importance de ne pas mettre des contrôles trop stricts par rapport à la norme. Figurez-vous que, chez mon hébergeur, je peux bénéficier d’un système que j’appelle — probablement de façon abusive — Sélection directe à l’arrivée.

Concrètement, si vous envoyez un message à l’adresse toto+titi@tata.com, votre message va atterrir dans le dossier nommé titi de la boite de toto située dans le domaine tata.com. Je m’en sers notamment pour que tous les messages que je reçois de mon forum préféré soient classés dans le dossier disneygazette sans que j’aie besoin de mettre en place un filtre sur mes messages reçus.

Oui mais voilà, au moment de mon inscription sur ledit forum, le système a refusé le signe + dans la première partie de l’adresse et a en plus tout passé en minuscules. Si le problème du + a pu être surmonté par l’action d’un administrateur, j’ai en revanche dû modifier mon dossier Disneygazette en disneygazette. Rien de bien méchant, mais voilà un exemple qui, j’espère, vous sensibilisera un peu plus lors des spécifications de vos prochaines applications.

Alors à vos codes, prêts… développez !

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

La discussion continue ailleurs

URL de rétrolien : http://www.tb06.info/trackback/113

Fil des commentaires de ce billet