Ti conviene mandare solo tot mail alla volta, limitando la query con il llimit. Un refresh automatico alla pagina di invio proseguirà dall'ultimo valore inviato (memorizzando questo "puntatore" nel database e richiamandolo quando viene caricata la pagina). In questo modo puoi anche sospendere l'invio e proseguire in un secondo momento l'invio delle mail... o fermarsi in caso di errore nell'invio ecc ecc ecc

Questo è solo il principio, è semplice e garantisce di poter spedire un numero praticamente illimitato di mail... lo uso da tempo e non ho mai avuto problemi...