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)
[php]
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;
}
}
[/php]
mais le probleme si j'ajoute des adresses mails : younes@doamine.ma, younes1@domaine.ma

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 | 5872 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 ?
[php]
if( eregi ("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$", explode(",",$email)))
[/php]

ou
[php]
if( explode(",",eregi ("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$", $email)))
[/php]

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]<?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.
?>[/php]
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

Merci BCP pour ta réponse,

ça marche très très bien (merci une autre fois),

il me reste juste un petit souci si vous pouvez m'aider.

avec ce que j'ai mnt et ce que m'a donné guilt92 seule la syntaxe suivante est correcte :
younes@domaine.com,younes1@domaine.com (c est a dire les adresses doivent être attachées avec les virgules).

Merci

ViPHP
ViPHP | 5872 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 | 5872 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 | 5872 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… :)