Salve a tutti!
Mi sto sbattendo da tempo con un problema, ma non riesco a venirne a capo. Spero qualcuno possa aiutarmi.
Il problema riguarda l'invio automatizzato di migliaia di email.
Entro nel dettaglio: ho scritto un CMS per un azienda cliente, che include tra le centinaia di funzionalità anche l'invio di email a certe mailing list. Non si tratta di vere e proprie newsletter, badate bene, ma di elenchi di loro clienti che ricevono delle e-mail informative su particolari prodotti o clienti. La registrazione dei destinatari avviene in altra sede e l'azienda non vuole utilizzare sistemi come phplist etc che richiedono ulteriori registrazioni e sono difficilmente integrabili col sistema sviluppato ad hoc per loro.
Ora, in estrema sintesi il sistema attuale funziona così:
1) Composizione dell'email mediante template o ex novo, con campi variabili che andranno completati con i dati prelevati da un db per personalizzare l'email (FATTO)
2) Scheduling dell'invio dell'e-mailing (FATTO)
3) Invio delle migliaia di email (FATTO A META'...)
Avviso che sono in hosting su Aruba su piattaforma LAMP (Linux Apache Mysql) è che mi trovo benissimo così...
Il problema del punto 3) è questo: pochi destinatari, tutto ok; lancio da cron uno script php una volta al giorno che legge dal db se ci sono e-mail da inviare, sostituisce i campi variabil e esegue l'invio.
Molti indirizzi email (3-5000): naturalmente lo script va in timeout. E se non ci va lo script, ci va il server.
Attualmente il problema è risolto così: l'invio delle email viene avviato a mano chiamando lo script dal browser: due pagine php si chiamano vicendevolmente ed eseguono l'invio (questo per evitare che il timeout delle pagine blocchi l'invio di migliaia di email). Se la procedura si blocca per un qualsiasi motivo (che viene riportato a video), basta richiamare nuovamente lo script e si continua.
Vorrei automatizzare questa procedura,cioè l'avvio degli script in automatico, ma non ho idea di come risolvere il problema.
Non posso chiamare da cron un solo script che esegua l'invio, perchè il tempo di esecuzione supererà i 30 secondi di sicuro... e se scrivo due script che si richiamano ma non danno output a video il server li blocca credendolo un loop infinito.
Possibili soluzioni:
- chiamare lo script a intervalli regolari da cron (tipo ogni 10 minuti) per un numero limitato di email (un centinaio?), per essere sicuro che non si blocchi per il timeout... in questo modo posso automatizzare l'invio... ma non mi sembra una soluzione molto elegante...![]()
- impostare una operazione pianificata ad intervalli regolari in windows dal cliente che apra una finestra del browser richiamando lo script... ancora peggio!!!![]()
Suggerimenti?
Grazie