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! 
