Comment vérifier que la structure d’une adresse mail est correcte par une macro Calc – Partie 1

Dans le tuto «Comment envoyer un mail depuis Calc en utilisant une macro», toutes les adresses mail des destinataires du message étaient saisies dans une colonne. Le traitement consistait à lire chaque cellule de la colonne jusqu’à ce qu’une cellule soit vide. En complément, il serait bénéfique de vérifier que ces adresses soient correctes.

Structure d’une adresse mail

Pour faire simple, une adresse électronique est composée d’un identifiant, du signe @ (arobase ou arrobe) et d’un nom de domaine.  Le nom de domaine est lui constitué d’au moins 3 caractères (domaine second niveau), d’un point puis d’une extension d’au minimum 2 caractères (domaine premier niveau).

Sur le site Wikipedia, vous trouverez une définition plus précise des domaines, définition plus complète de l’adresse mail.

Pour résumer nous partons sur la base suivante :

Identifiant@domaine2.domaine1

exemples : toto@gmail.com, titi@societe.fr, creation-de-site-internet@reuni-web.com, service_compta@pme-pmi.re, asnieres@O22.tel

Les règles de vérification

Maintenant que la structure d’une adresse e-mail est définie, nous pouvons préciser les différents points de contrôle que nous allons utiliser. Plus de contrôles peuvent être effectués (caractères spéciaux, nombre maximum de caractères utilisés…).

L’adresse doit :

  • se terminer par un point suivi de 2 caractères au minimum
  • contenir au moins 3 caractères suivis du signe @ suivi de 3 caractères au minimum
  • ne pas contenir d’espace

Le code Basic

Nous allons utiliser la fonction InStr() qui permet de connaître l’emplacement d’une chaîne de caractères dans une autre.

Dans le précédent tutoriel, nous avions une boucle de lecture des cellules

	do while encore=true
	   valeur =litCellule(colonne,compteur)
	   if valeur="" then
	      encore=false
	   else
	      lit=lit + valeur + separateur
	      compteur = compteur+1
	   end if
	loop

Commençons par créer une fonction contienEspace() qui renverra « vrai » si un espace est trouvé dans la chaine de caractères transmise en paramètre.

	Function contientEspace(adresse, erreur)
	   contientEspace= false
	   if InStr(adresse," ")>0 then
	      contientEspace = true
	   end if
	End Function

Afin d’afficher un message d’alerte en cas d’erreur trouvée, nous ajoutons une variable supplémentaire nommée bErreur. La valeur de bErreur permettra également de ne pas envoyer le mail final.
La fonction lit() étant utilisée aussi bien pour lire la colonne d’adresses que pour celle du texte du mail, nous lui ajoutons un paramètre « aTraiter ». Elle devient donc :

function lit (colonne, ligne, separateur, bErreur, aTraiter)

La boucle est également modifiée pour obtenir

	do while encore=true
	   valeur =litCellule(colonne,compteur)
	   if valeur="" then
	      encore=false
	   else
	      if aTraiter and contientEspace(valeur) then
	         bErreur  = true
	         msgbox ("Erreur dans l'adresse : " + valeur + " - Le mail ne sera pas envoyé")
	      else
	         lit=lit + valeur + separateur
	      end if
	      compteur = compteur+1
	   End if
	loop

La boucle continuera de « balayer » la colonne des adresses jusqu’à une cellule vide. Chaque erreur trouvée à ce stade sera indiquée par un message.

Il reste à voir les 2 contrôles supplémentaires définis… Suite de ce tuto « contrôle de mail, méthode longue » à venir très bientôt. Oui, méthode longue car ici, nous voyons comment se débrouiller avec des fonctions simple du langage Basic de Open Office et cela permet de se familiariser avec son environnement de développement.

Un autre tuto de vérification de mail sera créé : contrôle de mail, méthode courte.

Si vous constatez une erreur ou si quelque chose ne vous parait pas très clair, merci de nous en faire part, nous ferons la (les) modification(s) nécessaire(s). Tous vos critiques (bonnes ou mauvaises) sont les bienvenues.