Si enviaremos mas de 200 correos es recomendable enviar los correos en lotes de aprox. 20 correos y crear una pausa entre cada lote. De esta forma los correos llegaran a correo deseado mas facil y no llegaremos al limite de nuestro proveedor de hosting con lo cual significaria en muchos casos perder correos.
El siguiente ejemplo en PHP, envia 20 emails, espera 15 segundos y recarga la pagina para enviar los siguientes 20 correos. Para el ejemplo utilizaremos una tabla con usuario, email y cantidad de visitas. En el ejemplo no se incluiran conexiones a la base de datos.
ini_set("memory_limit","256M");
ini_set ( 'max_execution_time', 1200);
$TAMANO_PAGINA = 20;
$pagina = $_GET["pagina"];
if (!$pagina) {
$inicio = 0;
$pagina=0;
}
else {
$inicio = ($pagina) * $TAMANO_PAGINA;
}
$db->cargar_sql("select * from usuarios");
$rs_usuarios=$db->cargar_avisos();
$num_total_registros=count($rs_usuarios);
$total_paginas = ceil($num_total_registros / $TAMANO_PAGINA);
$db->cargar_sql("select * from rs_usuarios limit " . $inicio . "," . $TAMANO_PAGINA);
$rs_usuarios=$db->cargar_avisos();
foreach ($rs_usuarios as $usuario){
$email_destino=$usuario->email;
$visitas=$usuario->visitas;
$asunto="Esta semana vieron tu articulo " . $visitas . ' usuarios';
$mensaje="Estadisticas detalladas sobre visitas <br> Visitantes durante la ultima semana: " . $visitas;
enviarcorreo($email_destino, $asunto, $mensaje);
}
if ($inicio<=$num_total_registros){
$pagina=$pagina+1;
printf('<META HTTP-EQUIV="Refresh" CONTENT="15; URL=enviar.php?pagina=' . $pagina . '&total=' . $num_total_registros . '&ini=' . $inicio .'">');
}
En el ejemplo se utilizan 2 consultas mysql que podrian reemplazarse por una sola y cambiar foreach por for
Si modificamos la consulta y el contenido del foreach este script nos podria servir como importante herramienta para administrar nuestros sitios web. Por ejemplo podriamos realizar miniaturas con GD de miles de imagenes en lotes de 100 para no saturar el servidor ni ejecutar scripts durante mas de 2 minutos. De igual forma podriamos mover todas las imagenes de un directorio a otro en lotes. Podriamos generar informacion(obtener facturas, generar cupones de pago, etc) o imagenes de sitios externos en pequeños lotes.