Tester de validité de plusieurs adresse mails

Eléphant du PHP | 85 Messages

18 juil. 2008, 12:47

Bonjour,

Je veux envoyer des emails à plusieurs utilisateurs avec verification d'adresses mails ...

J'ai ce script qui verifie la validite d'une adresse mail (ça marche bien pour une seule adresse mail)
function test_email($email)
{
if( eregi ("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$", $email))
//if( eregi("^[_\.0-9a-z-]+@([0-9a-z-]+\.)+[a-z]{2,4}$",$email) )
{

// L'adresse email est valide
return true;
}
else
{
// L'adresse email n'est pas valide
return false;
} 
}
mais le probleme si j'ajoute des adresses mails : [email protected], [email protected]

il m affiche erreur, je dois pas passer par la fonction si je veux que l'envoie passe ...

Vous avez une idée ?

Merci

ViPHP
ViPHP | 5881 Messages

18 juil. 2008, 13:11

Utilise explode() voire preg_split()...

Eléphant du PHP | 85 Messages

18 juil. 2008, 13:30

Merci pour ta reponse,

je fais ce syntaxe ?
if( eregi ("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$", explode(",",$email)))
ou
if( explode(",",eregi ("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$", $email)))
les deux ça marche pas pour moi.

Merci

Mammouth du PHP | 965 Messages

18 juil. 2008, 13:58

J'ajouterais aussi pour le check d'adresse mail la fonction suivante :

http://www.php.net/manual/en/function.getmxrr.php

pouvoir tester la réponse du domaine et au mieux, si le server est down reporter l'envois a plus tard.

Mammouth du PHP | 1349 Messages

18 juil. 2008, 15:46

Je pense que ce que Sékiltoyai te disait avec ces fonctions (enfin moi c'est ce que je ferai ;) ) c'est de les utiliser pour séparer ta chaine en plusieurs éléments et soumettre chaque élément à la fonction de vérification.

depuis ta chaine : valeur1, valeur2, valeur3 tu utilises un explode() avec la virgule comme séparateur, donc tu as un tableau avec chaque valeur. Puis, avec un foreach() tu exécutes la fonction de vérification sur chaque élément du tableau.
Dernière édition par guilt92 le 18 juil. 2008, 15:49, édité 1 fois.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 85 Messages

18 juil. 2008, 15:47

Merci pour vos réponse,

Pouvez vous me donner des exemples et surtout de ce que je cherche ...
car j ai suis ces fonctions que vous m'avez donné mais ça marche pas ...

Merci

Mammouth du PHP | 1349 Messages

18 juil. 2008, 16:15

Petit exemple très proche de ton cas et commenté. Si tu comprends ce bout de code tu n aura aucun probleme a l appliquer pour toi...
<?php
function test($val)
{
return true; //c'est un exemple...
}


$chaine = "valeur1, valeur2, valeur3"; //une chaine de valeurs

$faux_mail = false; //on considère qu'il n'y a pas de faux mails
foreach(explode(",",$chaine) as $valeur) //pour chaque valeur de la chaine(avec la , comme délimiteur)
{
if(!test($valeur)) $faux_mail = true; //si une adresse est incorrecte (renvoi de false par la fonction) on change la valeur de $faux_mail
}
if(!$faux_mail) echo "Les adresses sont correctes"; //donc si faux_mail est faux, ca veut dire qu on a pas trouvé de mauvaise adresse
else echo "Au moins une adresse est buggée"; //sinon on en a trouvé au moins une.
?>
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphant du PHP | 85 Messages

18 juil. 2008, 16:51


ViPHP
ViPHP | 5881 Messages

18 juil. 2008, 16:59

D'où mon conseil d'utiliser preg_split()...

Eléphant du PHP | 85 Messages

18 juil. 2008, 17:02

j'ai fais comme ça et je pense que ça marche :

$aEmails = explode (',', str_replace (' ', '', $email));

foreach ($aEmails as $mail) { ...}

J'ai raison ?

Je vous remercie tous

ViPHP
ViPHP | 5881 Messages

18 juil. 2008, 17:05

Non, car s'il y a des espaces à l'intérieur du mail (le mail n'est pas valide), il te répondra que le mail est valide. Va voir l'utilisation des expressions régulières comme je te le conseille, c'est le meilleur (seul ?) moyen de faire ce que tu demandes...

Eléphant du PHP | 85 Messages

18 juil. 2008, 17:08

Merci

Peux tu me faire un exemple,

car meme si j'ai cherché et j'ai l'appliqué ça pas marché

j'ai fais comme ça : preg_split('/ , /', $email, -1, PREG_SPLIT_OFFSET_CAPTURE);

alors ?

ViPHP
ViPHP | 5881 Messages

18 juil. 2008, 18:47

Je te donnes ce que tu dois savoir :
\s représente un caractère blanc (dont un espace).
* après une entitée signifie que tu la veux zéro ou plusieurs fois.
donc \s* signifie zéro ou plusieurs espaces.
Je te laisse finir, t'y es presque… :)