O mistério dos pontos finais que sumiram no corpo do e-mail
O Protocolo Simples de Transferência de Mail não é tão simples
Surgimento do problema
- Um cliente relatou que os pontos finais haviam desaparecido do corpo do e-mail enviado a ele.
- Quando o mesmo e-mail era enviado a outros clientes, os pontos finais não desapareciam.
Relembrando o projeto
- Cerca de 7 anos atrás, foi desenvolvida uma solução para unificar templates de documentos em um único sistema.
- O cliente usava templates do Microsoft Word para inserir marcadores de posição nos documentos.
- Sempre que um funcionário enviava um documento por e-mail, era preciso substituir os marcadores pelo conteúdo real.
Problema de gerenciamento de templates
- Existiam várias versões de templates, o que dificultava a gestão.
- Alguns templates usavam termos e condições antigos, logos antigos, fontes antigas etc.
- Foi desenvolvida uma solução para gerenciar todos os templates de forma centralizada.
Implementação da solução
- O cliente podia gerenciar centralmente os templates para gerar documentos em PDF, mensagens de texto e corpos de e-mail.
- Por exemplo, era possível configurar um template de carta de boas-vindas para novos clientes.
- Também era possível configurar templates diferentes para cada meio de entrega (e-mail, SMS e correio).
Reprodução do problema
- O problema dos pontos finais desaparecendo ocorria apenas em e-mails enviados a determinados clientes.
- O código-fonte do template continha os pontos finais.
- Ao visualizar a prévia do corpo do e-mail no ambiente local, os pontos finais apareciam.
Análise da causa
- Havia um código que limitava o comprimento de cada linha ao gerar o corpo do e-mail.
- Quando uma linha ultrapassava o limite, era criada uma nova linha e o restante do conteúdo era movido para ela.
- De acordo com a especificação do SMTP, quando uma linha começa com um ponto, um ponto extra deve ser inserido, e o servidor remove o primeiro ponto.
Solução
- Correção no código: quando uma linha começava com um ponto, era inserido um ponto extra para que, mesmo após o servidor remover um deles, ainda restasse um ponto.
- Depois de testar o código corrigido, foi confirmado que os pontos finais não desapareciam mais.
- O problema foi resolvido e o bug foi comunicado a outras equipes.
Problema posterior
- Alguns meses depois, outra equipe não corrigiu o mesmo bug, e pontos finais desapareceram em e-mails importantes.
- Alguns clientes receberam e-mails em que a nova cobrança mensal aparecia como $2700 em vez de $27.00.
- O problema foi resolvido imediatamente após a aplicação de um patch no código.
A opinião do GN⁺
- Importância de entender a especificação do SMTP: para resolver problemas que podem ocorrer no envio de e-mails, é importante compreender bem a especificação do SMTP.
- Complexidade do gerenciamento de templates: administrar várias versões de templates pode ser complexo, e um sistema centralizado é necessário.
- Técnicas de depuração: é importante saber reproduzir o problema e analisar sua causa.
- Comunicação entre equipes: depois de resolver o problema, é importante compartilhar as informações com outras equipes.
- Testes automatizados: é recomendável adotar testes automatizados para evitar problemas desse tipo.
2 comentários
Parece que no título interpretaram
periodcomo período, e não como ponto final hahaComentários do Hacker News
Resumo dos comentários do Hacker News
A dificuldade de implementar um cliente SMTP
A história da carta de recomendação na Alemanha
Cron jobs e clientes SMTP
Dois maus hábitos
Necessidade de dot-stuffing
Problema com anexo MIME em HTML
Quando o primeiro caractere é um ponto
Aviso sobre correção de bug
Experiência implementando um servidor NNTP