Saltar al contenido
PHP

Cómo enviar correos con PHPMailer

Enviar correos PHPMailer

¿Qué es PHPMailer?

Es una librería que está desarrollada en PHP que nos va a facilitar el envío de correos electrónicos. Se basa en el componente Active Server ASPMail.

También nos va a permitir realizar trabajos más complejos, como adjuntar ficheros o realizar envíos de mails con formato HTML. Y de manera más segura, tenemos la posibilidad de poder envíar los correos electrónicos mediante el protocolo SMTP.

En este listado te voy a proporcionar una lista con las características más avanzadas:

  • Autenticación SMTP
  • Cifrado seguro / MIME
  • Soporte de protocolos TLS y SSL
  • Contenido HTML junto con texto sin formato
  • Múltiples archivos fs, string y binarios
  • Soporte de  imágenes incrustadas

Ya existe una función en PHP, ¿Por qué no utilizar mail()?

La mayoría de servidores web tienen deshabilitado esta función por seguridad, debido a que abusan de esta función de PHP para el envío masivo de correo basura el (spam).

¿Cómo se instala?

Para poder instalar la librería a nuestra página web, deberemos descargarlo desde el repositorio de Git.

En el repositorio podemos ver documentación, ejemplos de cómo enviar emails con la librería. Los ficheros que nos interesan, son los que se ubican en la carpeta «src»:

  • Exception.php
  • OAuth.php
  • PHPMailer.php
  • POP3.php
  • SMTP.php

Estructura inicial

Utilizaremos un Try/Catch para verificar que si todo va bien, envíe el correo sin problemas. Si no, que nos avise por pantalla el error.

$mail = new PHPMailer\PHPMailer\PHPMailer();
try {
// Si no existen errores...seguimos por aquí
} catch (Exception $e) {
echo "ERROR: No se ha podido enviar el correo.({$mail->ErrorInfo})";
}

Configuración SMTP

En la función de SMTPDebug hay 3 estados:

  • 0: Entorno de Producción. No mostrará mensajes de debug.
  • 1: Muestra por pantalla el diálogo del cliente con el servidor SMTP.
  • 2: Muestra por pantalla el diálogo del cliente con el servidor SMTP y viceversa.
  • 3: Muestra códigos de estado de cada fase de la conexión, y añade la función 2.
  • 4: Muestra a bajo nivel las trazas del diálogo entre cliente y servidor SMTP.
$mail->isSMTP();
$mail->SMTPDebug = 0;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls';
$mail->Host = '(SERVIDOR)';
$mail->Username   = '(USUARIO)';  
$mail->Password = '(CONTRASEÑA)';
$mail->Port = 587;

Configurar remitentes y destinatarios

$mail->setFrom('[email protected]', 'Lacodigoteca.com');
$mail->addAddress('[email protected]', 'Lacodigoteca.com');
$mail->addAddress('[email protected]');
$mail->addReplyTo('[email protected]', 'Alfredo Martín');
$mail->addBCC('[email protected]');

Cuerpo del correo electrónico

$mail->isHTML(true);
$mail->CharSet = "utf-8";
$mail->Subject = '[La codigoteca] - ticket XXXXX';
$mail->Body = '
Hola <b>Alfredo</b>
Te enviamos el ticket de la compra que has realizado con nosotros.<br>
Un saludo,<br>
<a href="https://lacodigoteca.com">Lacodigoteca.com</a>';
$mail->AltBody = 'Hola Alfredo. Te enviamos el ticket de la compra que has realizado con nosotros. Un saludo,Lacodigoteca.com';

Adjuntar documentos al correo electrónico

$mail->addAttachment($doc);

Proceso del envío del correo electrónico

$mail->send();

Documento final

(Opcional) Correo electrónico de pruebas

Para poder realizar nuestras pruebas, vamos a utilizar un servicio llamado Yopmail, que permite crear direcciones de correo temporales. Aquí os dejo un vídeo de cómo funciona.

(Opcional) Servidor de pruebas SMTP

Para probar la funcionalidad del correo PHP, utilizaremos Mailtrap , un servidor SMTP falso, para no inundar nuestras bandejas de entrada o, lo que es peor, las bandejas de entrada de nuestros clientes. Una vez que se asegure de que todo funciona correctamente y sus mensajes de correo electrónico se vean bien, podrá sustituir fácilmente la configuración de SMTP en nuestros ejemplos con la de su servidor real.

Si todavía no está utilizando Mailtrap, cree una cuenta gratuita , vaya a su Bandeja de entrada y copie los siguientes valores de la pestaña de configuración SMTP al fichero PHP:

Servidor

$mail-> Host = 'smtp.mailtrap.io';

Usuario

$mail-> Username = '1a2b3c4d5e6f7g'; //(ejemplo, generado por Mailtrap)

Contraseña

$mail-> Password = '1a2b3c4d5e6f7g'; // (ejemplo, generado por Mailtrap)

Puerto

$mail->Port = 25; // o 465,2525

Hay un punto más por mencionar sobre SMTP: POP-before-SMTP para autenticación. Este método se reemplaza casi por completo por la autenticación SMTP, pero aún se puede usar a veces. Su principal ventaja es la transparencia para el usuario que envía un correo electrónico. Consulte esta página de Github para obtener el ejemplo del uso de POP-before-SMTP. 

Tip: Si quieres ver cómo mandar por email un ticket de compra en PDF generado por PHP.