Foros del Web » Programando para Internet » PHP »

Newsletter diaria

Estas en el tema de Newsletter diaria en el foro de PHP en Foros del Web. Hola a tod@s! Necesito mandar una newsletter diaria a mi lista de contactos, alguién sabe como puedo hacerlo? Puedo hacerlo con la función mail()? Muchas ...
  #1 (permalink)  
Antiguo 16/10/2008, 11:16
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Pregunta Newsletter diaria

Hola a tod@s!

Necesito mandar una newsletter diaria a mi lista de contactos, alguién sabe como puedo hacerlo?

Puedo hacerlo con la función mail()?

Muchas gracias!!

Saludos!
  #2 (permalink)  
Antiguo 16/10/2008, 11:55
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Newsletter diaria

Si, Y con una BBDD por ejemplo,
Haces una consulta a la BBDD, guardas los resultados de los email que tengas acumulados en la base, con mysql_fetch_array, por ejemplo, y con un bucle WHILE, vas enviando los mails.

Un saludo
  #3 (permalink)  
Antiguo 16/10/2008, 12:29
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Newsletter diaria

Hola,

Gracias Jaronu!

Mi pregunta, ahora es: cómo puedo introducir saltos de línea y links en el cuerpo del e-mail?

Gracias de antemano!

Saludos!
  #4 (permalink)  
Antiguo 16/10/2008, 12:36
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Newsletter diaria

los saltos de linea con

nl2br()

y los links los podrias incluir facilmente haciendo el email con formato HTML y no solo texto

pero ten encuenta que pueden llegar a la carpeta de correo no deseado de tus user como SPAM por culpa de los filtros de correo como los de hotmail y demas.

Un saludo
  #5 (permalink)  
Antiguo 16/10/2008, 13:54
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Newsletter diaria

Hola Jaronu,

No me funciona la función nl2br().

Me puedes decir si la estoy usando correctamente?

