Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/05/2005, 12:53
Avatar de nachopro
nachopro
 
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 5 meses
Puntos: 2
problemas con while (newsletter)

Hola, cómo están?

Bueno, cuando no yo con dudas, eh?

Paso a contarles: He diseñado un lindo sistema de lista de noticias, o newsletter, en PHP y funciona así:
De un formulario con datos el mensaje que quiero enviar se aloja en un registro de la tabla "mensajes".
Luego se llama a otra hoja PHP que va leyendo las direcciones de mails de la tabla "lista" y envía el mensaje que antes escribí (leyéndolo de la tabla).

pero qué pasa? con varias direcciones, 1) el servidor smtp se satura.. 2) la ejecución del PHP caduca a los 30 segundos..

intené que el while trabaje con una variable $_GET para que por cada vez que se cargue el script php se envíe sólo un mail pero tengo problemas con esto último.. les paso mi código:

Código PHP:
<? require("../base/db.php");
$result=mysql_query("select count(*) from lista",$link); //cuenta la cantidad de destinatarios
$cant_mail=mysql_result($result,0);
while(
$id<=$cant_mail) { //mientras que ID sea menor o igual a la cantidad, ejecuta
 
$con_lis=mysql_query("select lis_dir, lis_act from lista where id_lis = $id",$link); //leé el e-mail y su estado
 
while($row=mysql_fetch_array($con_lis)) {
  if(
$row['lis_act']==1){ //el campo list_act está activo ?? se le manda mail
    
$destinatario=$row['lis_dir'];
    
$con_msg=mysql_query("select * from mensajes where id_msg = 1",$link); //se lee el mail a enviar y se ejecuta la función mail()
    
while($row=mysql_fetch_array($con_msg)) {
        
$from0=$row['msg_rnom'];
        
$from1=$row['msg_rdir'];
        
$from3=$row['msg_rres'];
        
$asunto=$row['msg_asu'];
        
$mensaje=$row['msg_msg'];
        
$ldc_msg_enc="From: $from0 <$from1>\nReply-To: $from3\nMIME-Version: 1.0\nContent-Type: text/plain";
        
mail("$destinatario""$asunto","$mensaje","$ldc_msg_enc");
        echo 
"se maileó a ".$destinatario."<br>";
        }
     }
  else {
     echo 
$row['lis_dir']." está inactivo<br>"// el campo lis_act está en 0 (el usuario se desuscribió)
  
}
 }
 
$id++;
 
//Header(); << header no funciona, cómo puedo redireccionar a url/batch.php?id ????
}
?>
Justo al final, en el //Header() es donde necesito redireccionar
de modo contrario, el PHP ejecuta las acciones descriptas con tooodaa la lista de mails...

al margen de eso.. además de un sleep(2); (para no saturar el servidor SMTP) se les ocurre alguna mejora??

espero que les sea útil este básico pero útil código