Envío de Email en PHP: PHPMailer, mail() y alternativas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Envío de Email en PHP: desde mail() integrada hasta potentes librerías



El envío de correos electrónicos es una de las funciones clave de cualquier aplicación web: registro de usuarios, recuperación de contraseñas, notificaciones, boletines. En PHP existen varios enfoques: desde la función integrada más simple mail() hasta librerías especializadas como PHPMailer y SwiftMailer. En este artículo analizaremos cada método en detalle, mostraremos ejemplos de código y daremos recomendaciones para elegir.



1. Función integrada mail()



La función mail() es la forma más sencilla de enviar un correo. Utiliza el servidor de correo configurado en la configuración de PHP (sendmail_path o SMTP). Sin embargo, sus capacidades son limitadas y no admite requisitos modernos: formato HTML, archivos adjuntos, autenticación SMTP.



Ejemplo básico

<?php$to = 'user@example.com';$subject = 'Asunto del correo';$message = '¡Hola! Este es un correo de prueba.';$headers = 'From: no-reply@mysite.ru' . "\\r" .    'Reply-To: support@mysite.ru' . "\\r" .    'X-Mailer: PHP/' . phpversion();

if (mail($to, $subject, $message, $headers)) { echo 'Correo enviado';} else { echo 'Error al enviar';}?>


Desventajas de mail()

  • Sin soporte para correos HTML (es necesario indicar manualmente Content-Type: text/html)
  • Imposibilidad de adjuntar archivos sin manipulaciones complejas con MIME
  • Sin cifrado ni autenticación SMTP
  • Los correos suelen terminar en spam por falta de encabezados correctos
  • Difícil depurar errores


Para proyectos modernos, no se recomienda mail(). Es mejor usar librerías especializadas.



2. PHPMailer — el estándar de oro



PHPMailer es la librería más popular para enviar correos electrónicos en PHP. Soporta SMTP, SSL/TLS, correos HTML, archivos adjuntos, texto alternativo, múltiples destinatarios y mucho más. Se instala a través de Composer:



composer require phpmailer/phpmailer


Ejemplo de envío a través de SMTP (Gmail)

<?phpuse PHPMailer\\PHPMailer\\PHPMailer;use PHPMailer\\PHPMailer\\SMTP;use PHPMailer\\PHPMailer\\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

try { // Configuración del servidor $mail->SMTPDebug = SMTP::DEBUG_SERVER; $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = 'your@gmail.com'; $mail->Password = 'your-app-password'; // contraseña de aplicación $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $mail->Port = 465;

// Remitente y destinatarios $mail->setFrom('from@example.com', 'Remitente'); $mail->addAddress('user@example.com', 'Destinatario'); $mail->addReplyTo('info@example.com', 'Información');

// Archivos adjuntos (opcional) $mail->addAttachment('/path/to/file.pdf', 'document.pdf');

// Contenido $mail->isHTML(true); $mail->Subject = 'Asunto del correo'; $mail->Body = '<h1>¡Hola!</h1><p>Este correo contiene <b>HTML</b>.</p>'; $mail->AltBody = '¡Hola! Esta es la versión de texto del correo.';

$mail->send(); echo 'Correo enviado';} catch (Exception $e) { echo "Error: {$mail->ErrorInfo}";}?>


Ventajas de PHPMailer

  • Soporte completo de SMTP con autenticación
  • Generación automática de encabezados MIME
  • Soporte para archivos adjuntos e imágenes incrustadas
  • Trabajo con versión HTML y texto del correo
  • Mensajes de error detallados
  • Soporte activo de la comunidad


3. SwiftMailer — alternativa con arquitectura flexible



SwiftMailer es otra librería potente (ahora reemplazada por

Recommendations