El misterio de los puntos que desaparecían del cuerpo de un correo
El Protocolo Simple de Transferencia de Correo no es tan simple
Aparece el problema
- Un cliente reportó que los puntos desaparecían del cuerpo de los correos enviados.
- Al enviar el mismo correo a otros clientes, los puntos no desaparecían.
Recordando el proyecto
- Hace unos 7 años, se desarrolló una solución para unificar las plantillas de documentos en un solo sistema.
- El cliente usaba plantillas de Microsoft Word para insertar marcadores de posición en los documentos.
- Cada vez que un empleado enviaba un documento por correo, había que reemplazar esos marcadores con el contenido real.
Problema de gestión de plantillas
- Existían múltiples versiones de plantillas y era difícil administrarlas.
- Algunas plantillas usaban términos y condiciones antiguos, logos, tipografías, etc.
- Se desarrolló una solución para gestionar todas las plantillas de forma centralizada.
Implementación de la solución
- El cliente podía administrar centralmente las plantillas para generar documentos PDF, mensajes de texto y cuerpos de correo.
- Por ejemplo, podía configurar una plantilla de carta de bienvenida para enviar a nuevos clientes.
- También se podían definir plantillas distintas según el medio de entrega: correo, mensaje de texto o correo postal.
Reproducción del problema
- El problema de los puntos desaparecidos solo ocurría en correos enviados a cierto cliente.
- El código fuente de la plantilla sí incluía los puntos.
- Al previsualizar localmente el cuerpo del correo, los puntos aparecían correctamente.
Análisis de la causa
- Había código que limitaba la longitud de cada línea al generar el cuerpo del correo.
- Si una línea excedía esa longitud, se creaba una nueva línea y el resto del contenido se movía allí.
- Según la especificación de SMTP, si una línea comienza con un punto, se inserta un punto adicional, y el servidor elimina el primero.
Solución
- Se modificó el código: si una línea comenzaba con un punto, se insertaba un punto adicional para que, aunque el servidor eliminara uno, el punto siguiera presente.
- Tras probar el código corregido, se confirmó que los puntos ya no desaparecían.
- El problema se resolvió y también se notificó el bug a otros equipos.
Problema posterior
- Meses después, otro equipo no corrigió el mismo bug y los puntos desaparecieron en correos importantes.
- Algunos clientes recibieron correos donde la nueva tarifa mensual aparecía como $2700 en vez de $27.00.
- Se aplicó un parche de inmediato y el problema quedó resuelto.
La opinión de GN⁺
- La importancia de entender la especificación de SMTP: para resolver problemas que pueden surgir al enviar correos, es importante comprender a fondo la especificación de SMTP.
- La complejidad de gestionar plantillas: administrar múltiples versiones de plantillas puede ser complicado, y hace falta un sistema de gestión centralizada.
- Técnicas de depuración: es importante saber reproducir un problema y analizar su causa.
- Comunicación entre equipos: después de resolver el problema, es importante compartir la información con otros equipos.
- Pruebas automatizadas: conviene introducir pruebas automatizadas para prevenir este tipo de problemas.
2 comentarios
Parece que en el título interpretaron
periodcomo período y no como punto final, jaja.Comentarios de Hacker News
Resumen de comentarios de Hacker News
La dificultad de implementar un cliente SMTP
La historia de las cartas de recomendación en Alemania
Cron jobs y clientes SMTP
Dos malos hábitos
Necesidad de dot-stuffing
Problema con adjuntos MIME HTML
Cuando el primer carácter es un punto
Aviso de parche de bug
Experiencia implementando un servidor NNTP