Si tienes los emails en la BD puedes crear, cada vez que hagas un mailing, una tabla que contenga todos los emails y un campo booleano "enviado". Haces algo así como:
Código PHP:
function ronda() {
$x = 100; //Número de emails por cada ronda
$espera = 100; //Segundos entre ronda y ronda
//Obtiene las direcciones pendientes
$pendientes = mysql_query("SELECT email FROM cola_mailing WHERE enviado = 0 LIMIT x");
//Para cada dirección, envía el email y guarda la dirección como despachada
while ($direccion = mysql_fetch_assoc($pendientes)) {
if (mail("Asunto", $direccion['email']...)) {
$q_enviado = mysql_query("UPDATE cola_mailing SET enviado = 1 WHERE email = '" . $direccion['email'] . "'");
}
}
//Revisa si quedan emails por enviar
$consulta = mysql_query("SELECT email FROM cola_mailing WHERE enviado = 0 LIMIT x")
if (!mysql_num_rows($consulta)) {
//Si quedan emails por enviar, espera $espera segundos para no saturar el servidor y vuelve a ejecutar la función
sleep(100);
ronda();
}
}
No lo he probado así que puede fallar. De todos modos espero que te sea útil. Saludos!