El envío de correos electrónicos es una función común en la mayoría de las aplicaciones PHP, ya sea para el registro de usuarios, la actualización de pedidos o los formularios de contacto. Aunque la función integrada mail() de PHP ofrece una forma sencilla de enviar correos electrónicos, tiene un soporte limitado para el formato HTML, los archivos adjuntos y una entrega SMTP fiable.
PHPMailer proporciona una alternativa más flexible y robusta. En esta guía, aprenderás a instalar y configurar PHPMailer, conectarlo con el SMTP de Gmail y enviar correos electrónicos bien formateados con archivos adjuntos utilizando sólo unas pocas líneas de código.
Empecemos…
- ¿Por qué utilizar PHPMailer en lugar de la función mail() de PHP?
- Ventajas de usar PHPMailer
- Envío de correos electrónicos en PHP con PHPMailer
- Enviar correo electrónico utilizando SMTP (Ejemplo de Gmail)
- Personaliza estos campos antes de utilizar el código
- Enviar adjuntos de correo electrónico utilizando SMTP de Gmail y PHPMailer
- Reflexiones finales
¿Por qué utilizar PHPMailer en lugar de la función mail() de PHP?
PHPMailer es una biblioteca PHP que proporciona una forma sencilla de enviar correos electrónicos en PHP. Ofrece una serie de características que la convierten en una alternativa popular a la función mail() incorporada en PHP, como soporte para correos HTML, archivos adjuntos y autenticación SMTP.
PHPMailer es fácil de configurar y utilizar y proporciona un alto nivel de personalización y flexibilidad, lo que lo convierte en una opción popular para los desarrolladores que necesitan enviar correos electrónicos desde sus aplicaciones PHP. También se mantiene y actualiza activamente, por lo que es una opción de correo electrónico fiable y segura.
Aquí tienes una rápida comparación entre PHPMailer y PHP mail:
| Función | PHPMailer | correo() |
| Funcionalidad | Una biblioteca de correo electrónico con todas las funciones que permite enviar correos electrónicos con o sin SMTP | Una función sencilla que permite enviar correos electrónicos mediante la función PHP mail() |
| Complejidad | Más complejo, pero ofrece más funciones y opciones | Más sencillo, con opciones limitadas |
| Soporte SMTP | Admite el envío de correo electrónico a través de SMTP, incluyendo autenticación y encriptación | No admite el envío de correo electrónico a través de SMTP |
| Archivos adjuntos | Admite el envío de archivos adjuntos | No admite el envío de archivos adjuntos |
| Tratamiento de errores | Proporciona mensajes de error detallados e información de depuración | Proporciona información mínima sobre errores |
| Seguridad | Admite encriptación y autenticación al enviar correo electrónico por SMTP | No admite encriptación ni autenticación |
También te puede gustar: Cómo añadir certificados SSL a sitios PHP personalizados
Ventajas de usar PHPMailer
Utilizar PHPMailer tiene varias ventajas sobre la función nativa mail() a la hora de enviar correos electrónicos en PHP:
1. Código más limpio y gestión automática de encabezados
Cuando se utiliza la función mail(), los desarrolladores a menudo tienen que crear manualmente cabeceras complejas -como tipos MIME, límites de contenido y codificación de caracteres- que pueden desordenar el código e introducir errores de formato. PHPMailer se encarga de todo esto entre bastidores, permitiéndote centrarte en el contenido del correo electrónico en lugar de luchar con la sintaxis.
2. Soporte SMTP sin dependencia del servidor
La función mail() depende del agente de transferencia de correo integrado en el servidor (como Sendmail), que no siempre está configurado o es fiable. PHPMailer es compatible con SMTP desde el primer momento y te permite configurarlo todo -host, puerto, método de encriptación, credenciales- directamente dentro de tu script PHP. No necesitas hacer cambios en todo el servidor.
3. Mensajes de error multilingües
PHPMailer proporciona mensajes de error en más de 40 idiomas, lo que lo hace muy adecuado para aplicaciones con usuarios internacionales. Puedes establecer fácilmente el idioma para la gestión de errores, ofreciendo una experiencia más localizada y fácil de usar.
4. Cifrado SSL/TLS para una entrega segura
La seguridad es fundamental a la hora de enviar correos electrónicos. PHPMailer admite cifrado SSL y TLS para las conexiones SMTP, lo que ayuda a proteger tus mensajes de la interceptación durante la transmisión.
5. Correos electrónicos HTML y alternativas de texto sin formato
Aunque técnicamente la función mail() puede enviar correos electrónicos HTML o adjuntos, hacerlo requiere elaborar manualmente mensajes MIME multiparte. PHPMailer lo hace sin esfuerzo: puede enviar tanto una versión HTML como una versión de texto sin formato con una configuración mínima, lo que garantiza una mejor compatibilidad entre dispositivos y clientes de correo electrónico.
Envío de correos electrónicos en PHP con PHPMailer
Ahora te mostraré exactamente cómo configurar y utilizar la biblioteca PHPMailer. Cubriremos todo, desde los primeros pasos hasta el envío de correos electrónicos con archivos adjuntos a través de un servicio fiable como el SMTP de Gmail.
Requisitos previos
Antes de meternos de lleno, pongamos algunas cosas en su sitio. Necesitarás
- Un Servidor Local como XAMPP o MAMP instalado. Esto permite que PHP se ejecute en tu máquina.
- PHP 7.4 o superior (PHPMailer funciona con 5.5+, pero las versiones más recientes son más seguras y fiables).
- Composer instalado (sirve para gestionar las librerías PHP): Obtener Composer
- Un editor de texto como VS Code o Sublime.
- (Opcional pero recomendado) Una cuenta de Gmail para probar el envío de correo SMTP .
Paso 1: Instalar PHPMailer mediante Composer
Muy bien, vamos a introducir PHPMailer en tu proyecto.
Abre tu terminal (Símbolo del sistema, PowerShell o aplicación Terminal), ve a la carpeta de tu proyecto. Por ejemplo, si quieres una carpeta llamada email-tutorial en tu escritorio, harías algo como
cd Desktop mkdir email-tutorial cd email-tutorial

