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 ????
}
?>
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