Como integrar un proveedor SMTP desde PHP en WordPress en WordPress

Contents

Introducción

Enviar correos desde WordPress mediante PHP por defecto usa la función wp_mail(), que a su vez utiliza PHPMailer integrado. Sin embargo, la configuración por defecto depende del servidor (sendmail o mail()) y suele presentar problemas de entrega y de autenticación. Integrar un proveedor SMTP desde PHP en WordPress garantiza mejor entrega, autenticación segura y trazabilidad. Este tutorial explica con detalle cómo hacerlo de forma manual (sin depender de plugins de terceros) y ofrece ejemplos listos para poner en producción.

Requisitos previos

  • Acceso al panel de administración de WordPress y a los archivos del sitio (FTP, SFTP o administrador de archivos).
  • Credenciales SMTP del proveedor: host, puerto, usuario, contraseña y método de cifrado (TLS/SSL).
  • Opcional: acceso para editar wp-config.php (recomendado para guardar credenciales de forma segura).
  • Conocimiento básico de PHP y del hook system de WordPress.

Visión general de la integración

La forma recomendada y más limpia de configurar SMTP en WordPress sin plugins es usar el hook phpmailer_init para modificar el objeto PHPMailer que WordPress utiliza internamente. Complementariamente, se usan los filtros wp_mail_from y wp_mail_from_name para ajustar el remitente y su nombre. La ventaja es que todas las llamadas a wp_mail() usarán la configuración SMTP que definamos.

Buenas prácticas de seguridad

  • No incluir credenciales en el tema (functions.php) si el tema se actualiza con frecuencia. Preferible: definir constantes en wp-config.php o utilizar variables de entorno.
  • Asegurar permisos de archivo adecuados en wp-config.php y en cualquier archivo que contenga credenciales.
  • Si usa Gmail u otros proveedores con 2FA, genere una contraseña de aplicación o configure OAuth2 (este tutorial cubre configuración básica con usuario/contraseña).

Implementación paso a paso (manual)

  1. Definir credenciales de forma segura en wp-config.php (recomendado). Añade estas líneas antes de la sentencia / Thats all, stop editing! /

    // Configuración SMTP para WordPress
    define(WP_SMTP_HOST, smtp.ejemplo.com)
    define(WP_SMTP_PORT, 587)             // 587 para TLS, 465 para SSL
    define(WP_SMTP_USER, usuario@ejemplo.com)
    define(WP_SMTP_PASS, contraseña_segura)
    define(WP_SMTP_SECURE, tls)         // tls, ssl o  (sin cifrado)
    define(WP_SMTP_AUTH, true)            // true si requiere autenticación
    define(WP_SMTP_FROM, no-reply@ejemplo.com)
    define(WP_SMTP_FROM_NAME, Mi Sitio Web)
  2. Crear un pequeño plugin o usar functions.php del tema hijo. Recomiendo un plugin simple para no perder la configuración al cambiar de tema. Ejemplo de uso del hook phpmailer_init:

    isSMTP()
        phpmailer->Host       = WP_SMTP_HOST
        phpmailer->SMTPAuth   = WP_SMTP_AUTH
        phpmailer->Port       = WP_SMTP_PORT
        phpmailer->Username   = WP_SMTP_USER
        phpmailer->Password   = WP_SMTP_PASS
        phpmailer->SMTPSecure = WP_SMTP_SECURE // tls o ssl o 
        phpmailer->CharSet    = UTF-8
    
        // Opcional: forzar uso de TLS y ajustar opciones de verificación
        phpmailer->SMTPAutoTLS = true
    
        // Evitar problemas con certificados autofirmados (solo si lo necesitas).
        // En producción, intenta no deshabilitar la verificación SSL.
        phpmailer->SMTPOptions = array(
            ssl => array(
                verify_peer       => true,
                verify_peer_name  => true,
                allow_self_signed => false
            )
        )
    }
  3. Configurar el remitente predeterminado:

    
    
  4. Probar envío con wp_mail():

    
    

