lunes, 9 de enero de 2017

Envío de correos usando phpmailer

Hace un tiempo, en el artículo “Envío de correos sobre CodeIgniter” comentaba el uso de la clase email de CodeIgniter para el envío de correos. En un proyecto reciente, por determinadas razones, tuve que trabajar en un sitio web que no estaba montado sobre CodeIgniter y se requería el envío de correos. Al no contar con la biblioteca email de CodeIgniter que acostumbraba a utilizar tuve que buscar variantes para el envío de correos usando PHP directamente sin ningún framework intermediario.
Así encontré que para el envío de correos usando PHP directamente, se puede utilizar la función mail(), o mejor aún la clase phpmailer. Esta última, en comparación con la función mail(), permite en uso de SMTP, enviar correos con ficheros adjuntos, y enviar mensajes en formato HTML desde nuestro sitio web sin necesidad de tener nuestro propio servidor de correos corriendo en la máquina.
Con phpmailer se pueden enviar correos a través de sendmail, PHP mail(), o con smtp. Se recomienda hacerlo vía smtp porque se pueden usar varios servidores SMTP y de esta forma repartir la carga entre varias computadoras, enviándose más mensajes en menor tiempo; además los servidores SMTP permiten mensajes con múltiples destinatarios (to's) y los conocidos cc's (copia del correo), bcc's (copias ocultas) y reply-to (direcciones de respuesta).
Su uso es muy sencillo, en mi caso creé una clase mail_manager que actúa como interfaz con la clase phpmailer, y en el fichero de mi clase tuve que incluir:

require("PHPMailer-5.2.16/class.phpmailer.php");
require("PHPMailer-5.2.16/class.smtp.php");

En esta clase incluí dos funciones, una llamada “get_html_body” que recibe como parámetro el mensaje y elabora internamente un correo con imágenes, el logo y firma de la empresa, etc en formato HTML y retorna un string HTML; y la función “send_mail” que recibe como parámetro el destinatario (to) y nombre del destinatario (to_name), así como el asunto y contenido del correo. El contenido de “send_mail” sería así:

$mail = new PHPMailer();
$mail->Mailer   = 'smtp';
$mail->SMTPAuth = true;
$mail->Host     = 'smtp.office365.com';       //por ejemplo
$mail->Username = 'director@enterprise.etc';  //ejemplo ficticio
$mail->Password = 'the_pass';
$mail->Port     = 995;                        //por ejemplo
//correo desde donde se envía (para mostrar)
$mail->From     = 'director@enterprise.etc';           
$mail->FromName = 'Nombre de la empresa';
//correo al que se envía, pasados por parámetro
$mail->AddAddress($to, $to_name); 
$mail->IsHTML(true);                         //el correo se envía como HTML

$mail->Subject = $subject;
$mail->Body    = $message;
$result = $mail->Send();
return $result;


Así de sencillo. El uso desde cualquier otro fichero .php sería llamar primero la función “get_html_body” y luego “send_mail”.

Se pueden configurar muchos parámetros más como:

$mail->SMTPDebug = 2;  //permite modo debug para ver mensajes de las cosas que van ocurriendo
$mail­>SMTPSecure = "ssl";  //en este caso el host sería ssl://smtp… y hay que habilitar en nuestro servidor la extensión openssl
$mail->AddCC("cuenta@dominio.com");  //copia
$mail->AddBCC("cuenta@dominio.com"); //copia oculta
$mail->AddAttachment("imagenes/imagen.jpg", "imagen.jpg"); //atachados
$mail­>AddReplyTo('director@enterprise.etc', 'Nombre de la empresa');
$mail->AltBody = "Texto plano sin html"; // Texto sin html


Pues nada, es una biblioteca que recomiendo por su enorme flexibilidad de configuraciones y de un uso comprobado por muchos programadores web.

¿Te ha gustado este Post? Compártelo con tus amigos.

No hay comentarios:

Publicar un comentario

IconIconIcon