DrAgOnLORdS
Messages postés24Date d'inscriptionsamedi 21 juin 2003StatutMembreDernière intervention24 mars 2008
-
19 janv. 2006 à 15:48
franc666
Messages postés3Date d'inscriptionmercredi 26 novembre 2003StatutMembreDernière intervention26 janvier 2006
-
26 janv. 2006 à 00:46
Bonjour tout le monde,
J'ai fait des recherches sur le sujet mais rien trouvé de très concret ...
lors de l'envoie d'une newsletter je reçois le message d'erreur decrit dans le titre ...
je sais que c'est le delai imparti pour l'execution du script cote server ...
le probleme, c'est qu'il faut que j'envoie ces mails ...
je recupere selon le choix de l'admin (groupe et / ou utilisateur seul) les adresses mail dans un tableau, sur lequel j'effectue
soit un foreach
soit un while
dans les deux cas j'envoie le mail dans la boucle mais trop long je depasse le temps permis par le serveur ...
J'ai lu qu'on pouvait utiliser set_time_limit() mais tout les serveurs ne le permettent pas ...
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 19 janv. 2006 à 17:36
On peut aussi utiliser la bufferisation de sortie. Y a un exemple sympa (à retravailler) sur php.net, ça doit être dans ob_flush() ou dans ce coin-là en tous cas.
DrAgOnLORdS
Messages postés24Date d'inscriptionsamedi 21 juin 2003StatutMembreDernière intervention24 mars 2008 19 janv. 2006 à 18:40
sidf -> si tu n'as pas accès au php.ini c'est la panade ...
FhX -> j'ai lu pas mal de truc sur ce moyen de faire, mon probleme a ce niveau c'est que je ne sais pas du tout comment recharger la page apres l'envoie des 100 premiers mail pour ensuite envoiyer les 100 suivant ....
malalam -> j'ai essaye flush() et ob_flush() -> marche pas ... ou alors m'y suis mal pris ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 19 janv. 2006 à 19:28
Salut,
Malalam > ça fonctionnera pas mieux la bufferisation :-( c'est la fonction mail() qui bride ici (ou plutôt le serveur smtp).
En gros t'es obligé de : mettre le max_execution_time à zéro ou alors de passer par un envoi de paquets de mails (100 par exemple). Pour faire ça il te faut un id unique sur ta table ou alors un champ supplémentaire qui indiquera si oui ou non le mail est envoyé (un peu moins optimisé surtout si ta table n'a a beaucoup d'enregistrements).
Bref lorsque tu actualises (ça se fait automatiquement en php via un header('location:....) ou encore un header('refresh...
bref en input type="hidden" tu mets l'id de départ et d'arrivée, lorsque les mails sont envoyés tu incrémentes de 100 ces id et ça te donne les 100 prochains id à sélectionner (enfin la plage d'id). Et hop c'est torché ensuite.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 20 janv. 2006 à 07:35
sisi, avec la bufferisation c'est faisable : faut envoyer un caractère à la sortie tous les x mails. Un peu comme une barre de progress, quoi.
mais l'envoi groupé est aussi bien hein lol.
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 20 janv. 2006 à 18:46
étapes à suivre :
afficher le formulaire une première fois, ensuite tu rentres tes infos que tu gardes en session par exemple, et tu fais des refresh en indiquant en session l'id de départ et d'arrivée, que tu incrémenteras à chaque refresh du nombre de messages envoyés.
franc666
Messages postés3Date d'inscriptionmercredi 26 novembre 2003StatutMembreDernière intervention26 janvier 2006 26 janv. 2006 à 00:46
Yop !
J'ai déjà eu le soucis
Voici ce que j'ai fais
J'ai une premiere page qui contient les infos de la newsletter à envoyer (l'admin choisi les options de la newsletter donc)
Ensuite quand il soumet la requête :
- creation d'une table avec le contenu de la requête que l'on nommera "temp_news"
- creation d'une table avec les paramètres de la newsletter (par exemple : le header from, le header reply-to, nombre total de lignes, nombre d'email à traiter par envoi (50 ou 100 c'est bien mais ça depend aussi de la taille de l'envoi)... etc) que l'on nommera "temp_param"
- ouverture du script php qui va envoyer les emails (dans un popup, dans une autre page, dans un iframe ou meme dans la meme page mais c'est pas du joli !)
Ce qui se passe dans le fichier qui envoye les emails :
1) On fait une requête sur les tables "temp_param" pour récupérer les paramètres de la newsletter et "temp_news" que l'on vient de créer qui va recuperer x lignes (définit par le nombre d'email à traiter par envoi) de la table (on utilise LIMIT pour ça bien sur)
2) Là on envoye l'e-mail défini dans la table dans le champ email (par exemple) pour chaque ligne,
3) Ensuite on efface les x lignes à qui on a envoyé les emails...
4) Là on rafraichit la page
Le script va maintenant repeter le processus indéfiniment...
Bien sur il faut qu'il s'arrete ! Il faut simplement mettre une condition au rafraichissement de la page
Par exemple un petit SELECT COUNT(*) ? et si le resultat de cette requête vaut 0 alors le processus d'envoi est terminée on n'a plus qu'a afficher un message "Bravo tout est envoyé" et surtout aussi on supprime les 2 tables qu'on a crée, puisqu'on a terminé l'envoi...
Voilà comment segmenter un envoi d'email en masse sans se prendre la tete pour savoir si le script fonctionne sur tel ou tel serveur...
Je vous conseille aussi de supprimer ligne par ligne (meme si ça bouffe plus de ressources) comme ça si la connexion plante il suffit de relancer le script d'envoi pour reprendre l'envoi où il en était sans avoir perdu d'email et sans envoyer 2 fois le meme email à quelqu'un...