Bonjour,
j'ai créé pour un client un système de newsletter intégré dans un back-office développé sous CodeIgniter (le moteur de la newsletter est en PHP/MySQL de mon cru et n'utilise pas les outils de CodeIgniter).
Mon client a récemment changé ses serveurs (moins "tolérants" que les précédents sur la charge), et a injecté de nouveaux destinataires dans la base de données. La newsletter doit être envoyée à plus de 20000 personnes à présent. Sur la dernière campagne, la majorité des newsletter n'est jamais arrivée... Mea culpa, tous les mails étaient envoyés en une fois (il y avait peu de destinataires à la base).
Je viens réécrire mon script (qui utilise la fonction mail()) qui permet d'envoyer par vagues de 200 destinataires et de générer un rapport d'erreur.
En gros, le déroulement est :
- requêtes MySQL pour récupérer tous les destinataires ;
- enregistrement des e-mails dans un tableau PHP ;
- comptage des enregistrements ;
- boucle sur les enregistrements : le script récupère 200 abonnés, envoie la newsletter, et si la fonction mail() ne renvoit pas TRUE, le script écrit dans un fichier quels sont les mails concernés.
Quand je valide l'envoi (test sur 8200 abonnés), le navigateur se met à mouliner le temps de l'exécution du script, et fini par n'atterrir nulle part, même si je reçois quand même une partie des newsletters (environ 3000).
Mes questions :
1. comment faire pour qu'on puisse valider la page d'envoi, et que le script s'exécute sur le serveur, de son côté, indépendemment du navigateur (et donc sans bloquer celui-ci) ?
2. si je veux faire une pause entre chaque vague d'envoi, est-il correct d'utiliser sleep() ?
Je vais me tourner vers une soution éprouvée d'e-mailing pour les prochaines campagnes, mais là, je dois impérativement trouver une soution très rapide, avant ce soir...
Merci d'avance pour vos réponses !
Partager