Volver a la página principal
lunes 23 septiembre 2024
115

Cómo enviar correos electrónicos en PHP usando PHPMailer

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.

¿Qué es PHPMailer?

PHPMailer es una clase PHP que permite enviar correos electrónicos de manera sencilla y robusta. Ofrece características avanzadas como:

  • Envío de correos a través de SMTP (Simple Mail Transfer Protocol).
  • Autenticación mediante usuario y contraseña.
  • Soporte para cifrado SSL y TLS, mejorando la seguridad del correo electrónico.
  • Adjuntos: enviar archivos, imágenes incrustadas y más.
  • Personalización avanzada: permite configurar HTML, texto plano, codificación de caracteres, entre otras opciones.

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.

Instalación de PHPMailer

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í.

1. Instalar PHPMailer con Composer

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.

2. Descargar PHPMailer manualmente

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';

Configuración básica para enviar correos con PHPMailer

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.

1. Crear el archivo de envío

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}";
}

2. Configuración de Gmail

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.

Envío de correos con adjuntos

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.

Uso de SMTP con otras plataformas

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:

SMTP de Outlook

$mail->Host = 'smtp.office365.com';
$mail->Username = 'tu_correo@outlook.com';
$mail->Password = 'tu_contraseña';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;

SMTP de Yahoo

$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;

SMTP de servidores personalizados

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.

Mejoras de seguridad al enviar correos

Cuando trabajes con correos electrónicos, especialmente cuando se manejan contraseñas o datos sensibles, es importante seguir buenas prácticas de seguridad:

  • Usa cifrado (SSL/TLS) siempre que sea posible para proteger los datos durante la transmisión.
  • No almacenes contraseñas en texto plano. Usa variables de entorno o almacena contraseñas en archivos de configuración fuera del directorio público.
  • Valida las direcciones de correo electrónico que recibas de los usuarios para evitar vulnerabilidades de inyección de correo electrónico.

Conclusión

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.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer