mi pare che devi incrementare anche il contatore e non solo l'indice.

E comunque bisogna vedere se il tuo hosting permette di dettare il time limit.
io ho messo 30 secondi che ricominciano a scorrere ogni volta che reimposti il time limit.

Per alcuni clienti su aruba linux condiviso ti dico per certo che il set_time_limit e questo metodo di invio non sono riuscito a utilizzarlo, ma ho elaborato una soluzione semplicissima.

io in ogni caso, ad ogni giro del while() faccio anche una query sul record così
dispongo di un controllo sugli invii :
Codice PHP:
mysql_query("UPDATE iscritti  SET inviato=1 WHERE id_iscritto=$id_iscritto"); 
poi sempre nel while tipo come hai fatto tu refresho la pagina
Codice PHP:
if ($contatore==10) {
header("Refresh: 5; url=send.php?id_newsletter=".$id_newsletter); 
exit;

- $id_newsletter mi server per recuperare il contenuto della newsletter che voglio inviare
- naturalmente la query principale che tira fuori gli iscritti la faccio con qualcosa tipo
Codice PHP:
"SELECT * from iscritti where inviato=0" 
così ad ogni refresh tiro fuori solo quelli che mi servono