Sofa Naranja ahora, con un 125% más de naranja

Publicado
6 December 2005 @ 12am

Categorías
Código, PHP

PHPMailer, o el email sin complicaciones…

Si te dedicas al diseño web, antes o después tendrás que enfrentarte con el siguiente marrón: “email en HTML”.

Para un proyectillo que tenía entre manos (un mini-gestor de listas de correo) me ha tocado revisitar el tema. En principio, pensaba usar algún proyecto OpenSource de los miles que hay por ahí, pero ninguno me servía porque:

  • Eran increíblemente complejos de usar
  • Eran increíblemente complejos de instalar
  • Eran increíblemente feos
  • Todas las anteriores

Con lo cual, he acabado fabricándome mi propio gestor de listas de correo, con soporte para plantillas, base de datos de destinatarios, y archivo de los emails enviados (y de paso con un poquito de AJAX : )

Mailer001

Investigando gestores de listas OpenSource me he encontrado con PHPMailer, una clase PHP que se encarga de gestionar todo lo que convierte al envío de emails en HTML en una pesadilla, para dejarte pensar en cosas más interesantes (como, por ejemplo, el contenido de tus boletines de noticias : )

A modo de ejemplo, aquí va el código para enviar los mails en HTML de mi gestor:

<?php
    require("phpmailer/class.phpmailer.php");
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->Host = "mail.flumo.com";
    $mail->Username = "usuario";
    $mail->Password = "password";
    $mail->SMTPAuth = true;
    $mail->CharSet = "UTF-8";
    $mail->From = "info@flumo.com";
    $mail->FromName = "Flumo.com";
    $mail->IsHTML(true);
    $mail->Subject = $_POST['subject'];
    $mail->AltBody = $_POST['header']."\n\n".$_POST['body'];
    $mail->AddEmbeddedImage('logo.gif','my-logo');
    $mail->AddEmbeddedImage('bg.gif','my-bg');
    /* Destinatarios */
    $mail->AddAddress('info@flumo.com','Lista de correo de Flumo.com');
    if($_POST['database'] == 1){
        $usuarios = $db->get_results("SELECT * FROM usuarios");
        foreach($usuarios as $usuario){
            $mail->AddBCC($usuario->email,$usuario->name);
        }
    }
    if($_POST['destinatarios']){
        $to = explode(",",$_POST['destinatarios']);
        foreach($to as $tos){
            $mail->AddBCC($tos);
        }
    }
    /* Plantilla */
    $template = file_get_contents('templates/flumo.tpl','r');
    $display = str_replace("%%header%%",$_POST['header'],$template);
    $display = str_replace("%%body%%",$_POST['body'],$display);
    /* Imagenes */
    $display = str_replace("logo.gif","cid:my-logo",$display);
    $display = str_replace("bg.gif","cid:my-bg",$display);
    $mail->Body = $display;
    /* Envio del mensaje */
    if(!$mail->Send()) {
        echo "El mensaje no pudo ser enviado.";
        echo "Error: " . $mail->ErrorInfo;
    } else {
        echo "El mensaje ha sido enviado.";
    }
?>

En el código hay un par de cosillas que usan ezSQL, pero de esa otra maravilla ya hablaremos otro día…

El resultado, una cosilla así:

Mailer002

Si tu próximo proyecto tiene algo que ver con email y usas PHP, te debes a tí mism@ echarle un vistazo a PHPMailer.

Update: Un artículo bastante bueno en cristiano sobre PHPMailer en programacion.com


9 Comentarios

AKB
11 April 2006 @ 10am

El código del gestor de listas de correo es para un cliente, es privado, o se le puede meter mano ? :)

Un saludo…

ale
11 April 2006 @ 11am

Si soy capaz de encontrarlo entre las montañas de cosas de mi disco duro, lo pondré por aquí para descargarlo…

AKB
12 April 2006 @ 9am

Agradecido infinito :)

alex
23 May 2006 @ 9pm

me hace gracia porque precísamente me he sentido completamente identificado contigo. Necesitaba un gestor de newsletters con funcionalidades básicas, xhtml y diseño medianamente bueno.

He llegado a las mismas conclusiones de planteamiento, perdí el tiempo buscando alguno hecho y también con la función mail. hasta que me decidí con phpmailer. Que pena que no leí este artículo antes.

Me llama la atención como envías el mail (con bcc).

Carlos
2 August 2006 @ 5pm

Saludos.

Hay alguna función para que le confirme al remitente que leyo el mensaje?????

ale
2 August 2006 @ 6pm

Carlos, si miras la documentación de PHPMailer verás que hay un atributo ‘ConfirmReadingTo’ que sirve justo para lo que quieres.

La documentación es nuestra amiga… ;D

leandro
16 August 2006 @ 5am

gracias, estaba necesitando lo mismo que mostras vos, con algunas modificaciones. te quedo muy lindo el trabajo. saludos

Fernando
27 January 2007 @ 11pm

¿Cuantas direcciones se pueden añadir a AddBCC?, ¿podrían ser 25.000?. Yo hago que el usuario, debidamente autorizado, cree el correo dinámicamente, o sea, elige el número de destinatarios, que envío también como AddBCC, el asunto, archivo adjunto y texto para el body en un textarea, ¿que puedo hacer para que el usuario introduzca también imágenes, pero que no vayan como ficheros adjuntos, sino como si enviara una página web?, no se si me explico, pero me urge, es muy importante para mi.

¡Gracias!, Un Saludo, Fernando

Icaro
2 May 2007 @ 8pm

Holas… pues creo que no encontraste el codigo completo no? :( haber si le das otra buscadita pues… estoy seguro que muchos te lo agradeceran ;)

Saludos…

Deja tu comentario