Eu tenho o SendMail 8.14.4 rodando em um servidor CentOS 5.
Um usuário no Japão está enviando uma mensagem e, quando ela é processada pelo servidor, o SendMail adiciona um retorno de carro extra por algum motivo.
O e-mail contém um cabeçalho X com valores que (presumivelmente) contêm caracteres internacionais. Digo "presumivelmente" porque, quando examino a fonte MIME com o notepad ++, vejo esquisitices como STX
e CAN
.
Consegui reduzir o escopo do teste para isso:
Se eu enviar isso pelo Sendmail, ele eventualmente deixará o SendMail assim:
(ips, Q-ID e hostname alterados para proteger os inocentes)
Agora, obviamente, uma bandeira vermelha em potencial aqui: o valor do cabeçalho começa com uma aspa, mas não tem uma de fechamento. Isso é exigido pelos padrões RFC? Ou essa parte é um arenque vermelho?
O resultado final é que os valores do cabeçalho vazam para o corpo da mensagem:
Alguma ideia de por que o sendmail está adicionando o retorno de carro extra?
Na verdade, isso é bem simples: a seção 2.2.3 da RFC 2822 permite cabeçalhos longos, onde um cabeçalho é um nome de campo seguido por um :para dobrar e continuar na próxima linha, desde que (simplificado) a próxima linha comece com um espaço
.
A linha 3 da entrada original não começa com um espaço, mas com o caractere ce não contém dois pontos :, o que não a torna a continuação do cabeçalho anterior nem o próximo campo de cabeçalho (§2.2).
Isso marca como o fim dos cabeçalhos...
E o início do corpo.
O Sendmail "corrige" essa mensagem malformada e adiciona a linha em branco necessária entre o que percebe como o final dos cabeçalhos e o início do corpo.
Uma simples sessão de correio telnet pode reproduzir esse comportamento:
O que resulta em uma mensagem semelhante ao seu exemplo:
Com uma nova linha adicional entre a continuação do cabeçalho original e o "novo" início do corpo.