bueno si quieres te presento el colmo de la cutrez...
pero puede funcionar, por aportar algo mas
algo asi
for ($a=$origen; ($a<=origen+10) && ($a<=$total); $a++){
$mail = (el que corresponda);
mail(lo que sea);
}
if ($a < $total){
echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"1;URL=mail.php?origen=mail.php&origen=".origen+10."\">";
echo "Enviando mensaje ".$origen." de ".$total;
} else {
echo "Enviados ".$total." mensajes";
}
ma o meno, creo que se puede entender lo que digo si no, me explico un poco por encima:
mail.php (que sería este script) recibiría un número de origen (si no existiese se debería asignar a un valor inicial como 0 o como 1, como lo veas) y el for envia 10 mensajes empezando con el destinatario con una id de correo a enviar correspondiente al origen
cuando llegase al decimo actualizaria poniendo el origen en 10 mas de lo que tenías (ponlo a tu gusto) y seguiria y volvería a actualizar, asi hasta que se acaben
visualmente te enteras mas de lo que está haciendo y el progreso que lleva pero a la vez pierde tiempo recargando página, aunque lo bueno es que así puedes evitar mucho el tener un timeout no deseado.
Lo del mail_queue que han puesto, aunque no lo he probado, también puede ser interesante