Debug-Log: Cómo Resolvimos un Error Fatal de PHPMailer en WooCommerce que Bloqueaba Pagos

Hola a todos. Hoy quiero compartir un caso de estudio real sobre la depuración de un problema muy frustrante en una tienda WooCommerce recién implementada: los correos electrónicos simplemente no se enviaban. Ni las confirmaciones de pedido, ni los avisos de nuevo usuario, ni los correos de prueba. Peor aún, este problema estaba causando fallos intermitentes en la pasarela de pagos al finalizar la compra.

Después de varias horas de diagnóstico, encontramos la raíz del problema. Espero que compartir nuestro proceso te ahorre tiempo y te sirva de guía si alguna vez te enfrentas a una situación similar.

El Stack Tecnológico:

  • Plataforma: WordPress con WooCommerce
  • Hosting: Servidor propio con CyberPanel
  • Pasarela de Pagos: Culqi

Paso 1: La Primera Pista (Engañosa) – Las Listas Negras

El primer instinto fue revisar la entregabilidad del dominio. Usando la herramienta online Mail-tester.com, descubrimos que la IP del servidor estaba en una lista negra menor (RATS-ALL).

Si bien estar en una lista negra es un problema que afecta si los correos llegan a la bandeja de entrada, no suele ser la razón por la que un sitio falla al enviarlos. Era una pista importante, pero no era la causa principal del error que impedía el envío desde el origen.

Paso 2: Encontrando el Error Real – La Magia de los Logs

Como los correos ni siquiera salían, el siguiente paso era revisar los registros de errores de WooCommerce. Esta es la lección más importante: los logs son tu mejor amigo.

Cómo los activamos:

  1. Fuimos a WooCommerce > Estado > Herramientas.
  2. Activamos la opción «Registro de depuración».
  3. Intentamos realizar una compra de prueba de nuevo para provocar el error.
  4. Fuimos a WooCommerce > Estado > Registros y revisamos el log de fatal-errors.

Ahí apareció el verdadero culpable, un error crítico de PHP:

Uncaught TypeError: trim(): Argument #1 ($string) must be of type string, array given in /.../wp-content/plugins/CyberSMTP/vendor/phpmailer/src/PHPMailer.php:1098

Este error «TypeError» nos dice que una función esperaba un simple texto (string) pero recibió una lista (array), causando que todo el proceso de envío de correo se rompiera.

Paso 3: El Análisis del «Backtrace» – ¿Quién Causó el Error?

El «backtrace» del log nos mostró la secuencia de eventos que llevó al error. Vimos que la cadena era: WooCommerce -> wp_mail() -> CyberSMTP -> PHPMailer -> trim().

Esto nos confirmó que el plugin CyberSMTP, que se había instalado para gestionar el envío de correos, era el que estaba pasando los datos en un formato incorrecto a la librería PHPMailer.

La Solución Definitiva en Dos Frentes

Una vez identificado el plugin conflictivo, la solución fue clara: eliminarlo y reconstruir el sistema de envío de correos siguiendo las mejores prácticas.

Frente 1: Implementar un Sistema de Correo Transaccional Robusto

Dejar que WordPress envíe correos con la función wp_mail() por defecto a través del servidor no es fiable. La solución profesional es usar un servicio SMTP externo.

  • Plugin Utilizado: Instalamos y configuramos WP Mail SMTP, el estándar de la industria para gestionar el envío de correos en WordPress.
  • Servicio Externo: Creamos una cuenta en Brevo (antes Sendinblue), un servicio de correo transaccional que ofrece un plan gratuito generoso y, lo más importante, servidores con una reputación impecable.
  • La Configuración Crítica (Autenticación de Dominio): El paso final y crucial fue autenticar nuestro dominio (baobao.pe) con Brevo. Esto implicó añadir los siguientes registros en nuestro editor de DNS en CyberPanel:
    • SPF: Un registro TXT que autoriza a los servidores de Brevo a enviar correos en nuestro nombre.
    • DKIM: Otro registro (en este caso, CNAME apuntando a Brevo) que añade una «firma digital» a cada correo, garantizando su autenticidad e integridad.

Frente 2: Estabilizar el Proceso de Pago

Al desactivar el plugin conflictivo (CyberSMTP) y reemplazarlo con el sistema profesional de WP Mail SMTP + Brevo, el error fatal desapareció. Esto permitió que WooCommerce completara su flujo de trabajo sin interrupciones, incluyendo el envío del correo de confirmación, lo que a su vez solucionó los errores que veíamos en la pasarela de pago de Culqi.

Conclusiones y Lecciones Aprendidas

  1. Los Logs Primero: Ante un problema inexplicable, activa siempre los registros de depuración. Te ahorrarán horas de adivinanzas.
  2. No Confíes en wp_mail(): Para una tienda seria, el envío de correos desde el servidor es una receta para problemas de entregabilidad y spam.
  3. Un Servicio SMTP Transaccional es Obligatorio: Usar servicios como Brevo, SendGrid o Mailgun no es un lujo, es una necesidad para el e-commerce.
  4. Autentica tu Dominio: Configurar SPF y DKIM es un paso no negociable para construir una buena reputación como remitente y evitar la carpeta de spam.

Espero que este caso de estudio detallado te sea de utilidad. ¿Te has enfrentado a un problema similar? ¡Me encantaría leer tu experiencia en los comentarios!

¿Te gustó? ¡Compártelo!

Deja un comentario

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