¡Estupendo! Has creado correctamente la carpeta de tu espacio de trabajo y ahora estás listo para empezar a instalar PHPMailer dentro de ella.

Ahora, para instalar PHPMailer, una vez que estés dentro de la carpeta de tu proyecto, escribe (o copia y pega) este comando y pulsa Intro:
composer require phpmailer/phpmailer
Esto descarga PHPMailer y lo configura para ti. Verás una nueva carpeta llamada vendor/ en tu proyecto – ahí es donde Composer guarda tus librerías.


Paso 2: Configurar tus archivos (organizar tu espacio de trabajo)
Ahora que PHPMailer está en tu proyecto, vamos a organizar nuestros archivos. Tu carpeta de proyecto de correo electrónico debería tener ahora este aspecto:
Estructura de la carpeta del proyecto:
- proyecto-email (carpeta principal)
- index.php – Crearemos este archivo para nuestro código de correo electrónico
- vendor – Contiene PHPMailer (creado automáticamente por Composer)
- composer.json – Archivo de configuración (creado automáticamente por Composer)
Sigue adelante y crea un nuevo archivo llamado index.php dentro de tu carpeta email-project. Aquí es donde escribiremos todo nuestro código PHP para enviar correos electrónicos.

Paso 3: Enviar un correo electrónico básico (sin SMTP todavía)
Empecemos con una prueba sencilla. Enviaremos un correo electrónico sin utilizar un servidor de correo especial (SMTP). Esto es sólo para ver si PHPMailer funciona correctamente dentro de tu proyecto.
Abre tu archivo index.php en tu editor de texto y pega este código:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true); // true enables exceptions
try {
// Email headers and body
$mail->setFrom('[email protected]', 'Your Name');
$mail->addAddress('[email protected]', 'Receiver Name');
$mail->addReplyTo('[email protected]', 'Reply Name');
$mail->isHTML(true);
$mail->Subject = 'Test Email using PHPMailer';
$mail->Body = '<b>This is a test email sent from localhost using PHPMailer!</b>';
$mail->AltBody = 'This is a plain text version for non-HTML clients.';
$mail->send();
echo '✅ Email has been sent successfully!';
} catch (Exception $e) {
echo \"❌ Email could not be sent. Error: {$mail->ErrorInfo}\";
}
Guarda tu archivo index.php.
Paso 4: Ejecutar el Servidor Web Integrado de PHP
En CMD (dentro de la carpeta de tu proyecto), inicia el servidor web de PHP:
php -S localhost:8000
Ya lo verás:
PHP 8.x.x Development Server (http://localhost:8000) started

Paso 5: Abre el navegador y prueba
Ir a: http://localhost:8000/index.php
Lo que debería ocurrir
Si todo está bien conectado, o verás:
- ✅ «¡El correo electrónico se ha enviado correctamente!» (si funciona el transporte de correo electrónico)
- ❌ O bien: No se ha podido enviar el correo electrónico. Error: … (probablemente si el SMTP aún no está configurado)
En mi caso, veo esto:

¿Por qué?
Por defecto, esta configuración no utiliza SMTP – y mi configuración local de PHP probablemente no tenga configurado un servidor de correo. Eso es normal. Por eso la mayoría de los desarrolladores utilizan SMTP para enviar correos electrónicos reales.
Ahora abordaremos este problema añadiendo SMTP a continuación. Pero por ahora, esto confirma que tu servidor local funciona, PHP se está ejecutando y PHPMailer está cargado.
Enviar correo electrónico utilizando SMTP (Ejemplo de Gmail)
SMTP (Protocolo Simple de Transferencia de Correo) es la forma estándar de enviar correos electrónicos a través de Internet. Piensa en un servidor SMTP como la oficina de correos real que recoge tu carta y la entrega en el buzón del destinatario.
Utilizar uno garantiza que tus correos electrónicos lleguen a donde tienen que llegar.
Utilizaremos el servidor SMTP de Gmail porque está ampliamente disponible y es una opción fiable para enviar correos electrónicos.
Abre de nuevo tu archivo index.php , borra el código anterior y pega este nuevo código:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
// Server settings
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
// 1. Your Gmail Address
$mail->Username = '[email protected]';
// 2. Your App Password
$mail->Password = 'your_app_password';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
// 4. Name Labels (Optional)
$mail->setFrom('[email protected]', 'Your Name');
$mail->addReplyTo('[email protected]', 'Your Name');
// 3. Recipient Email Address
$mail->addAddress('[email protected]', 'Friend Name');
// 5. Email Content
$mail->isHTML(true);
$mail->Subject = 'Hello from Gmail SMTP!';
$mail->Body = 'This message was sent using Gmail SMTP and PHPMailer!';
$mail->AltBody = 'Gmail SMTP version of the message.';
$mail->send();
echo '✅ Message sent using SMTP!';
} catch (Exception $e) {
echo "❌ Failed to send email. Error: {$mail->ErrorInfo}";
}
Importante: Configuración de la contraseña de la aplicación para Gmail
Si tienes activada la verificación en dos pasos (2FA) en tu Gmail (y deberías tenerla), no puedes utilizar tu contraseña habitual de Gmail. Tienes que utilizar una contraseña de aplicación.
He aquí cómo conseguirlo:
- Visita: https://myaccount.google.com/apppasswords.
- Inicia sesión y verifícate.
- En la casilla Nombre de la aplicación, escribe algo como PHPMailer (o cualquier cosa significativa para ti, como «Mi formulario de contacto PHP»).
- Haz clic en Crear.
- Google te dará una contraseña de 16 caracteres.

- Guárdalo en algún sitio. Lo necesitaremos cuando modifiquemos nuestro archivo index.php.
Personaliza estos campos antes de utilizar el código
Para enviar correctamente un correo electrónico utilizando SMTP de Gmail y PHPMailer, asegúrate de actualizar los siguientes campos:
1. Tu dirección de Gmail
Sustituye todas las instancias de [email protected] por tu dirección real de Gmail (la misma que utilizaste para generar la contraseña de la aplicación).
Encontrarás esto en:
$mail->Username = '[email protected]'; $mail->setFrom('[email protected]', 'Your Name'); $mail->addReplyTo('[email protected]', 'Your Name');
2. La contraseña de tu aplicación
Ahora, la App Password que guardamos antes, sustituye ‘your_app_password’ por la contraseña que obtuviste:
$mail->Contraseña = ‘tu_contraseña_app’;
No utilices aquí tu contraseña real de acceso a Gmail:utiliza sólo la contraseña de 16 caracteres de la aplicación proporcionada por Google.
3. Dirección de correo electrónico del destinatario
Cambia [email protected] por la dirección de correo electrónico a la que quieras enviar el mensaje:
$mail->addAddress(‘[email protected]’, ‘Friend Name’);
Si es necesario, puedes añadir más destinatarios duplicando esta línea con direcciones diferentes.
4. Etiquetas con nombre (Opcional)
Actualiza las etiquetas «Tu nombre» y «Nombre de amigo» con los nombres de remitente/destinatario que quieras mostrar en el cliente de correo electrónico.
5. Contenido del correo electrónico
Siéntete libre de cambiar el asunto y el cuerpo del texto para que coincidan con tu propio mensaje:
$mail->Subject = 'Hello from Gmail SMTP!'; $mail->Body = 'This message was sent using Gmail SMTP and PHPMailer!'; $mail->AltBody = 'Gmail SMTP version of the message.';
Una vez actualizados todos estos campos con tus datos reales, guarda el archivo.
Pruébalo todo
Ahora vamos a probarlo todo.
Abre CMD y navega hasta la carpeta de tu proyecto:
cd path\to\your\email-tutorial
A continuación, ejecuta el script:
php index.php

¡Éxito! Puedes confirmar que todo ha funcionado comprobando las bandejas de entrada del remitente y del destinatario para ver si el correo electrónico se ha entregado a través del SMTP de Google.
Bandeja de entrada del remitente:

Bandeja de entrada del receptor:

Enviar adjuntos de correo electrónico utilizando SMTP de Gmail y PHPMailer
Una vez que tengas funcionando tu script básico de correo electrónico, el envío de archivos adjuntos está a sólo una línea más de distancia, pero vamos a repasar la configuración completa para asegurarnos de que es hermética.
1. Elige tu archivo
Coloca el archivo que quieras adjuntar en la carpeta de tu proyecto para simplificar las rutas.
Por ejemplo, si quieres adjuntar un PDF llamado ejemplo.pdf, colócalo aquí:
C:\Usuarios\abdulrehman\Escritorio\correo-tutorial\muestra.pdf
Nota: El nombre de tu archivo puede ser cualquiera… no tiene por qué ser sample.pdf. He adjuntado una guía en PDF que escribimos, como puedes ver en la captura de pantalla de abajo.

2. Actualiza tu código
En tu archivo index.php , desplázate hacia abajo hasta donde se configura el objeto $mail. Justo después de haber añadido el destinatario, pero antes de enviar el correo electrónico, incluye esta línea:
$mail->addAttachment('sample.pdf');
Esto adjuntará el archivo llamado muestra.pdf situado en la misma carpeta que tu script.
3. Verifica la ruta del archivo (¡Importante!)
Asegúrate:
- El archivo no está abierto en ningún programa.
- El nombre coincide exactamente (distingue mayúsculas de minúsculas).
- Si está en una subcarpeta, incluye la ruta:
$mail->addAttachment('docs/report2024.pdf');
4. Ejecuta de nuevo tu script
Utiliza CMD para navegar hasta la carpeta del proyecto:
cd C:\Users\abdulrehman\Desktop\email-tutorial
La carrera:
php index.php
Si todo es correcto, ya lo verás:
✅ ¡Mensaje enviado mediante SMTP!
5. Comprueba tu correo electrónico
Abre la bandeja de entrada del destinatario y comprueba si ha recibido el archivo adjunto. Como puedes ver en la captura de pantalla siguiente, nuestro destinatario ha recibido el archivo PDF que adjuntamos en nuestro script.

