Page 1 sur 1

Mail : envoi multiple via une boucle

Posté : 05 mai 2009, 09:53
par Megadeth
Bonjour,

J'ai un problème avec le code suivant. Je voulais savoir si on pouvait l'optimiser (ca rame un peu) mais surtout faire en sorte que ca marche hors je ne vois pas ou ça déconne alors qu'à part l'envoi de mail tout fonctionne. Ma table comporte des adresses mails valide bien sur et tous les echo de valeur sont probants #-o
$mail = 0;
foreach($_POST['cac'] as $key => $value) {
$q = "SELECT * FROM utilisateurs WHERE id_utilisateur = ".$value;
$r = mysql_query($q);
while($row=mysql_fetch_array($r)){
$destinataire = $row["mail_utilisateur"];
mail("$destinataire","Avis à populous", $_SESSION["log"]. " a posté un message pour vous");
$mail++;
}
}
Mega
;)

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 05 mai 2009, 10:20
par Sodams
Peux-tu construire ta requête autrement?
Pour chaque $_POST['cac']? tu crées une nouvelle requête et tu l'exécutes.

Pourquoi ne ferais-tu pas celà en une seule requête?

Posté : 05 mai 2009, 10:50
par D4Y
Qu'est-ce qui ne va pas dans l'envoi du mail ?

Posté : 05 mai 2009, 10:59
par Megadeth
bonjour,

Le mail n'arrive tout simplement pas...

Pour faire cela en une seule requête : j'étais parti du principe du foreach pour identifier via la $valeur.

Tu vois une autre soluce ?

Mega
;)

Posté : 05 mai 2009, 11:08
par Sodams
Utilise le foreach pour créé ta requête.

Une fois la requête créée (et donc le foreach terminé) tu n'as plus l'exécuté.
$mail = 0;

// Création de la requête
$q = "SELECT * FROM utilisateurs WHERE id_utilisateur  in (";
foreach($_POST['cac'] as $key => $value) 
{ 
    // Ajout de l'ID
    $q += $value.",";
} 

// On retire la dernière virgule
$q = substr($q, 0, -1);

// On termine la requête
$q += ");";

$r = mysql_query($q); 
while($row=mysql_fetch_array($r))
{ 
    $destinataire = $row["mail_utilisateur"]; 
    mail("$destinataire","Avis à populous", $_SESSION["log"]. " a posté un message pour vous"); 
    $mail++; 
}

Posté : 05 mai 2009, 11:25
par iclo
Pour ce genre de problème, il faut explorer plusieurs pistes, notamment:
- le mail n'est pas parti
- le mail est bien parti mais fini dans le filtre anti-spam.

Posté : 05 mai 2009, 11:51
par Megadeth
Utilise le foreach pour créé ta requête.

Une fois la requête créée (et donc le foreach terminé) tu n'as plus l'exécuté.
$mail = 0;

// Création de la requête
$q = "SELECT * FROM utilisateurs WHERE id_utilisateur  in (";
foreach($_POST['cac'] as $key => $value) 
{ 
    // Ajout de l'ID
    $q += $value.",";
} 

// On retire la dernière virgule
$q = substr($q, 0, -1);

// On termine la requête
$q += ");";

$r = mysql_query($q); 
while($row=mysql_fetch_array($r))
{ 
    $destinataire = $row["mail_utilisateur"]; 
    mail("$destinataire","Avis à populous", $_SESSION["log"]. " a posté un message pour vous"); 
    $mail++; 
}
Merci d'avoir pris le temps de m'expliquer et même plus (cette approche sql), mais malheureusement j'ai une erreur :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /.../.../.../admin.php on line 79




Modif de 12h25

J'ai changé les += par des .= et l'erreur a disparu mais les mails n'arrivent toujours pas :?



Mega
;)

Posté : 05 mai 2009, 13:09
par D4Y
si tu fais un echo $destinataires dans ta boucle , les adresses emails sont correctes ?

Posté : 05 mai 2009, 13:11
par Sodams

Modif de 12h25

J'ai changé les += par des .= et l'erreur a disparu mais les mails n'arrivent toujours pas :?



Mega
;)
Désolé, ce sont les habitudes du .net :-)

Posté : 05 mai 2009, 13:51
par Megadeth
Désolé, ce sont les habitudes du .net Smile
"désolé" -> Pas de souci tu rigoles, merci beaucoup pour ton apport. J'ai fait aussi quelques heures sur asp.net. ^^
Plus j'avance et plus je me rends compte que j'ai plutôt des lacunes sql...
si tu fais un echo $destinataires dans ta boucle , les adresses emails sont correctes ?
Oui tout à fait, c'est ça le pire, l'echo renvoie bien mes adresses mail. :cry:

Ca viendrait du serveur ? Pourtant je n'ai jamais eu de souci avec ce dernier pour l'envoi de mail...

En fait je reçois les mails vers des adresses en interne mais quand c'est vers l'extérieur ça ne marche plus...

Cordialement,

Mega
;)

Posté : 05 mai 2009, 14:00
par D4Y
je ne pense pas que ca change grand chose mais essaie

mail($destinataire,"test", "test");

Posté : 05 mai 2009, 14:24
par Megadeth
Re,

J'avais déjà fait ce test mais j'ai repris ton exemple et rien.

Sous la ligne du dessous j'ai mis une adresse en interne et ça passe. Je pense maintenant à un problème smtp plutôt qu'autre chose. Je n'ai pas la main sur le serveur et c'est vrai que jusqu'alors je n'avais jamais envoyé de mail autre que vers des boites en interne, sacré paramétrage. J'm'en choppé un admin serveur :twisted:

Vous avez une piste ? Savoir où regarder ? Où taper :lol:

Mega
;)

Posté : 05 mai 2009, 17:12
par AB
Cela vient peut-être du nombre de mail que tu essaies d'envoyer successivement ce qui fait saturer le serveur. Combien de mail au total ?

Posté : 06 mai 2009, 12:06
par Megadeth
3 :lol: