Bè, a parer mio la soluzione migliore è procedere all'invio delle mail una per una.
Se utilizzi bene i sistemi di annullamento degli errori (ad es se usi "mail" mettici una chiocciola davanti) dovresti riuscire a catturare eventuali errori di invio per poi gestirli come meglio credi... ad esempio visualizzare un report delle mail inviate e no.
In secondo luogo ti ricordo che uno script php ha in media 30 secondi di vita... dopo di che oltre a bloccarsi, sfido l'utente più paziente ad aspettare il caricamento della pagina!
Dovresti spezzare la procedura di invio in + step in cui si inviano un numero x di mail.
Io ho affrontato il problema un paio di settimane fa. La mia soluzione è stata:
1) inviare la prima mail e calcolare quanto tempo ci mette.
2) calcolare in base al tempo trascorso (di esecuzione) quante mail posso inviare al max in 30 secondi di tempo limite.
3) inviare tutte le mail possibili.
4) ripetere il procedimento in più step.
In questo modo sei anche sicuro di ottimizzare al meglio il carico dello script in base alle condizioni della rete in tempo reale.
Se hai bisogno di soluzioni contattami, ciao!

Rispondi quotando