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)
-
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)
-
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 ) ) }
-
Configurar el remitente predeterminado:
-
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 🙂 |