> Manuales > Taller de PHP

Explicamos algunas de las ventajas de la clase PHPMailer para el envío avanzado de correo con PHP. Veremos ejemplos de trabajo con PHP Mailer para dar los primeros pasos.

PHPMailer potente y sencilla clase para envío de email desde PHP

El proceso para hacer envío de email desde PHP es muy sencillo. Se limita a una función llamada mail() que realiza el envío atendiendo a una serie de parámetros que le enviamos. Lo cierto es que no es fácil imaginar otro modo más sencillo de enviar email, pero ¿qué pasa cuando el email a enviar es más complejo que de costumbre? En este artículo te daremos la respuesta.

Por qué necesito una función más poderosa para enviar emails en PHP

En DesarrolloWeb.com hemos tratado en diversos artículos temas relacionados con el envío de emails desde PHP, ya que es uno de los temas más básicos y repetitivos en el mundo de las aplicaciones web. Por ejemplo te recomendamos la lectura del artículo Envío de email desde PHP o bien el artículo Envío de un formulario por email.

El problema viene cuando el email que tienes que crear tiene algunas características avanzadas. ¿Cómo adjuntamos archivos a un email? ¿Cómo incluomos imágenes? ¿Cómo usamos servidores SMTP distintos de los configurados en php.ini? Todas estas cosas las puedes conseguir también en PHP si usas la clase PHPMailer que vamos a ver en este artículo. Gracias a PHPMailer podrás de una manera sencilla hacer cosas como adjuntar archivos o realizar la autenticación en el servidor de SMTP. En esos casos, la función mail() se nos queda corta y tenemos que recurrir a otros medios.

PHPMailer para enviar emails

PHPMailer es una clase creada específicamente para hacer sencillo el envío de emails que tienen características complejas, y la verdad es que es bastante útil y potente. Permite enviar email con archivos adjuntos, diferentes tipos de servidores SMTP (con o sin autenticación de usuario), a la vez que da soporte a otras características soportadas por la función mail() nativa de PHP, pero de una manera un poco más simple.

Está disponible con licencia de libre distribución y uso, código abierto y se puede obtener a través del enlace siguiente:

https://github.com/PHPMailer/PHPMailer

La verdad es que la clase resulta muy sencilla de entender y de usar. Para guiarte en su uso tienes la carpeta examples del proyecto, con un algunos ejemplos de uso que te servirán como plantilla para hacer envío de email de una manera rápida y simple.

Echa un vistazo al listado de ejemplos que podrás encontrar explicados en el index.html de la carpeta examples, del Zip de descarga. Allí encontrarás diversos códigos ya listos para enviar email de diversas características.

Instalar PHPMailer

Actualmente el medio recomendado para instalar PHPMailer en un proyecto PHP es usar Composer. Para ello lanzamos el siguiente comando en el terminal:

composer require phpmailer/phpmailer

Recuerda que una vez instalado composer tienes disponible el sistema de autoload de clases, por lo que solamente tendrías que hacer el include del sistema de autoload:

// Usar el sistema de autoload de composer
require 'vendor/autoload.php';

Y posteriormente solo necesitamos crear objetos de la clase PHPMailer. Aunque para que las clases se encuentren deberás especificar los espacios de nombres donde están ubicadas.

// Use de los espacios de nombres (namespaces) de PHPMailer
// Los use se colocan en la parte superior del script de PHP
// Estos son los use de las claes más importantes que puedes necesitar con PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// Una vez declarados los namespaces simplemente tenemos que instanciar las clases por su nombre
$mail = new PHPMailer(true);

También es posible descargar el código completo de las clases de PHPMailer y realizar el include de manera tradicional, si es que no quieres o no puedes instalar Composer.

Envío de email básico con PHPMailer

Para darle un poco más de utilidad a este artículo, vamos a repasar alguno de los ejemplos de PHPMailer que están en la propia página de ejemplos de la documentación, o entre los archivos de descarga que obtienes al bajarte PHPMailer.

El código es bastante sencillo, por lo que simplemente le voy a colocar algunos comentarios en español para que se pueda entender mejor.

<?php
//incluimos la clase PHPMailer
require_once('../class.phpmailer.php');

//instancio un objeto de la clase PHPMailer
$mail = new PHPMailer(); // defaults to using php "mail()"

//defino el cuerpo del mensaje en una variable $body
//se trae el contenido de un archivo de texto
//también podríamos hacer $body="contenido...";
$body = file_get_contents('contenido.html');
//Esta línea la he tenido que comentar
//porque si la pongo me deja el $body vacío
// $body = preg_replace('/[]/i','',$body);

//defino el email y nombre del remitente del mensaje
$mail->SetFrom('email@remitente.com', 'Nombre completo');

//defino la dirección de email de "reply", a la que responder los mensajes
//Obs: es bueno dejar la misma dirección que el From, para no caer en spam
$mail->AddReplyTo("email@remitente.com","Nombre Completo");
//Defino la dirección de correo a la que se envía el mensaje
$address = "email@destinatario.com";
//la añado a la clase, indicando el nombre de la persona destinatario
$mail->AddAddress($address, "Nombre completo");

//Añado un asunto al mensaje
$mail->Subject = "Envío de email con PHPMailer en PHP";

//Puedo definir un cuerpo alternativo del mensaje, que contenga solo texto
$mail->AltBody = "Cuerpo alternativo del mensaje";

//inserto el texto del mensaje en formato HTML
$mail->MsgHTML($body);

//asigno un archivo adjunto al mensaje
$mail->AddAttachment("ruta/archivo_adjunto.gif");

//envío el mensaje, comprobando si se envió correctamente
if(!$mail->Send()) {
  echo "Error al enviar el mensaje: " . $mail->ErrorInfo;
} else {
  echo "Mensaje enviado!!";
}
?>

Como has podido comprobar, el contenido del script es bastante elemental, pues la complejidad se queda toda en el propio PHPMailer.

Pero observa qué sencillo es enviar un archivo adjunto en este correo electrónico, con una única línea de código, llamando al método addAttachment().

Los acentos en el correo electrónico y en los asuntos

Uno de los problemillas que he encontrado al usar el PHPMailer es que los acentos en el asunto me salen con caracteres raros, en vez de visualizarse correctamente. Estoy usando en mi archivo .php el juego de caracteres UTF8 y para asegurarnos que en el asunto y/o cuerpo del mensaje se vean correctamente los caracteres latinos, debe indicarse a PHPMailer qué juego de caracteres utilizo.

Se puede proceder indicando este par de valores en atributos de la clase PHPMailer.

$mail->CharSet = "UTF-8";
$mail->Encoding = "quoted-printable";

Con esto experimentarás que los acentos y otros caracteres especiales del idioma español se muestran correctamente.

Conclusión a la introducción a PHPMailer y siguientes pasos

La clase PHPMailer es muy interesante, un complemento imprescindible para simplificar muchas de las tareas de gestión del correo electrónico desde PHP. Merece la pena echarle un vistazo en profundidad y comprobar lo sencillo que resuelve algunas de las necesidades más solicitadas en lo relativo al envío de email con PHP, como el uso de archivos adjuntos.

Si te interesa profundizar un poco más, tenemos otro artículo donde explicamos cómo trabajar con PHPMailer, abordando algunos detalles interesantes sobre el envío de email desde PHP con SMTP autenticado y usando los servidores de GMail.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual