envoi d'emails en masse et pause avec sleep ou usleep

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


oli004
WRInaute accro
WRInaute accro
 
Messages: 2162
Inscription: Mer Jan 05, 2005 23:53

envoi d'emails en masse et pause avec sleep ou usleep

Message le Jeu Nov 29, 2007 3:40

Bonjour,

Je dois faire un emailing vers plus de 5000 adresses contenues dans une bdd.

Mon script d'envoi fonctionne car testé avec une dizaine d'adresse, mais avant de balancer la base complète, je ne sais pas si il est préféreble de séparer la base pour faire plusieurs paquets et envoyer par exemple par paquet de 200 ou bien envoyer le tout et mettre un simple sleep (2) dans ma boucle while pour faire une pause de 2 secondes entre chaque envoi de mail.

Qu'en pensez vous ?

personellement, je préfère la solution du sleep pour la facilité.

Sir Dipp
WRInaute accro
WRInaute accro
 
Messages: 1025
Inscription: Lun Juil 21, 2003 17:53

Message le Jeu Nov 29, 2007 7:57

Salut,

Je pense pas que ce soit une bonne idée. Normalement, tu peux tout envoyer en paquet sans te soucier d'un problème.

Imagine que tu fasses un sleep de 2 secondes après chaque envoi et prenons en compte que pour envoyer un e-mail cela prenne que 0.001 secondes, voici un simple calcul :

((5000*2.001)/60)/60) = 2h, donc est-ce que ton script peut tourner 2 heurs sur ton hébergement ?

A+


oli004
WRInaute accro
WRInaute accro
 
Messages: 2162
Inscription: Mer Jan 05, 2005 23:53

Message le Jeu Nov 29, 2007 10:55

donc est-ce que ton script peut tourner 2 heurs sur ton hébergement ?


C'est sur un dédié donc, j'imagine que c'est possible, mais cela risque peut etre de faire aboyer un chien de garde.

Bon, admettons que je laisse tomber la solutiin du sleep dans la boucle, comment puis-je séparer automatiquement la base en paquets ?

Je ne maitrise pas assez mysql pour être sur de mon coup, peut-être avez-vous des bouts de scripts tout fait pour ce genre de manip?

Sir Dipp
WRInaute accro
WRInaute accro
 
Messages: 1025
Inscription: Lun Juil 21, 2003 17:53

Message le Jeu Nov 29, 2007 10:58

La question que je me pose c'est : pourquoi spliter ta base ? Ou est le problème d'envoyer le tout en paquet ?

A+


oli004
WRInaute accro
WRInaute accro
 
Messages: 2162
Inscription: Mer Jan 05, 2005 23:53

Message le Jeu Nov 29, 2007 11:09

La question que je me pose c'est : pourquoi spliter ta base ? Ou est le problème d'envoyer le tout en paquet ?


Je ne sais pas, peut-être que je crains un probleme, par exemple en utilisant trop de ressource cpu, ou que sais-je.

C'est la première fois que j'ai à traiter ce genre de demande donc, je préfère m'appuyer sur des gens qui ont de l'expérience dans ce genre de manip.

actuellement je fait de manière simple :

Code: Tout sélectionner
$req=mysql_query("SELECT email FROM liste");
$res=mysql_numrows($req);
$i=0;
while($i!=$res) {
   $email=mysql_result($req,$i,"email");
   mail($email,$_POST['sujet'],$_POST['news'],$headers);
    $i++;
}
mysql_close();
?>


ça tourne bien pour une dizaine de mails mais est-ce que je peux lancer la même chose si la base contient 5000 adresses sans risque ?

Sir Dipp
WRInaute accro
WRInaute accro
 
Messages: 1025
Inscription: Lun Juil 21, 2003 17:53

Message le Jeu Nov 29, 2007 11:21

Si tu veux laisser souffler le serveur de temps en temps, ce que tu peux faire c'est tous les 200 e-mails envoyé tu fais un sleep de 2-3 secondes.

