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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
<?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.