Sendmail / procmail / truncando correio

3

O nível de iluminação de um colega para encontrar um padrão nisto me salvou de uma nova profundidade de loucura. Minha esperança é que a confiança do cérebro aqui agora possa me dizer por que ...

A cena: Temos vários IDs de e-mail genéricos com a configuração do procmail para redistribuir e-mails com base no destinatário original. Por exemplo, o email enviado para generic_ID1 vai para staff1, staff2; mail para generic_ID2 vai para staff3, staff4; et cetera ...

GENERIC_ID1_RECIPIENTS="staff1@domain,staff2@domain"

:0
* ^TO.*generic_ID1
! $GENERIC_ID1_RECIPIENTS

O problema: O correio estava sendo truncado, aparentemente ao acaso. O padrão finalmente descoberto mostrou que ocorreu quando uma sentença terminou com um período na coluna 76 e um retorno de carro rígido: não na coluna 75 ou 77; não na coluna 76 com mais texto para seguir nessa mesma linha. Qualquer texto após esse período foi perdido.

Adendo: acabamos de vê-lo reaparecer (e reproduzi-lo) com um período na coluna 226. Estou chocado.

Eu posso confirmar que o procmail recebe a mensagem inteira copiando a mensagem antes da nova entrega:

:0c                       # note: 'c'
* ^TO.*generic_ID1
! $GENERIC_ID1_RECIPIENTS

Acredito que o sendmail pode estar truncando-o após a devolução, mas não tenho certeza de como diagnosticar ou provar isso (não sou um administrador do sendmail, apenas um usuário do procmail).

O problema é totalmente reproduzível.

As perguntas: Por que isso está acontecendo e como posso corrigi-lo?

Muito obrigado.

EDIT: título e tags atualizados. A solução está nos comentários.

    
por Joe Creighton 08.05.2012 / 17:33

1 resposta

2

(convertido de comentários de perguntas)

Na verdade, havia três partes nessa equação: sendmail, procmail e Exchange:

  • Exchange : ao aceitar uma correspondência para exibição, ela parece reformatar uma mensagem de texto simples, codificar e agrupar suas linhas para 75 caracteres.

  • sendmail : um comportamento antigo (mas conhecido) que estava sendo seguido nesse email com um período em branco em uma linha foi interpretado como final da mensagem e, em seguida, entregue, truncando efetivamente o corpo de correio real.

  • procmail : De acordo com a documentação, é suposto invocar o sendmail com sinalizadores que o forçam a ignorar períodos desnudos. Ele não estava fazendo isso e não respeitando diretivas explícitas de arquivos de configuração. A solução de curto prazo: passando -oi -OIgnoreDots = T para todas as receitas de reentrega. A solução de longo prazo: uma atualização da instalação do procmail do nosso site, que agora respeita as configurações e ignora o período de tempo (sinalizadores passados não são mais necessários).

O wrap pesado entrou em ação porque, quando o Exchange codificou a mensagem de texto simples, ele introduziu =20 , o que provavelmente permitiu que o período fosse colocado sozinho e deixado sozinho em uma linha.

    
por 28.06.2012 / 05:20