Consejos y ajustes para proveedores comunes

  • Gmail / Google Workspace: usar puerto 587 con TLS o 465 con SSL. Si la cuenta tiene 2FA, generar una contraseña de aplicación. Google recomienda OAuth2 para producción.
  • Office365 / Microsoft 365: puerto 587 con STARTTLS (SMTPSecure = tls). A veces requieren políticas específicas en el tenant.
  • Proveedores SMTP dedicados (SendGrid, Mailgun, Amazon SES): muchos ofrecen SMTP con autenticación. Amazon SES puede requerir verificación adicional y configuración de cabeceras.

Registro y resolución de problemas

  • Activa WP_DEBUG y WP_DEBUG_LOG en wp-config.php para capturar errores: define(WP_DEBUG, true) define(WP_DEBUG_LOG, true)
  • Revisa el archivo wp-content/debug.log para mensajes relacionados con PHPMailer o wp_mail.
  • Si recibes error de autenticación, verifica usuario/contraseña y que el proveedor permite conexiones desde tu servidor (IP bloqueada por el proveedor o reglas de firewall).
  • Si aparece error de certificado SSL, revisa SMTPOptions para entornos de pruebas podrías temporalmente permitir self-signed, pero en producción debes mantener verify_peer = true.
  • Comprueba los logs del proveedor SMTP (si están disponibles) para ver motivos de rechazo o fila de envío.

Ejemplo completo: plugin listo para usar

Este plugin puede colocarse en wp-content/plugins/wp-smtp-config/wp-smtp-config.php y activarse desde el panel de administración.

isSMTP()
    phpmailer->Host       = WP_SMTP_HOST
    phpmailer->SMTPAuth   = defined(WP_SMTP_AUTH) ? WP_SMTP_AUTH : true
    phpmailer->Port       = defined(WP_SMTP_PORT) ? WP_SMTP_PORT : 587
    phpmailer->Username   = defined(WP_SMTP_USER) ? WP_SMTP_USER : 
    phpmailer->Password   = defined(WP_SMTP_PASS) ? WP_SMTP_PASS : 
    phpmailer->SMTPSecure = defined(WP_SMTP_SECURE) ? WP_SMTP_SECURE : tls
    phpmailer->CharSet    = UTF-8
    phpmailer->SMTPAutoTLS = true

    phpmailer->SMTPOptions = array(
        ssl => array(
            verify_peer       => true,
            verify_peer_name  => true,
            allow_self_signed => false
        )
    )
}

function wp_smtp_mail_from( original_email_address ) {
    if ( defined(WP_SMTP_FROM)  WP_SMTP_FROM ) {
        return WP_SMTP_FROM
    }
    return original_email_address
}

function wp_smtp_mail_from_name( original_email_from ) {
    if ( defined(WP_SMTP_FROM_NAME)  WP_SMTP_FROM_NAME ) {
        return WP_SMTP_FROM_NAME
    }
    return original_email_from
}

Notas finales y recomendaciones

Integrar SMTP a nivel de código te da control y evita depender de plugins de terceros, además de mejorar la entrega de correos. Para entornos de alto volumen o si necesitas funcionalidad avanzada (plantillas, colas, tracking), valora usar APIs nativas del proveedor (por ejemplo API REST de SendGrid, Mailgun o SES) en lugar de SMTP. Para Gmail en producción, considera OAuth2 porque es más seguro que usar contraseñas en texto.

Recapitulación rápida

  • Define credenciales en wp-config.php de forma segura.
  • Usa el hook phpmailer_init para configurar PHPMailer dentro de WordPress.
  • Ajusta wp_mail_from y wp_mail_from_name para establecer remitente coherente.
  • Activa logs y revisa tanto los registros de WordPress como los del proveedor SMTP si hay problemas.

Implementando los pasos anteriores dispondrás de una configuración SMTP robusta, segura y fácil de mantener sobre la que todas las llamadas a wp_mail() del sitio confiarán para enviar correo de manera fiable.



Acepto donaciones de BAT's mediante el navegador Brave 🙂



Deja una respuesta

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