Código PHP:
nl2br("Hola! Te escribo para recomendarte \n bla bla bla) 
Gracias de antemano!

Saludos,
  #6 (permalink)  
Antiguo 16/10/2008, 14:03
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Newsletter diaria

como haces las Newslette,r a traves de un formulario?
  #7 (permalink)  
Antiguo 16/10/2008, 14:12
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Newsletter diaria

No, exactamente.

Utilizo variables.
- una variable: destinatarios
- otra: asunto
- otra: mensaje

El mensaje y el asunto serán siempre los mismos con pequenas variaciones (variables incrustadas) en cada newsletter.

Gracias de antemano!
  #8 (permalink)  
Antiguo 16/10/2008, 14:17
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Newsletter diaria

pero como modificas la variable mensaje, siempre a mano?? es mejor mediante form
mas automatizado. y usando nl2br
yo el asunto y el mensaje lo hago siempre mediante form, es mas comodo
y el destinatario lo tomo de la BBDD

pero entonces a si te deberia ir bien

$mensaje = "Hola! Te escribo para recomendarte<br> bla bla bla";
  #9 (permalink)  
Antiguo 16/10/2008, 14:29
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Newsletter diaria

Ostia! no había pensado en lo de hacer un form.

Es decir haces un formulario, y a través de ese formulario pasas las variables que cambian cada vez, véase parte del mensaje, o parte del asunto.

Código:
$mensaje = "Hola! Te escribo para recomendarte<br> bla bla bla";
tengo que incluir nl2br($mensaje), ??


La otra pregunta que me viene a la cabeza es: si hay muchos e-mails que enviar, no se puede saturar la función mail()?

Muchas gracias por abrirme los ojos.
Saludos!
  #10 (permalink)  
Antiguo 16/10/2008, 14:39
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Newsletter diaria

no nl2br, no, ya que el mensaje lo haces a mano solo <br>

yo envio mas de 100 emails sin problemas, aunque todo depende de tu hosting y su configuracion, de todas formas, si tines limitaciones, lee la funcion sleep()

que detiene el script los segundos que quieras,

los puedes hecer que descansen de uno en uno o cada vez que envie 100 por ejemplo usando un Bucle WHILE dentro del que manda los email diciendole que cada vez que llegue a cien registros descanse el script

Un saludo
  #11 (permalink)  
Antiguo 16/10/2008, 14:44
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Newsletter diaria

Gracias!!

Me pongo a ello, ya te comento el resultado. Seguramente tenga un par de dudas en el proceso.

Gracias por todo!
Saludos!
  #12 (permalink)  
Antiguo 16/10/2008, 15:04
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Newsletter diaria

hola donfalcone, yo hice un sistemita de envios de mail con la clase phpMailer, ayuda muchisimo para eso que tenes que hacer

te dejo el proceso que hice, lo otro es un formulario con un editor de texto que no te lo paso porque no esta andando bien, te comento que es lo que hice en la base de datos, tengo una tabla news_mailinglist con estos campos

Código PHP:
 idMailidInteresMailActiv 
y otra tabla news_interes con estos campos

Código PHP:
 idMailInteres_GeneralEventosCapacitacionesActualizacionesProductosFacturacionOportunidadesOfertas 
en el formulario podes elegir la categoria

Código PHP:
<?php
session_start
();
include_once 
'../funciones/generales.php';
include_once 
'../funciones/mailReplace.php';
include_once 
'../config.php';


    if(
$_POST['sendMail']=='enviando'){
        require_once(
"../htmlTags.php");
        include 
'../../style/template/avisoscli.php';
        include(
"../class.phpmailer.php");
        
        
$mail = new PHPMailer();
        
$mail->Mailer "smtp";
        
$body = new htmlTags();
        
$refer $_SERVER['HTTP_REFERER'];
        
        
        
$estilo $_POST['estiloSelect'];
        
$mails $_POST['component-select'];
        
$mails $_POST['opcionalMailing'];
        
$mensaje $_POST['Area'];
        
$subjet $_POST['subjet'];
        
$estilo 'beta'//hasta terminar la parte de desarrollos
        // generar una consulta segun el estilo para mandar 
        //determinar los parametros que van a ser fijos para el estilo ya sean fondos tipos de letras 
        
$mensaje str_replace('\"','"',$mensaje);
        
//$mensaje = titRep($mensaje);
        
$to $_POST['cc'];
        
$titulo $_POST['titulo'];
        
        
$grupoConces $_POST['conces'];
        
/***********************************************************************************
         *********************************************************************************** 
         *********************************************************************************** 
         *********************************************************************************** 
         *********************************************************************************** 
         *********************************************************************************** 
         ***********************************************************************************/
            
                
                
if($_SESSION['Plantillas']=='plant1'){
                    
$msg ChangeTemplate('default',$titulo,$mensaje);
                }else{
                
                    if(
$estilo == 'beta'){
                        
$link '<a href="http://algunSitio/down/instructivo.pdf">Descargar el Instructivo</a>';
                        
$msg ChangeTemplate('default',$titulo,$mensaje,$link);
                    }
                }
            
                
                
            if (
$_POST['autor']==''){
            
$mail->From "[email protected]";
            }else{
                
$mail->From $_POST['autor'];
            }
            
            
$mail->FromName 'Mira quien habla - Su empresa';
            
            
/***********************************************************************************
         *********************************************************************************** 
         *********************************************************************************** 
         *********************************************************************************** 
         ***********    comprobar los emails     ****************************************************** 
         *********************************************************************************** 
         ***********************************************************************************/
            
            
if($grupoConces!=''){
                
$i=0;
                
$sql ="SELECT mail FROM [TABLA] WHERE [CAMPOID]='".$grupoConces."'";
                
$res $DbConn->query($sql);
                while (
$arr $DbConn->fetchArray($res)){
                    
$mails[$i] = $arr;                    
                    
$i++;
                
                    }
                
$cant count($mails);
            }
          
             for(
$i=0;$i<$cant;$i++){
                    if(
$grupoConces==3){
                        
$mail->AddAddress($mails[$i][0]);
                    }
            }
            
            
            
          
           
// $mail->AddAddress('[email protected]');
                    
            
$mail->IsHTML(true); // set email format to HTML

            
$mail->Subject $subjet;
            
$mail->Body $msg;
            
$mail->AltBody "This is the body in plain text for non-HTML mail clients";
            
           
       if(!
$mail->Send())
            {
            echo 
"Message could not be sent. <p>";
            echo 
"Mailer Error: " $mail->ErrorInfo;
            
$error true;
            
$errorDat $mail->ErrorInfo;
            exit;
            }

        if(
$_POST['autor']!='[email protected]'){
            
$mailInform  = new PHPMailer();
            
$mailInform->From '[email protected]';
            
$mailInform->FromName 'Info server';
            
$mailInform->AddAddress($_POST['autor']);
            
            
$msg '<html>
                        <body>'
;
                if(
$error==true){$msg.='Ocurrio el siguiente error: '.$errorDat;}
                    
$msg.='Se completo la operacion con exito a los siguientes e-mails:</br>
                    '
;
                    for(
$i=0;$i<$cant;$i++){
                                
$msg.= '<b>'.$mails[$i][0]. '</b></br>';
                            }
                    
$msg.= '
                        </body>
                        </html>'
;
            
$mailInform->IsHTML(true);        
            
$mailInform->Subject 'Informe de recepcion';        
            
$mailInform->Body $msg;                        
            
$mailInform->Send();
            }
    
    echo 
"
    <script type=\"text/javascript\">
        function timedMsg()
        {
        var t=setTimeout(\"window.location='$refer'\",5000)
        }
        </script>"
;
    echo 
'<body onLoad="timedMsg()">
            <div align="center">
            <p><b>Mensaje enviado correctamente, en segundos recibira un email con la confirmacion de los resultados</b></p>'
;
    
    
        echo
        
'    
            <p><b>Redireccionando</b></p>
            </div>
        </body>
    '
;
           
           
    

    }


    
?>
  #13 (permalink)  
Antiguo 16/10/2008, 15:19
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Newsletter diaria

Muchísimas Gracias samu22!!

Lo pondré en marcha, y te comento.

Muchísimas gracias por el código.

Un saludo!
  #14 (permalink)  
Antiguo 16/10/2008, 15:33
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Newsletter diaria

pero lo hace con un formulario, como te dije, mas como y mas automatizado, ese es mi punto de vista.

Un saludo y que te salga el code, suerte
  #15 (permalink)  
Antiguo 16/10/2008, 15:40
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Newsletter diaria

es que yo lo hice con un formulario porque el mensaje que se envia varia segun el que lo envia, igual hay una opcion de mandar automaticamente algunas listas ya preparadas que tiene un texto fijo, si te fijas en el codigo tiene una parte donde carga un template, tengo algunos template que vienen con el texto final y se envia mensualmente sin tener que entrar al form, que es lo que debe necesitar el
  #16 (permalink)  
Antiguo 16/10/2008, 16:01
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Newsletter diaria

se envian mensualmente, pero se te olvido comentarle que para eso, hace falta un cronjob en linux o una tarea programada en windows.

Un saludo
  #17 (permalink)  
Antiguo 16/10/2008, 16:05
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Newsletter diaria

Hola Jaronu y Samu22,

Muchas gracias! Pondré el código en marcha y os comento manana.

Muchísimas gracias de nuevo!

Saludos!
  #18 (permalink)  
Antiguo 16/10/2008, 16:08
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Newsletter diaria

Cita:
Iniciado por jaronu Ver Mensaje
se envian mensualmente, pero se te olvido comentarle que para eso, hace falta un cronjob en linux o una tarea programada en windows.

Un saludo
Lo de programarlo para que se envíe diariamente también me interesa,... cómo puedo hacerlo?

Gracias!
  #19 (permalink)  
Antiguo 16/10/2008, 16:11
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Newsletter diaria

Cita:
Iniciado por jaronu Ver Mensaje
se envian mensualmente, pero se te olvido comentarle que para eso, hace falta un cronjob en linux o una tarea programada en windows.

Un saludo
busca en google como se hace, o es una opcion de panel de tu hosting

yo tengo una opcion de tarea programada en el panel de control de mi server, pero en local ni idea,
no se si trabajas en local o con un server de pago, pero si es a si, GOOGLE
  #20 (permalink)  
Antiguo 16/10/2008, 20:40
 
Fecha de Ingreso: octubre-2008
Mensajes: 5
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Newsletter diaria

orale diganme desde 0 o pasenme los archivos yo necesito eso!!!
  #21 (permalink)  
Antiguo 17/10/2008, 06:50
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Newsletter diaria

Hola a todos!

Sólo me queda una duda.

No consigo poner etiquetas html dentro del mensaje.

Por ejemplo:
Esto
Código PHP:
$comentario "Buenos días! <br>Hoy el tema del día es:".$tema."
<br>y tú qué opinas? <a href='http://www.miweb.com'>opina</a> <br>Saludos!<br>miweb"

En vez de verse así:
Código PHP:
Buenos d&#237;as! 
Hoy en Contraopina el tema del d&#237;a es: tema del día
y t&#250; qué opinas? [URL="http://www.noexistente.com"]opina[/URL]
Saludos!
miweb 
Se ve así:
Código PHP:
$comentario "Buenos días! <br>Hoy el tema del día es:".$tema."
<br>y tú qué opinas? <a href='http://www.miweb.com'>opina</a> <br>Saludos!<br>miweb"

Es decir, se ve el código que no debería verse :)

Alguién sabe cómo puedo solucionar esto?

Muchas gracias.

Evangelitor, una vez tenga esto te paso el código sin ningún problema.

Saludos!
  #22 (permalink)  
Antiguo 17/10/2008, 07:15
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Newsletter diaria

se puede hacer a travez de un script que para que lo envie diariamente, lo que si es que hay que correrlo, tendrias que almacenar en la base una id de envio de mails despues corroborar que esa id se envio hoy a toda la lista de mails, por ejemplo una tabla EmailSend con los siguientes campos:

Código PHP:
idMailfechaMailFromMailAutorMailChekEnv 
luego habria que hacer una comprobacion
Código PHP:
function checkMailSend(){
    global 
$DB// esta global es un objeto para la conexion a la base de datos
    
$fecha date('Y-m-d');
    
// hacemos la consulta para ver recuperar los datos de los email enviados y comprar con los que faltan
        
$sqlComp "SELECT * FROM EmailSend WHERE CheckEnv='1'";
        
$res $DB->query($sqlComp);
            
// ahora guardamos los datos en un array multidimencional
                
while($fArray $DB->fetchArray($res)){
                    static 
$i=0;
                    
// buscamos los mails que tengan fecha de hoy
                    
if($fArray['FechaMail']==$fecha){
                        
$Enviados[$i] = $fArray;
                        
$i++
                    }
                }
            
// generamos el string para comprara la proxima consulta    
            
$numArr count($Enviados) -1;
            
$cond 'not idMail IN (';
                for(
$i=0;$i<$numArr;$i++){
                    
$cond .= $Enviados[$i]['idMail'].',';
                }
            
$numArr += 1;
            
$cond.= $Enviados[$numArr]['idMail'].')';
                
                
        
$sqlList "SELECT * FROM news_mailinglist $cond";
        
$res $DB->query($sqlList);
            
//guardamos los datos y los comparamos
                
while($fArray $DB->fetchArray($res)){
                    static 
$i=0;
                        
$toSend[$i]=$fArray['Mail'];
                        
$i++;    
                    }
        
        
//ya tenemos los mails enviados y los que faltan enviar solamente hay que tomar los datos
            // podriamos devolver la variable $toSend        
                
return $toSend;    
    } 
despues habria que hacer una funcion que recorra la variable y envie el mail
  #23 (permalink)  
Antiguo 17/10/2008, 08:38
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Newsletter diaria

Hola a todos!

Esto es una edición de mi última entrada, ya que veo que no se ve como realmente es.

No consigo poner etiquetas html dentro del mensaje.

Por ejemplo:
Esto
Código PHP:
$comentario "Buenos días! <br>Hoy el tema del día es:".$tema."
<br>y tú qué opinas? <a href='http://www.miweb.com'>opina</a> <br>Saludos!<br>miweb"

En vez de verse así:

Buenos días!
Hoy el tema del día es: tema del día
y tú qué opinas? opina
Saludos!
miweb

Se ve así:

"Buenos días! <br>Hoy el tema del día es: tema del día
<br>y tú qué opinas? <a href='http://www.miweb.com'>opina</a> <br>Saludos!<br>miweb";
Es decir, se ve el código que no debería verse :)

Alguién sabe cómo puedo solucionar esto?

Muchas gracias.

Evangelitor, una vez tenga esto te paso el código sin ningún problema.

Saludos!
  #24 (permalink)  
Antiguo 17/10/2008, 09:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Newsletter diaria

Ve el post que te dejo samu22, necesitas usar PHPMailer y activar el uso de HTML. Revisa las FAQs del foro ahi viene explicado como codificar tu correo para enviarlo como HTML.

Saludos.
  #25 (permalink)  
Antiguo 17/10/2008, 09:23
 
Fecha de Ingreso: noviembre-2007
Mensajes: 194
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Newsletter diaria

Hola!

Gracias GatorV,

Lo solucioné anadiendo estos headers:

Código PHP:
$headers  'MIME-Version: 1.0' "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' "\r\n"
Saludos!

Y gracias a todos los que me ayudaron a sacar esto adelante!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:42.