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!