Clase destacada en el ecosistema de PHP que facilita enormemente el trabajo de envío de email desde PHP, sobre todo en correos electrónicos especialmente complejos.
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 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, como adjuntar archivos o 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 de 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.htmlde la carpeta examples, del Zip de descarga. Allí encontrarás diversos códigos ya listos para enviar email de diversas características.
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 de entender, por lo que simplemente le voy a colocar algunos comentarios en español para que se pueda entender mejor.
//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 = "UTF8";
$mail>Encoding = "quotedprintable";
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 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.En el siguiente artículo continuaremos trabajando con PHPMailer, tomando 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...