envoi d'emails en masse et pause avec sleep ou usleep
17 messages
• Page 1 sur 2 • 1, 2
-

oli004 - WRInaute passionné

- Messages: 2173
- Inscription: 5 Jan 2005
envoi d'emails en masse et pause avec sleep ou usleep
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é.
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 passionné

- Messages: 1025
- Inscription: 21 Juil 2003
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+
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 passionné

- Messages: 2173
- Inscription: 5 Jan 2005
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?
-

oli004 - WRInaute passionné

- Messages: 2173
- Inscription: 5 Jan 2005
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 passionné

- Messages: 1025
- Inscription: 21 Juil 2003
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 :
N'oublie pas d'incrémenter le $j
A+
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 passionné

- Messages: 2173
- Inscription: 5 Jan 2005
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();
?>
-

bproductiv - WRInaute accro

- Messages: 4173
- Inscription: 27 Déc 2004
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 !
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 !
-

webmasterlamogere - WRInaute passionné

- Messages: 1874
- Inscription: 17 Déc 2006
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.
-

mahefarivony - WRInaute accro

- Messages: 11405
- Inscription: 14 Oct 2002
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
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 passionné

- Messages: 2173
- Inscription: 5 Jan 2005
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.
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.
17 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- Envoi d'email en masse?
- Envoi Newsletter de masse
- envoi en masse de mail regulier !!!
- Bonnes pratiques envoi de mails en masse
- Envoi d'e-mails en masse : accents, oui/non ?
- Souci envoi emails sur wanadoo (je suis chez 1and1)
- probleme emails test des emails en php échoué. Explication??
- mysql sleep
- hebergeur avec :set_time_limit et sleep commands
- Processus "Sleep" dans mon serveur dédié qui appraissent tout le temps
- Algorithme de détection du link spam de masse - 09-11-2005
- Parts de marché des moteurs en France (Novembre 2008) - 10-12-2008
- Google Developer Day 2007 : à Paris et dans 9 autres villes - 27-05-2007
- Historique des recherches dans Google News - 11-11-2005
- Google dépose 2 brevets pour AdSense - 26-03-2004
- WebRankInfo interroge Google sur AdSense - 18-04-2004
- Gmail, le service de mail de Google, sorti le 1er avril 2004 - 15-04-2004
Consultez la description détaillée des produits ou services de Google suivants : Google Voice
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

