No he probado esto... pero es más o menos a lo que me refiero.
Lo que he hecho primero es calcular todas las variables comunesa todas las páginas y propagarlas en variables de sesión.
Código PHP:
<?php
session_start();
// Identificador del mensaje en la base de datos
$id_msg = 1;
// Cantidad de registros por bloque
$registros_por_bloque = 20; // O sea, se enviarán los mails de 20 en 20
// Determinar el boque actual
if (empty($_GET['bloque'])){
$actual = 1;
}else{
$actual = $_GET['bloque'];
}
// Si es el primer bloque, calculamos todos los parámetros comunes.
if($actual == 1){
// Información sobre el mensaje que se quiere enviar
$sql_msg = "SELECT * FROM mensajes WHERE id_msg = $id_msg";
$msg_result = mysql_query($sql_msg) or die("Error en <b>$sql_msg</b> ::". mysql_error());
if($msg_row = mysql_fetch_assoc($msg_result)){
$_SESSION['msg_asunto'] = $msg_row['msg_asu'];
$_SESSION['msg_mensaje'] = $msg_row['msg_msg'];
$_SESSION['msg_headers'] = "From: ".$msg_row['msg_rnom']." <".$msg_row['msg_rdir'].">\nReply-To: ".$msg_row['msg_rres']."\nMIME-Version: 1.0\nContent-Type: text/plain";
}else{
die("No se hallaron registros para id_msg = $id_msg");
}
// Cantidad de destinatarios activos
$sql_count = "SELECT COUNT(*) FROM lista WHERE lis_act = 1";
$count_result = mysql_query($_sql_count, $link); //cuenta la cantidad de destinatarios
$total_registros = mysql_result($_pagi_count_result, 0);
// Cantidad de "Páginas" o "Bloques"
$_SESSION['total_bloques'] = ceil($total_registros / $registros_por_bloque);
}
// ------------------------------------------------
$inicial = ($actual-1) * $registros_por_bloque;
$sql = "SELECT lis_dir, lis_act FROM lista WHERE lis_act = 1 LIMIT $inicial,$registros_por_bloque";
$result = mysql_query($sql) or die("Error en <b>$sql</b> ::". mysql_error());
while($row = mysql_fetch_assoc($result)){
$destinatario = $row['lis_dir'];
mail($destinatario, $_SESSION['msg_asunto'], $_SESSION['msg_mensaje'], $_SESSION['msg_headers']))
}
// ------------------------------------------------
$bloque_siguiente = $bloque_actual + 1;
if($bloque_siguiente > $_SESSION['total_bloques']){
// Si hay más bloques, pasamos al siguiente.
header("Location : ".$_SERVER['PHP_SELF']."?bloque=$bloque_siguiente");
}else{
// Si no hay más bloques, redireccionamos a otra parte.
header("Location : otra.php");
}
?>
Saludos