Dans le cas de ton code tu devrais faire un $j = 0; avant le while et mettre une condition du genre :

Code: Tout sélectionner
if($j => 200){ sleep(2); $j = 0;}


N'oublie pas d'incrémenter le $j

A+


oli004
WRInaute accro
WRInaute accro
 
Messages: 2162
Inscription: Mer Jan 05, 2005 23:53

Message le Jeu Nov 29, 2007 11:54

merci Sir Dipp pour ta suggestion, je teste

Code: Tout sélectionner
<?
$req=mysql_query("SELECT email FROM liste");
$res=mysql_numrows($req);
$i=0;
$j=0;
while($i!=$res) {

   if($j => 200){
   sleep(2); $j = 0;}

   $email=mysql_result($req,$i,"email");
   mail($email,$_POST['sujet'],$_POST['news'],$headers);
    $i++;
   $j++;
}
mysql_close();
?>


oli004
WRInaute accro
WRInaute accro
 
Messages: 2162
Inscription: Mer Jan 05, 2005 23:53

Message le Jeu Nov 29, 2007 12:34

Bon, et bien cela ne semble pas fonctionner, pourtant ça semble simple, mais si je mets le if je n'ai pas d'emails qui partent. :(


bproductiv
WRInaute accro
WRInaute accro
 
Messages: 2853
Inscription: Lun Déc 27, 2004 16:29

Message le Jeu Nov 29, 2007 12:48

if($j => 200)
si J est supérieur ou égal a 200, ca tique pas là?? il commence à 0 et tu l'incrémente dans cette boucle alors ca risque pas de démarrer !


oli004
WRInaute accro
WRInaute accro
 
Messages: 2162
Inscription: Mer Jan 05, 2005 23:53

Message le Jeu Nov 29, 2007 13:01

:roll:
le if se ferme avant d'envoyer les mails, il ne sert qu'à faire une pause dans la boucle non ?


bproductiv
WRInaute accro
WRInaute accro
 
Messages: 2853
Inscription: Lun Déc 27, 2004 16:29

Message le Jeu Nov 29, 2007 13:04

Oooops, méa culpa..pardon


webmasterlamogere
WRInaute accro
WRInaute accro
 
Messages: 1874
Inscription: Dim Déc 17, 2006 21:08

Message le Jeu Nov 29, 2007 13:12

Je ferais un traitement qui envoi X mails avec l'option LIMIT dans le SELECT et qui met un flag "traité" dans la table des emails. Ensuite un petit cron qui se lance tous les X minutes.


rog
WRInaute accro
WRInaute accro
 
Messages: 1662
Inscription: Jeu Sep 21, 2006 2:32

Message le Jeu Nov 29, 2007 13:13

tu fais un sleep de 20 secondes
puis tu en envoies 20 et tu mets une redirection avec l'id du dernier mail envoyé en parametre

rog


mahefarivony
WRInaute accro
WRInaute accro
 
Messages: 11405
Inscription: Lun Oct 14, 2002 10:00

Message le Jeu Nov 29, 2007 13:23

les sleep ont toujours généré des doublons (voire meme plus) chez moi :-)

C'est webmasterlamogere qui a donné la meilleure solution...

Ah oui, a la question de savoir pourquoi pas tout envoyer d'un bloc ? C'est sans doute le meilleur moyen de se faire blacklister par les serveurs de mail :-)


oli004
WRInaute accro
WRInaute accro
 
Messages: 2162
Inscription: Mer Jan 05, 2005 23:53

Message le Jeu Nov 29, 2007 13:36

oui mahefarivony, je suis tomber au cours de mes recherches sur un topic que tu avais lancé à ce sujet.
C'est pour ça que j'hésitais sur la solution du sleep

La solution du cron m'inspirais déja mieux, mais n'ayant utilisé ce service jusque là, je crains de pinailler pendant des heures avant de faire fonctionner correctement le système.

envoi d'emails en masse et pause avec sleep ou usleep

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités