X

Encapsulando envío de emails con PHPMailer

La mayoría de proyectos incluyen funcionalidad que requiere del envío de emails (envíame un e-mail como alerta cuando ocurra cierta acción, mándame información a través de un formulario de contacto…). La mayoría de frameworks web incluyen soluciones para el envío de e-mails que facilitan el trabajo, sin embargo si tenemos que trabajar en un proyecto con PHP a pelo (quizás por su sencillez) es interesante emplear alguna librería de mailing que nos facilite la vida.

¿Cual es nuestro objetivo?

El objetivo final es tener en nuestro código un servicio o función que nos soporte una simple llamada mail() que nos abstraiga de la implementación y adecuación de los RFC, reglas de formato y codificación y además nos permita  incluir código html en nuestros e-mails, además de otras funcionalidades como incluir archivos adjuntos. Hoy hablaremos aquí de la librería PHPMailer (https://github.com/PHPMailer/PHPMailer), sin embargo no es la única existente, por ejemplo existe SwiftMailer incluida en Symfony entre otras.

Ventajas de PHPMailer

PHPMailer aporta características avanzadas para permitir autenticación en servidores de SMTP, incluir ficheros adjuntos en nuestros mails. Todas estas ventajas nos aporta una herramienta útil y potente y que nos reduce la complejidad.

Uno de los problemas tipicos con los que uno se enfrenta es que a la hora del envío de un mail son los acentos y aparecen caracteres extraños, en vez de visualizarse correctamente. PHPMailer permite codificar el mensaje con UTF8  de manera que nos garantiza que asunto y cuerpo del mensaje se vean correctamente .

Ejemplo

Incluyo un código de ejemplo PHP donde encapsulé PHPMailer e implementé una clase sencilla que permite el renderizado de plantillas e inicialización de mails

 

<?php

require_once 'config/config.php';
require_once 'config/lib/PHPMailer/PHPMailerAutoload.php';


class Mailer {
    public $mail; 

    function __construct() {
       $mail = new PHPMailer;

       $mail->isSMTP();                                      
	   $mail->SMTPAuth   = SMTP_AUTH;         
	   $mail->SMTPSecure = SMTP_SECURE;         
	   $mail->Host       = MAIL_HOST;      
	   $mail->Port       = MAIL_PORT;          
	   $mail->Username   = MAIL_USERNAME;  
	   $mail->Password   = MAIL_PASSWORD; 

	   $this->mail=$mail;

    }

    public function sendMail($from,$fromName,$address,$subject){

    	$this->mail->From = $from;
		$this->mail->FromName = $fromName;
		$this->mail->addAddress($address);   

		$this->mail->isHTML(true);                                  
		$this->mail->Subject = $subject;
		$this->mail->Body = $this->renderTemplate();

		if(!$this->mail->send()) {
		   
		    return $this->mail->ErrorInfo;
		} else {
		    return true;
		}

    }

    private function renderTemplate(){
		  $html = file_get_contents(dirname(__FILE__).'/../mailing/mailing.html');
          $html = str_replace('%ROOT%', ROOT, $html);
		  return $html;
    }

    
}
?>

Espero que este artículo haya sido interesante y aporte una base a la hora de implementar envio de emails en PHP.

Categorías: BackendDesarrollo WebDescubre las mejores librerías
Tags: phpphpmailer
alonsus91 :Joven ingeniero en Informática especializado en Ingeniería Web apasionado por las nuevas tecnologías y las últimas novedades en informática e Internet con ansias de conocer a fondo el mercado laboral y aportarle todos mis conocimientos.
Disqus Comments Loading...

Utilizamos cookies para asegurar que damos la mejor experiencia al usuario en nuestro sitio web. Si continúa utilizando este sitio asumiremos que está de acuerdo.