Enviar correos con PHPMailer (con protección anti-spam)

  Desarrollo Web

En este tutorial aprenderás a enviar correos desde PHP usando PHPMailer, sin necesidad de Composer ni acceso SSH, ideal para planes de hosting compartido.
Además, añadiremos una protección anti-spam para evitar envíos automáticos.

✅ Requisitos

  • Hosting con PHP 7.4 o superior
  • Acceso a cPanel o File Manager, o FTP
  • Una cuenta de correo configurada en el hosting
  • PHPMailer (descarga manual)

Estructura de archivos recomendada

public_html/
├── form.html
├── ejemplo_envio.php
└── lib/
    └── PHPMailer/
        └── src/
            ├── PHPMailer.php
            ├── SMTP.php
            └── Exception.php

💡 Consejo de seguridad:
Si es posible, coloca la carpeta lib/ fuera de public_html.

📦 Paso 1: Descargar PHPMailer

  1. Ve al sitio oficial:
    https://github.com/PHPMailer/PHPMailer
  2. Descarga la versión estable (ZIP)
  3. Extrae y sube solo esta carpeta:
PHPMailer/src/


🧾 Paso 2: Crear el formulario HTML (form.html)

Incluimos un campo honeypot invisible para bloquear bots.

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Formulario de contacto</title>
    <style>
        .hp { display: none; }
    </style>
</head>
<body>

<h2>Formulario de contacto</h2>

<form method="post" action="ejemplo_envio.php">
    <label>Email:</label><br>
    <input type="email" name="email" required><br><br>

    <label>Mensaje:</label><br>
    <textarea name="mensaje" rows="5" required></textarea><br><br>

    <!-- Honeypot anti-spam -->
    <div class="hp">
        <input type="text" name="website">
    </div>

    <button type="submit">Enviar</button>
</form>

</body>
</html>

🔐 ¿Qué es esto?
Los humanos no ven el campo website, pero los bots sí.
Si viene relleno → se bloquea el envío.


✉️ Paso 3: Script PHP con PHPMailer (ejemplo_envio.php)

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// Cargar PHPMailer manualmente
require __DIR__ . '/lib/PHPMailer/src/Exception.php';
require __DIR__ . '/lib/PHPMailer/src/PHPMailer.php';
require __DIR__ . '/lib/PHPMailer/src/SMTP.php';

// Solo permitir POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    exit('Acceso no permitido');
}

// Honeypot anti-spam
if (!empty($_POST['website'])) {
    exit('Spam detectado');
}

// Validar datos
$emailDestino = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$mensaje      = trim($_POST['mensaje']);

if (!$emailDestino || empty($mensaje)) {
    exit('Datos inválidos');
}

$mail = new PHPMailer(true);

try {
    // CONFIGURACIÓN SMTP
    $mail->isSMTP();
    $mail->Host       = 'mail.tudominio.com';
    $mail->SMTPAuth   = true;
    $mail->Username   = '[email protected]';
    $mail->Password   = 'PASSWORD_DEL_CORREO';
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port       = 587;

    // DATOS DEL MENSAJE
    $mail->setFrom('[email protected]', 'Formulario Web');
    $mail->addAddress($emailDestino);

    $mail->Subject = 'Mensaje desde el formulario';
    $mail->Body    = $mensaje;

    $mail->send();
    echo '✅ Mensaje enviado correctamente';

} catch (Exception $e) {
    echo '❌ Error al enviar el mensaje';
}


🔐 Medidas anti-spam incluidas

✔ Honeypot invisible (muy efectivo)
✔ Validación de método POST
✔ Validación de email
✔ SMTP autenticado

👉 En la mayoría de los casos NO necesitas CAPTCHA.


🧩 (Opcional) Protección adicional con Google reCAPTCHA

Si el formulario es público y recibe mucho spam, puedes añadir:

  • Google reCAPTCHA v2 o v3
  • Validación server-side antes de enviar el correo

📌 Recomendado solo para sitios con alto tráfico.


🧠 Errores comunes y solución

ProblemaSolución
No llegan correosRevisar SMTP / contraseña
Va a spamConfigurar SPF y DKIM
Error de conexiónRevisar puerto 587
Página en blancoActivar errores PHP

📌 Conclusión

  • PHPMailer no requiere Composer
  • Funciona perfectamente en hosting compartido
  • Es seguro y fácil de implementar
  • El honeypot bloquea la mayoría del spam
  • Ideal para formularios de contacto

📞 ¿Necesitas ayuda?

Si tienes problemas con el envío de correos o la configuración SMTP, abre un ticket en nuestro soporte técnico y con gusto te ayudaremos.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.