Page 1 sur 1
envois de mails par paquet
Posté : 29 mai 2009, 17:22
par cdavid
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
Posté : 29 mai 2009, 17:34
par dunbar
Posté : 29 mai 2009, 17:55
par Invité
merci cette explication est intérréssante même si je bloque encore sur certaine chose mes j'essai de comprendre
Posté : 29 mai 2009, 18:02
par cdavid
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);
?>
Posté : 29 mai 2009, 18:02
par cdavid
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);
?>
Posté : 29 mai 2009, 19:20
par enneite
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.
Posté : 30 mai 2009, 08:24
par AB
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.