Envío de correo electrónico en PHP: resumen de bibliotecas y herramientas
El envío de correos electrónicos es una parte esencial de cualquier aplicación web: registro de usuarios, restablecimiento de contraseña, notificaciones, campañas de marketing. En PHP existen varias formas de implementar el envío de correos: desde la función incorporada mail() hasta bibliotecas especializadas como PHPMailer y SwiftMailer. En este artículo analizaremos en detalle cada herramienta, sus ventajas, desventajas y proporcionaremos ejemplos prácticos de código.
1. La función incorporada mail()
La forma más sencilla es usar la función nativa de PHP mail(). No requiere instalar bibliotecas adicionales, pero tiene limitaciones importantes.
Sintaxis
mail($to, $subject, $message, $headers, $parameters);Ejemplo de envío de un correo de texto simple
<?php$to = 'user@example.com';$subject = 'Saludo';$message = '¡Hola! Este es un correo de prueba.';$headers = 'From: noreply@pythonlib.ru' . "\\r" . 'Reply-To: support@pythonlib.ru' . "\\r" . 'X-Mailer: PHP/' . phpversion();
if(mail($to, $subject, $message, $headers)) { echo 'Correo enviado.';} else { echo 'Error al enviar.';}?>Desventajas de mail()
- Depende de la configuración del servidor (sendmail, postfix, etc.) — a menudo termina en spam.
- No admite correos HTML ni archivos adjuntos sin crear manualmente los encabezados MIME.
- No tiene soporte para autenticación SMTP.
- Es difícil depurar errores.
Debido a estas limitaciones, para proyectos serios se recomienda usar bibliotecas especializadas.
2. PHPMailer — la biblioteca más popular
PHPMailer es una biblioteca potente y fácil de usar para enviar correos electrónicos en PHP. Soporta HTML, archivos adjuntos, autenticación SMTP, cifrado TLS/SSL y muchas otras funciones.
Instalación
composer require phpmailer/phpmailerO descárguela manualmente desde GitHub.
Ejemplo de envío de un correo HTML a través de SMTP de Gmail
<?phpuse PHPMailer\\PHPMailer\\PHPMailer;use PHPMailer\\PHPMailer\\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try { // Configuración del servidor $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = 'your-email@gmail.com'; $mail->Password = 'your-app-password'; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587;
// Remitente y destinatario $mail->setFrom('from@example.com', 'Su nombre'); $mail->addAddress('user@example.com', 'Destinatario');
// Archivos adjuntos $mail->addAttachment('/path/to/file.pdf', 'document.pdf');
// Contenido $mail->isHTML(true); $mail->Subject = 'Saludo desde PHPMailer'; $mail->Body = '<h1>Título</h1><p>Este es un correo <b>HTML</b>.</p>'; $mail->AltBody = 'Versión de texto para clientes de correo sin soporte HTML';
$mail->send(); echo 'Correo enviado.';} catch (Exception $e) { echo "Error: {$mail->ErrorInfo}";}?>Ventajas de PHPMailer
- API simple y clara.
- Soporte para todos los protocolos de correo modernos.
- Codificación automática de archivos adjuntos.
- Buena documentación y gran comunidad.
3. SwiftMailer — una alternativa flexible
SwiftMailer es otra biblioteca popular que proporciona una interfaz orientada a objetos para enviar correos. A diferencia de PHPMailer, utiliza el concepto de "transportes" (Transport) y "mensajes" (Message).
Instalación
composer re También en la biblioteca
better-sqlite3-typescript para TypeScript: guía completa con ejemplos
GraphQL en Swift: Guía completa de la biblioteca Apollo iOS
Event Bus y el patrón Observer en Go (Golang): implementación y ejemplos
Event Bus y el patrón Observer en JavaScript (Node.js): implementación y ejemplos