Potencia tus proyectos PHPMailer con alojamiento PHP rápido
Da vida a tus funciones de correo electrónico PHP con un alojamiento PHP ultrarrápido. Lanza tus aplicaciones sin problemas con servidores fiables hechos para desarrolladores.
Reflexiones finales
A estas alturas, ya habrás visto cómo PHPMailer puede simplificar el envío de correos electrónicos en PHP. Desde configurar un script básico hasta configurar el SMTP de Gmail e incluso enviar archivos adjuntos, tienes una base sólida para incorporar funciones de correo electrónico fiables a tus proyectos.
En lugar de luchar con la función mail() nativa de PHP o lidiar con las limitaciones del lado del servidor, PHPMailer te ofrece una forma más limpia, segura y flexible de gestionar los correos electrónicos, sin complejidad adicional.
A medida que tus aplicaciones crecen, ejecutarlas en una plataforma de alojamiento que admita configuraciones SMTP y bibliotecas PHP como PHPMailer puede ahorrarte horas de resolución de problemas.
Con Cloudways PHPobtienes entornos PHP preconfigurados, soporte SMTP integrado a través de servicios como SendGrid o Mailgun, y una pila de rendimiento optimizada para una ejecución rápida. Esto significa menos tiempo para configurar el servidor y más tiempo para escribir código limpio y eficiente.
Preguntas frecuentes
Q. ¿Qué hace PHPMailer?
PHPMailer es una popular biblioteca PHP que te permite enviar correos electrónicos directamente desde tus aplicaciones. Soporta HTML, adjuntos, autenticación SMTP, y hace que el manejo del correo electrónico sea más fácil que utilizando la función mail() incorporada en PHP.
Q. ¿Es seguro PHPMailer?
Sí, PHPMailer admite la transmisión segura de correo electrónico mediante encriptación TLS y SSL. Cuando se configura correctamente, proporciona una forma fiable de enviar información sensible por correo electrónico utilizando servidores SMTP autenticados.
Q. ¿Cómo configuro Outlook SMTP con PHPMailer?
Para enviar correos electrónicos utilizando Outlook con PHPMailer, configura estos ajustes SMTP:
$mail->isSMTP(); $mail->Host = 'smtp.office365.com'; $mail->SMTPAuth = true; $mail->Username = '[email protected]'; $mail->Password = 'your-password'; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587;
Esta configuración te permite enviar correos electrónicos de forma segura a través del servidor SMTP de Outlook.
Q. ¿Utiliza PHPMailer Sendmail?
PHPMailer puede utilizar Sendmail, pero es más habitual utilizarlo con SMTP para un mejor control, seguridad y compatibilidad. Sendmail es compatible como alternativa o en configuraciones más sencillas.
Q. ¿Para qué sirve PHPMailer?
PHPMailer gestiona el envío de correo electrónico en aplicaciones PHP. Admite correos de texto plano y HTML, archivos adjuntos y autenticación SMTP, lo que lo convierte en una alternativa más capaz y fácil de usar que la función nativa mail().
Q. ¿Cuál es el mejor método para enviar correos electrónicos utilizando PHP?
Para un uso básico, la función mail() de PHP funciona. Pero para un envío de correo electrónico seguro, flexible y rico en funciones, PHPMailer es la mejor opción. Admite SMTP, contenido HTML, archivos adjuntos y un mejor tratamiento de errores.
Start Growing with Cloudways Today.
Our Clients Love us because we never compromise on these
Abdul Rehman
Abdul es un experto en tecnología, aficionado al café y al marketing creativo al que le encanta estar al día de las últimas actualizaciones de software y aparatos tecnológicos. También es un hábil escritor técnico capaz de explicar conceptos complejos de forma sencilla para un público amplio. Abdul disfruta compartiendo sus conocimientos sobre el sector de la Nube a través de manuales de usuario, documentación y entradas de blog.