envois de mails par paquet

cdavid
Invité n'ayant pas de compte PHPfrance

29 mai 2009, 17:22

Bonjour

je suis un véritable novice en php je bidouille comme on dit

j'ai un site avec une base mail de plus de 120 000 qui ont coché souhaité recevoir la newsletter
mon problème que d'une part je suis sur un mutualisé et de plus vu le nombre de membre on oublis l'envois macif d'autre par j'ai essayé de codé deux trois truc mes je suis une vrai bille

Donc y aurai t'il quelqu'un qui pourrais m'aidé il faut que je puisse récupéré les emails dans ma db puis pouvoir les envoyé par paquet avec un interval de x temps entre chaque et que ma nl puisse étre en html

et non des moindre que la personne soit patiente parce quand général je suis long a comprendre

merci d'avance

ViPHP
ViPHP | 2291 Messages

29 mai 2009, 17:34

ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Invité
Invité n'ayant pas de compte PHPfrance

29 mai 2009, 17:55

merci cette explication est intérréssante même si je bloque encore sur certaine chose mes j'essai de comprendre

cdavid
Invité n'ayant pas de compte PHPfrance

29 mai 2009, 18:02

alors j'ai modifier mon nombre de paquet par envois le temps de pause entre chaque
j'aurais plus qu'a rajouté mon fichier avec mes info pour la connexion a la db

mes voila mes 2 questions
1.pourquoi mon texte BLABLABLA fais une erreur
2.comment je fais pour validé

Bon soyé gentil vous moquez pas

Code : Tout sélectionner

<?php /********** CONSTANTES *********/ /* * Nombre de mails par paquet */ define('MAILS_PAQUET', 500); /* * Pause entre chaque paquet */ define('PAUSE', 30); /********** FIN CONSTANTES *********/ /* * Fonction d'envoi des mails * Reçoie en paramètre la requête, et la pause * Construit les mail et les envoi */ function sendMail($qry, $pause){ $res = mysql_query($qry) or die('ERR_SQL :<br />' . $qry . '<br />' . mysql_error()); /*** Récupération des résultats ***/ while($mail = mysql_fetch_array($res)){ BLABLABLA } if($pause) sleep($pause); } /* * Compter le nombre de mails à envoyer */ $qryNombre = "SELECT COUNT(*) FROM T_membre WHERE newsletter='1'"; $resultQryNbr = mysql_query($qryNombre) || die('ERR_SQL :<br />' . $qryNombre . '<br />' . mysql_error()); $nbrMails = mysql_result($resultQryNbr, 0, 0); /* * Nombre de boucles à faire */ $nbrBoucles = floor($nbrMails/MAILS_PAQUET); echo 'Mails = ' . $nbrMails . ' Nombre boucles = ' . $nbrBoucles . '<br />'; // pour debugg /* * Nombre de mails restant après les boucles */ $mailsRestants = $nbrMails - $nbrBoucles * MAILS_PAQUET; echo 'Reste = ' . $mailsRestants . '<br />'; // pour debugg /* * Requête générale */ $qryMails = "SELECT email,pseudo FROM mbre WHERE newsletter='oui' LIMIT "; /* * Boucle d'envoie par paquet */ for($i = 0; $i < $nbrBoucles; $i++){ // Construction de la requête en fonction du Nº de paquet $qryBoucle = $qryMails . ($i * MAILS_PAQUET) . ', ' . MAILS_PAQUET; echo '<h3>' . $qryBoucle . '</h3>'; // pour debugg sendMail($qryBoucle, PAUSE); } /* * Construction de la requête pour les mails restant après le dernier paquet */ $qryMailsRestants = $qryMails . ($i * MAILS_PAQUET) . ', ' . $mailsRestants; echo '<h3>' . $qryMailsRestants . '</h3>'; // pour debugg sendMail($qryMailsRestants, false); ?>

cdavid
Invité n'ayant pas de compte PHPfrance

29 mai 2009, 18:02

alors j'ai modifier mon nombre de paquet par envois le temps de pause entre chaque
j'aurais plus qu'a rajouté mon fichier avec mes info pour la connexion a la db

mes voila mes 2 questions
1.pourquoi mon texte BLABLABLA fais une erreur
2.comment je fais pour validé

Bon soyé gentil vous moquez pas

Code : Tout sélectionner

<?php /********** CONSTANTES *********/ /* * Nombre de mails par paquet */ define('MAILS_PAQUET', 500); /* * Pause entre chaque paquet */ define('PAUSE', 30); /********** FIN CONSTANTES *********/ /* * Fonction d'envoi des mails * Reçoie en paramètre la requête, et la pause * Construit les mail et les envoi */ function sendMail($qry, $pause){ $res = mysql_query($qry) or die('ERR_SQL :<br />' . $qry . '<br />' . mysql_error()); /*** Récupération des résultats ***/ while($mail = mysql_fetch_array($res)){ BLABLABLA } if($pause) sleep($pause); } /* * Compter le nombre de mails à envoyer */ $qryNombre = "SELECT COUNT(*) FROM T_membre WHERE newsletter='1'"; $resultQryNbr = mysql_query($qryNombre) || die('ERR_SQL :<br />' . $qryNombre . '<br />' . mysql_error()); $nbrMails = mysql_result($resultQryNbr, 0, 0); /* * Nombre de boucles à faire */ $nbrBoucles = floor($nbrMails/MAILS_PAQUET); echo 'Mails = ' . $nbrMails . ' Nombre boucles = ' . $nbrBoucles . '<br />'; // pour debugg /* * Nombre de mails restant après les boucles */ $mailsRestants = $nbrMails - $nbrBoucles * MAILS_PAQUET; echo 'Reste = ' . $mailsRestants . '<br />'; // pour debugg /* * Requête générale */ $qryMails = "SELECT email,pseudo FROM mbre WHERE newsletter='oui' LIMIT "; /* * Boucle d'envoie par paquet */ for($i = 0; $i < $nbrBoucles; $i++){ // Construction de la requête en fonction du Nº de paquet $qryBoucle = $qryMails . ($i * MAILS_PAQUET) . ', ' . MAILS_PAQUET; echo '<h3>' . $qryBoucle . '</h3>'; // pour debugg sendMail($qryBoucle, PAUSE); } /* * Construction de la requête pour les mails restant après le dernier paquet */ $qryMailsRestants = $qryMails . ($i * MAILS_PAQUET) . ', ' . $mailsRestants; echo '<h3>' . $qryMailsRestants . '</h3>'; // pour debugg sendMail($qryMailsRestants, false); ?>

Eléphant du PHP | 245 Messages

29 mai 2009, 19:20

Ce que je ferai, c'est :
1) installer un serveur smtp sur mon serveur de developpement,
2) Recuperer le sadresses email dans un fichier text ou csv
3) Envoyer les mails d'un block depuis mon serveur de dev.

après tout, le plus important est de récuperer une base de mails.

ViPHP
AB
ViPHP | 5818 Messages

30 mai 2009, 08:24

Attention avec sleep(), cette fonction n'est pas prise en compte dans le temps d'exécution du script PHP et cela ne remet pas le compteur à zéro. C'est à dire que si le temps d'exécution maximal est à trente seconde, mettre un sleep ne changera rien sur ce point.