Enviar correos electrónicos desde una aplicación web es una tarea común, especialmente para funcionalidades como la recuperación de contraseñas, notificaciones y confirmaciones. Aunque PHP incluye una función mail()
para enviar correos, esta suele ser limitada y poco fiable, especialmente cuando se trata de manejar servidores SMTP o adjuntar archivos. En su lugar, se recomienda el uso de PHPMailer, una de las bibliotecas más populares y potentes para enviar correos electrónicos en PHP.
En este artículo, aprenderás cómo enviar correos electrónicos utilizando PHPMailer, explorando desde la configuración básica hasta opciones más avanzadas, como el uso de SMTP y la adición de archivos adjuntos.
PHPMailer es una clase PHP que permite enviar correos electrónicos de manera sencilla y robusta. Ofrece características avanzadas como:
Con PHPMailer puedes evitar muchos de los problemas comunes que surgen al usar la función mail()
de PHP, como la baja tasa de entrega, configuraciones complicadas de encabezados o el manejo de autenticación en servidores externos.
La manera más fácil de instalar PHPMailer es utilizando Composer, el administrador de dependencias para PHP. Si no tienes Composer instalado, puedes descargarlo aquí.
Ejecuta el siguiente comando en la raíz de tu proyecto:
composer require phpmailer/phpmailer
Composer descargará y configurará automáticamente la última versión de PHPMailer.
Si prefieres no usar Composer, también puedes descargar el archivo ZIP de la página oficial de GitHub de PHPMailer y extraer los archivos en tu proyecto. Luego, simplemente incluye los archivos requeridos en tu script de PHP:
require 'ruta/a/PHPMailer/src/PHPMailer.php';
require 'ruta/a/PHPMailer/src/SMTP.php';
require 'ruta/a/PHPMailer/src/Exception.php';
A continuación, se muestra un ejemplo básico de cómo enviar un correo utilizando PHPMailer y un servidor SMTP (Gmail, en este caso) para mayor confiabilidad.
Primero, crea un archivo PHP (por ejemplo, enviarCorreo.php
) e incluye el siguiente código:
<?php
// Importar las clases de PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// Cargar Composer si lo has usado para instalar PHPMailer
require 'vendor/autoload.php';
// Crear una instancia de PHPMailer
$mail = new PHPMailer(true);
try {
// Configuración del servidor SMTP
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com'; // Servidor SMTP de Gmail
$mail->SMTPAuth = true;
$mail->Username = 'tu_correo@gmail.com'; // Tu correo de Gmail
$mail->Password = 'tu_contraseña'; // Tu contraseña de Gmail
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587; // Puerto para el envío SMTP con TLS
// Destinatarios
$mail->setFrom('tu_correo@gmail.com', 'Tu Nombre'); // Remitente
$mail->addAddress('destinatario@correo.com', 'Destinatario'); // Agregar destinatario
// Contenido del correo
$mail->isHTML(true); // Permitir formato HTML
$mail->Subject = 'Asunto del correo';
$mail->Body = 'Este es el <b>mensaje en HTML</b>';
$mail->AltBody = 'Este es el mensaje en texto plano para clientes de correo sin soporte HTML';
// Enviar el correo
$mail->send();
echo 'El mensaje ha sido enviado con éxito';
} catch (Exception $e) {
echo "El mensaje no pudo ser enviado. Mailer Error: {$mail->ErrorInfo}";
}
Si vas a utilizar Gmail como servidor SMTP, debes asegurarte de hacer lo siguiente:
1. Permitir aplicaciones menos seguras: Gmail bloquea el acceso a aplicaciones no verificadas de manera predeterminada. Debes habilitar el acceso a "aplicaciones menos seguras" desde tu cuenta de Gmail en este enlace.
2. Verificación en dos pasos (Opcional): Si tienes habilitada la verificación en dos pasos en Gmail, necesitarás generar una contraseña de aplicación y utilizarla en lugar de la contraseña de tu cuenta.
PHPMailer permite adjuntar archivos al correo de una manera muy simple. Solo necesitas utilizar el método addAttachment()
. A continuación, te muestro cómo agregar un archivo adjunto al correo que envías:
<?php
$mail->addAttachment('/ruta/al/archivo/documento.pdf'); // Adjuntar un archivo
$mail->addAttachment('/ruta/a/la/imagen.jpg', 'nombre_imagen.jpg'); // Adjuntar una imagen con un nombre personalizado
Puedes agregar tantos archivos como sea necesario utilizando el método addAttachment()
múltiples veces.
Aunque en el ejemplo anterior utilizamos Gmail como servidor SMTP, PHPMailer puede conectarse a cualquier servidor SMTP que soporte autenticación. A continuación, te mostramos ejemplos de configuraciones SMTP comunes para otros proveedores de correo electrónico:
$mail->Host = 'smtp.office365.com';
$mail->Username = 'tu_correo@outlook.com';
$mail->Password = 'tu_contraseña';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
$mail->Host = 'smtp.mail.yahoo.com';
$mail->Username = 'tu_correo@yahoo.com';
$mail->Password = 'tu_contraseña';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
Si utilizas un servidor propio o de terceros como SendGrid o Mailgun, deberás obtener la información de configuración de SMTP del proveedor correspondiente.
Cuando trabajes con correos electrónicos, especialmente cuando se manejan contraseñas o datos sensibles, es importante seguir buenas prácticas de seguridad:
PHPMailer es una herramienta robusta y versátil que facilita el envío de correos electrónicos en PHP. Con su capacidad de autenticación SMTP, soporte para adjuntos y compatibilidad con HTML, es una excelente opción para aplicaciones web que requieren enviar correos de manera segura y confiable. Además, su facilidad de uso y flexibilidad hacen que sea una solución preferida para proyectos tanto pequeños como grandes.
Si aún estás utilizando la función mail()
de PHP, te recomendamos migrar a PHPMailer para obtener un mayor control y mejorar la entrega de correos electrónicos desde tu aplicación.
Jorge García
Fullstack developer