Validation d'adresse email

Les standards définissant/recommandant les caractères utilisables pour les adresses email sont connus, or il est souvent difficile d’utiliser sur un site web une adresse email contenant autre chose que [A-Za-z0-9.-] (les caractères alpha-numériques ainsi que « .« , « - » et « « .

Ayant mis en place une configuration par défaut sur mon serveur SMTP qui me permet d’avoir des adresses emails multiple sur un même compte. J’ai une adresse: bla@domain.xxx et toutes les combinaisons de bla+nimportequoiautorisé@domain.xxx sont délivrées au même endroit sans configuration d’alias. Gmail a popularisé ce mécanisme pour la gestion de conversation.

Armé de cela, je décide de changer les alias que j’ai utilisé comme adresse email de contact jusqu’à aujourd’hui pour des adresses comme décrite ci-dessus. Et ce dans plusieurs buts 1) classification plus aisé et invariable contrairement au sujet ou l’adresse email source 2) si mon adresse est « donnée » je saurai qui l’a fait.

Malheureusement le « + » est un caractère banni par la plupart des interfaces web…

« Adresse invalide »
« caractère interdit présent dans l’adresse »

Je ne comprends pas pourquoi il est si difficile de gérer tous les caractères autorisés dans la partie local de l’adresse. J’ai soumis cette question à quelques sites. Les réponses sont intéressantes.

Une des raisons invoquées est justement l’avantage que je tire de l’usage du « + »: « plusieurs » adresses email. En effet certains sites ont le désir de ne permettre de créer qu’un seul compte par adresse email, et ce pour diminuer le spam sur des forums ou des sites de petites annonces. Ce raisonnement repousse le problème aux fournisseurs d’adresse email, donc le possesseur de domaine, donc n’importe qui. En effet j’ai toujours pu créer un nombre infini (bon pas vraiment) d’adresses « valides », ce n’est pas l’usage du « + » comme séparateur qui change quelque chose. Le fournisseur devient donc le garant que chaque utilisateur n’ait qu’un seul email. Et ceci sans aborder la possibilité d’utiliser des emails jetables.

La seconde « excuse » qui m’a été donné est que le RFC recommande mais n’oblige pas (et que l’administrateur a d’autres chats à fouetter). Quand je pense à tout ce qui fonctionne basé sur des RFC, je me dis qu’on a beaucoup de chance que ça ne tombe pas en carafe. Avec ce genre d’argument, on peut aussi dire que la longueur de l’email est seulement recommandée et fixer cette dernière à 20 caractères!

Pour conclure, cela semble être limité aux interfaces web. Dans le cas de Yahoo Groups, il est impossible de s’inscrire à un des groupes avec une telle adresse au travers de l’interface web. Par contre on peut s’inscrire par mail au même groupe sans aucun soucis… On peut se demander si ce n’est pas seulement de la flemme de la part des concepteurs de système web.

Pour vraiment conclure, voici comment valider une adresse email en php. (désolé pour la mise en page pourrie)

function valid_email($email){
  /* Credits: http://www.ilovejackdaniels.com/php/email-address-validation/ */

  if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) {
    return false;
  }
  $email_array = explode("@", $email);
  $local_array = explode(".", $email_array[0]);
  for ($i = 0; $i < sizeof($local_array); $i++) {
    if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$",
                   $local_array[$i])) {
       return false;
    }
  }
  if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) {
    $domain_array = explode(".", $email_array[1]);
    if (sizeof($domain_array) < 2) {
      return false; // Not enough parts to domain
    }
    for ($i = 0; $i < sizeof($domain_array); $i++) {
      if (!ereg("^(([A-Zaz0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$",
                   $domain_array[$i])) {
        return false;
      }
    }
  }
  return true;
}