Cómo enviar correos desde WordPress sin instalar servidores SMTP

Hola a todos.

¿Te suena familiar esto? Estás desarrollando en tu entorno local con XAMPP, WAMP, MAMP o cualquier otro servidor y cada vez que tu WordPress intenta enviar un correo… silencio absoluto. No llega nada. El formulario de contacto funciona, pero los emails se van al limbo digital.

Hace 11 años escribí sobre cómo configurar un servidor SMTP para enviar emails desde localhost en Linux usando ssmtp. Era 2014, usaba Ubuntu, y los tiempos eran más simples 😅

Pero el mundo ha cambiado, y hay una forma mucho más elegante de solucionar esto sin instalar ni configurar servidores de correo locales, independientemente de si trabajas en Windows, Mac o Linux.


La solución moderna: Usar Gmail como servidor SMTP

En lugar de montar toda la infraestructura SMTP local, vamos a aprovechar que ya tienes una cuenta de Gmail y configurar WordPress para que use los servidores de Google directamente.

¿Por qué esta solución es mejor?

  • Multiplataforma: Funciona igual en Windows, Mac y Linux
  • Cero instalaciones: No tocas nada en tu sistema operativo
  • Funciona al 100%: Los emails llegan realmente
  • Más realista: Tu entorno local se comporta como producción
  • Debugging fácil: Si algo falla, Google te da errores claros

Paso 1: Conseguir una contraseña de aplicación de Gmail

Aquí viene la parte que mucha gente se salta y luego se frustra. NO puedes usar tu contraseña normal de Gmail. Necesitas generar una «contraseña de aplicación».

1.1 Activar la verificación en 2 pasos

Ve a myaccount.google.com → Seguridad → Verificación en 2 pasos

Si no la tienes activada, actívala. Necesitarás tu teléfono para recibir códigos SMS.

1.2 Generar la contraseña de aplicación

Una vez activada la verificación en 2 pasos:

  1. Ve a SeguridadContraseñas de aplicaciones
  2. Selecciona «Correo» y elige tu sistema operativo o «Otro»
  3. Dale un nombre descriptivo como «WordPress Local» para recordar qué es
  4. Haz clic en Generar

Te dará algo como: abcd efgh ijkl mnop

¡IMPORTANTE! Guarda esta contraseña inmediatamente. Solo la verás una vez.


Paso 2: Configurar WordPress

Ahora viene la parte divertida. Vamos a interceptar todos los emails que WordPress intente enviar y redirigirlos a través de Gmail.

Ve a tu archivo functions.php de tu tema activo y agrega este código:

// Configuración SMTP para Gmail en desarrollo local
add_action('phpmailer_init', function($phpmailer) {
    $phpmailer->isSMTP();
    $phpmailer->Host = 'smtp.gmail.com';
    $phpmailer->Port = 587;
    $phpmailer->Username = 'tu-email@gmail.com';           // Cambia por tu email
    $phpmailer->Password = 'abcd efgh ijkl mnop';          // Tu contraseña de aplicación
    $phpmailer->SMTPAuth = true;
    $phpmailer->SMTPSecure = 'tls';
    
    // Forzar el remitente
    $phpmailer->setFrom('tu-email@gmail.com', 'Tu Nombre - Desarrollo');
});

// Cambiar el email por defecto de WordPress
add_filter('wp_mail_from', function($from_email) {
    return 'tu-email@gmail.com';
});

add_filter('wp_mail_from_name', function($from_name) {
    return 'Tu Nombre - Desarrollo Local';
});

Paso 3: Probar que funciona

La forma más sencilla de probar es añadir temporalmente este código al final de tu functions.php (después del código SMTP):

// CÓDIGO DE PRUEBA - BORRAR DESPUÉS DE PROBAR
add_action('wp_footer', function() {
    if (isset($_GET['test_email']) && current_user_can('administrator')) {
        $resultado = wp_mail(
            'tu-email@gmail.com',
            'Test desde WordPress local',
            '¡Funciona! Los emails desde tu entorno local ya se envían correctamente.'
        );
        
        echo '<div style="position:fixed; top:20px; right:20px; background:#28a745; color:white; padding:15px; border-radius:5px; z-index:9999;">';
        if($resultado) {
            echo "✅ Email enviado correctamente!";
        } else {
            echo "❌ Error al enviar el email";
        }
        echo '</div>';
    }
});

Luego ve a cualquier página de tu sitio (estando logueado como administrador) y añade ?test_email=1 al final de la URL. Por ejemplo: http://localhost/tu-proyecto/?test_email=1

Verás una notificación en la esquina superior derecha confirmando si el email se envió correctamente.

Recuerda eliminar este código de prueba una vez que confirmes que funciona.


Errores comunes y sus soluciones

Error: «Invalid address: (From): wordpress@localhost»

Este es el error más típico. WordPress está intentando usar una dirección From inválida. La solución está en usar setFrom() y los filtros de WordPress como muestro en el código anterior.

Error: «Authentication failed»

  • Verifica que hayas copiado bien la contraseña de aplicación (sin espacios extra)
  • Asegúrate de que la verificación en 2 pasos esté activada
  • Comprueba que el email está bien escrito

Los emails no llegan

  • Revisa la carpeta de spam
  • Verifica que estás usando el puerto 587 y TLS
  • Asegúrate de que tu conexión a internet funciona

¿Funciona en admin y frontend?

, este código funciona en ambos lugares. El functions.php se carga tanto en el panel de administración como en la parte pública, por lo que cualquier email que WordPress envíe (formularios de contacto, recuperación de contraseñas, notificaciones, etc.) usará tu configuración SMTP.


Reflexión: Cómo han cambiado las cosas

Comparando con mi post de 2014, es curioso ver cómo hemos pasado de instalar y configurar servidores completos a simplemente usar APIs y servicios externos. La solución de hoy es:

  • Más rápida de implementar
  • Más confiable
  • Requiere menos conocimientos de sistemas
  • Es más mantenible

Esto refleja una tendencia general en el desarrollo: menos infraestructura propia, más servicios en la nube.


¿Y en producción?

Para producción NO uses Gmail personal. Considera servicios profesionales como:

  • SendGrid
  • Mailgun
  • Amazon SES
  • PostMark

Pero para desarrollo local si no quieres complicarte mucho, Gmail es perfecto.


Y eso es todo. Con esto ya puedes olvidarte de los problemas de emails en tu entorno de desarrollo local.

¿Te ha funcionado? ¿Has tenido algún problema? Cuéntamelo en los comentarios.

También puedes seguirme en Twitter en @revigames y no olvides que me ayudas mucho si compartes este post en las redes sociales.

¿Necesitas un presupuesto para un desarrollo WordPress a medida?

¿Quieres un plugin a medida que realice una funcionalidad concreta que necesitas para tu WordPress?

Solicita un presupuesto sin compromiso

Un saludo, y si aún no lo has hecho no olvides suscribirte a mi blog para no perderte los próximos posts  :-),

También puedes seguirme en Twitter en ‎@revi_apps y no olvides que me ayudas mucho si compartes este post en las redes sociales.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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

Scroll al inicio