Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/06/2006, 12:23
la_vida_esun_if_else
 
Fecha de Ingreso: mayo-2006
Mensajes: 34
Antigüedad: 17 años, 11 meses
Puntos: 0
Pregunta Opinion sobre mi script para enviar mails masivos

Buenas amigos, posteo porque me gustaría que me den su opinion (y una mano en cuanto a este tema) sobre un script que estoy comenzando a desarrollar, para enviar mails masivos sin saturar el servidor.

Se me ocurrió desarrollar este sistemita porque instalé phplist y es un lio hacerlo andar en mi server, y dada mail está muy bueno pero no puedo hacer q tome los mails de mi db mysql.

Por otro lado me di cuenta lo que yo necesito es algo bien bien sencillo, no un software completo para enviar boletines, sino simplemente un script que lo realize...paso a adjuntar el boceto que llevo hecho (aún no lo testeé pero creo que es bastante logico)

Script usado para el envío de los mails PHPMailer descargado de PHPClasses.org

TABLAS de mi DB
nl_new_available : valor 0 o 1. "0" indica que no hay un nuevo boletin para enviar, "1" indica lo contrario.

nl_adress_sended: una vez que se inició el proceso de envío indica cuantos mails ya fueron enviados.

nl_users: tabla con informacion de cada contacto, incluyendo el email.

Funcionamiento:

1- Seteo un cron en mi server para que todos los 1 y 15 de cada mes me ejecute cada 2 minutos sendNL.php (que contiene el codigo de más abajo).

2- El sistema comienza el envío de 10 mensajes cada 2 minutos para no saturar el servidor, cada vez que realiza esta tarea graba en "nl_adress_sended" el total enviado.

3- El cuerpo del mensaje es generado embebiendo un html. (Donde dice "Cuerpo del mensaje").

4- Cuando se envía el boletin a todas las direcciones de email se graba en "nl_new_available" el valor 0, y los resutados del proceso son enviados al administrador atachados en un email.

Código PHP:
<?   
// Enviar NL //////////////////////////////////////////////////////////////////////
   
   // Incluyo el enviador de mails
   
include("class.phpmailer.php");
   
   
// Me conecto a la base
   
include("conex.php"); 
   
$link Conectarse();
   
   
// Revizo si hay un nuevo NL disponible
   
$query1 "SELECT new FROM nl_new_available";
   
$result1 mysql_query$query1 $link ) or die( mysql_error() );
   
$row1 mysql_fetch_array($result1);
   if(
$row1['new'] == 1){
   
   
// Extraigo de la tabla de "nl_adress_sended" la ultima cantidad enviada.
             
$query2 "SELECT total FROM nl_adress_sended";
             
$result2 mysql_query($query2 $link) or die( mysql_error() );
             
$row2 mysql_fetch_array($result2);
             
   
// Selecciono los registros partiendo de la ultima cantidad enviada + 1.
                     
$piso $row3[total] + 1;
             
$techo $row3[total] + 10;
                     
$query3 "SELECT email FROM nl_users ORDER BY ID ASC Between $piso And $techo ";
                     
$result3 mysql_query$query3 $link ) or die( mysql_error() );

   
// Envio el mail
                     
while($row mysql_fetch_array($result3)){
             
$mail = new PHPMailer();
                     
$mail->From '[email protected]';
                     
$mail->FromName 'Boletin Quincenal - Dominio.com';
                     
$mail->AddAddress($row3[email]));
                     
$mail->IsHTML(true);
                     
$mail->Subject "Boletin Quincenal - Dominio.com";
                     
$mail->Body    "<font color='#000000' face='Arial, Helvetica, sans-serif'>Cuerpo del mensaje</font>";
        
                     if(!
$mail->Send()){/* Escribo el error en un archivo de texto */}
                     else{
/* Escribo el resutado exitoso en un archivo de texto */};
                     };
                     
   
// Grabo en la tabla "enviados" los mails que fueron enviados.
                     
$query4 "UPDATE nl_adress_sended SET `total` = '$techo'";
                     
$result4 mysql_query$query4 $link ) or die( mysql_error() );

   
// Si se envió el total de mails grabo en la tabla "nuevo NL disponible" el valor cero
                     
$query5 "SELECT total FROM nl_adress_sended";
                     
$result5 mysql_query$query5 $link ) or die( mysql_error() );
                     
$row5 mysql_fetch_array($result5);
                     
                     
$query6 "SELECT * FROM nl_users";
                     
$result6 mysql_query$query6 $link ) or die( mysql_error() );
                     
$total_users mysql_num_rows($result6);
                     
                     if(
$row5[total] == $total_users){
                                
$query7 "UPDATE nl_new_available SET `new` = '0'";
                               
$result7 mysql_query$query7 $link ) or die( mysql_error() );

   
// Envio mail informando al administrador
                     
$mail = new PHPMailer();
                     
$mail->From '[email protected]';
                     
$mail->FromName 'Enviador de boletín - Dominio.com';
                     
$mail->AddAddress($row[email]));
                     
$mail->IsHTML(true);
                     
$mail->Subject "Dominio.com - Resultados de envio de boletin (Fecha)";
                     
$mail->Body    "<font color='#000000' face='Arial, Helvetica, sans-serif'>Resultados del envio de boletín</font>";
                     
$mail->AddAttachment("send_mail_results.txt");
                     if(!
$mail->Send())/* Muestro error en pantalla */
   
    
};

   };

 
// Fin ////////////////////////////////////////////////////////////////////////////

?>

Espero sus criticas, opinines y consejos!
Saludos y gracias!