Ho realizzato uno semplice script per una newsletter così strutturato:
1) prendo i dati della newsletter dal database e compongo il messaggio in formato html e testo
2) Attraverso un ciclo while estraggo gli utenti della newsletter dal database e invio una email alla volta.
3) in pseudocodice ecco il ciclo while
Codice PHP:
while ($iscritto = mysql_fetch_array($result)) {
set_time_limit(30); // a ogni ciclo reimposto il tempo di esecuzione dello script
// qui va il codice di invio email del messaggio
usleep(500000); // aspetto mezzo secondo prima del nuovo ciclo
}
// qui va il messaggio di conferma di fine esecuzione dello script
attraverso set_time_limit() reimposto a ogni ciclo il tempo di esecuzione dello script che altrimenti andrebbe in timeout nel caso impiegasse più tempo di 30 sec ad eseguirsi. con usleep() posso ritardare di tot secondi l'invio dell'email per non intasare il server di posta.
Sto testando con circa 2000 indirizzi e sembra funzionare bene, a patto di non chiudere la pagina di invio finchè il processo non è terminato. il problema è che al termine dell'esecuzione lo script mi dovrebbe visualizzare il messaggio di conferma, invece mi rimane freezata la pagina di invio, pur avendo portato a termine correttamente l'invio delle 2000 email.
p.s.
So che questa operazione sarebbe stato meglio svolgerla in background, ma proprio non mi trovo con shell e cronjob, e non sono riuscito ad usare exec(), che inoltre mi pare di aver capito non accetta il passaggio di parametri in get o post, ma solo da shell.