Tester la validité d'un e-mail

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 699 fois - Téléchargée 30 fois

Contenu du snippet

Fonction permettant de tester si un e-mail a un format valide (a peu près)

renvoi true si l'mail est bon false si il est faux

Source / Exemple :


function TestMail(EMail:string):boolean;
var
 a,b,c:integer;
 TmpS,accept:string;
begin

  TmpS := lowercase(EMail);
  Result := True;
  accept := 'abcdefghijklmnopqrstuvwxyz0123456789-@._~'; //caractères acceptés

  //test caractères non acceptés
  for a:=1 to length(TmpS) do begin                  //Pour chaque caractère de l'e-mail
    c:=0;
    for b:=1 to length(accept) do                    //si il est pas dans la liste des acceptés
     if copy(TmpS,a,1) = copy(accept,b,1) then c:=1;
    if c=0 then Result :=false;                      //c pas bon
  end;

  //test compte '@' = 1
  b:=0;
  for a:=1 to length(TmpS) do                        //pour tous les caractères
    if copy(TmpS,a,1) = '@' then b:=b+1;             //si il trouve @ il ajoute 1
  if b <> 1 then Result := False;                    //comme il faut un seul @,
                                                     //si il en trouve plusieurs c pas bon
  //test compte '.' = 0
  if pos('.',TmpS) = 0 then Result := false;         //si ya 0 '.' dans l'email c pas bon

end;

Conclusion :


TestMail('machin@serveur.com') renvera true
TestMail('tralala') renvera false
TestMail('machin@serveur@com') renvera false
TestMail('##//Waza\\ {...}@bidule.com') renvera false

A voir également

Ajouter un commentaire

Commentaires

hoby500
Messages postés
86
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
26 mai 2019
-
Dites les gars.

au lieu de copy(TmpS,a,1) vous faites mieux d'utiliser TmpS[a]

Puis, au lieu de :
for a:=1 to length(TmpS) do
begin
if pos(copy(TmpS,a,1),accept) < 0 then Result := False
end;

je propose :

Email_Bon := True; // j'assume que c'est bon
for a:=1 to length(TmpS) do
if pos(TmpS[a],accept) = 0 then
begin
Email_Bon := False; // je suis sûr que c'est pas bon
Break // je quitte la boucle
end;

// Pour vérifier la présence du point au delà du @ :
if Email_Bon then
begin
s:=Email; Delete(s, 1, pos('@', s));
if pos('.', s)=0 then Email_Bon := false
end
bloodfox
Messages postés
1
Date d'inscription
vendredi 4 février 2005
Statut
Membre
Dernière intervention
22 mai 2006
-
Je me suis permis d'adapter un peu ce code

//Test des caractères non acceptés
for a:=1 to length(TmpS) do
begin
if pos(copy(TmpS,a,1),accept) < 0 then
Result := False
end;
//Test du nombre de @
b:=0;
for a:=1 to length(TmpS) do //pour tous les caractères
if copy(TmpS,a,1) = '@' then b:=b+1; //si il trouve @ il ajoute 1
if b <> 1 then
Result := False;
//Test . ou @ qui se suivent
for a:=1 to length(TmpS) do //pour tous les caractères
if ( (copy(TmpS,a,1) '@') or (copy(TmpS,a,1) '.') ) and
((copy(TmpS,a+1,1) '@') or (copy(TmpS,a+1,1) '.')) then
Result := False;
//Test . ou @ en premier ou dernier caractere
if (copy(TmpS,1,1) '@') or (copy(TmpS,1,1) '.') or
(copy(TmpS,length(TmpS),1) '@') or (copy(TmpS,length(TmpS),1) '.') then
Result := False;
//Test présence d'un . après le @
if pos('.',copy(TmpS,pos('@',TmpS)+1,length(TmpS)-pos('@',TmpS)-1)) = 0 then
Result := false;
cs_stailer
Messages postés
511
Date d'inscription
jeudi 28 mars 2002
Statut
Membre
Dernière intervention
13 mai 2009
1 -
Ah oui, s'il n'y a pas un '.' quelque part dans l'email c'est pas bon. Seulement ca ne dit pas OU dans l'email.
Or, pour ne pas avoir d'erreur il faut vérifier qu'il y ait un '.' APRES le @.
fabiin
Messages postés
338
Date d'inscription
mercredi 4 avril 2001
Statut
Membre
Dernière intervention
8 décembre 2009
6 -
ca le fai normalement
regarde a la fin du source :
if pos('.',TmpS) = 0 then Result := false; //si ya 0 '.' dans l'email c pas bon
cs_stailer
Messages postés
511
Date d'inscription
jeudi 28 mars 2002
Statut
Membre
Dernière intervention
13 mai 2009
1 -
Y a un email qui m'a fait planter mon système de newsletter :

nom.prenom@libertysurf

Et oui, mon ptit gars, il y a bien un . et un @ maisle problème est qu'il n'y a pas de . après le nom du provider... Et ca le serveur aime pas.

Donc suggestion : Il faudrait que ta source vérifie s'il y a bien ce fameux point.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.