Buenas
Estoy enviando mediante un bucle while cientos de correos, cada 10 correos que envio dejo 10 segundos libres con un sleep.
La cuestión es que los correos están todos en una base de datos, hospedada en el mismo server y todo, pero no se por qué puede tardar hasta 10 o 20 segundos en enviar cada correo. (y cada vez creo que tarda más, incluso más de 1 minuto por correo)
Lo he probado en 3 servidores diferentes en 3 hostings distintos, y obtengo el mismo resultado... ¿alguien sabría decir por qué?
El código que uso es este:
Código PHP:
$correos=mysql_query("select correo from correos where estado IN ('1', '2') ");
$contador=1;
echo "Iniciando...";
while($row_correos=mysql_fetch_array($correos)){
echo $contador ."-";
if($contador o/o 10==0){ //no me deja poner el simbolo "por ciento" en el foro :P
echo "Enviados" . $contador; echo '<br>';
sleep(10);
}
$email=$row_correos["correo"];
$clave=$row_correos["clave"];
$sfrom="[email protected]"; //cuenta que envia
$sdestinatario=$email; //cuenta destino
$ssubject="hola"; //subject
$shtml=" mensaje en HTML"; //mensaje
$sheader="From:".$sfrom."\nReply-To:".$sfrom."\n";
$sheader=$sheader."X-Mailer:PHP/".phpversion()."\n";
$sheader=$sheader."Mime-Version: 1.0\n";
$sheader=$sheader."Content-Type: text/html";
mail($sdestinatario,$ssubject,$shtml,$sheader);
$contador++;
}
echo "Todos han sido enviados. Total: " . $contador ;
Como dato curioso puedo decir que al ir imprimiendo por pantalla el estado del $contador (con el echo que he dejado en el código fuente) cuando llega a más de 10, imprime el 11 así: 11- , luego le tocaría imprimir el 12 del mismo modo: 12- , pero en lugar de eso imprime primero el número 1 y tras 3 o 4 segundos imprime el 2 y la barra(-) quedando finalmente "12-" como debería haberlo hecho desde el comienzo de una sola tirada.
Y lo mismo pasa al imprimir "Enviados", primero imprime "Envia" después de 3 o 4 segundos "dos" quedando así "Enviados" y luego el número.