Ao tentar importar algumas mensagens no
Cyrus IMAP, o servidor retorna a seguinte mensagem:
Message contains bare newlines
Na página do projeto Cyrus, no próprio
FAQ, o
problema já está relatado:
"Message contains bare newlines
Why does Cyrus reject messages with 'bare newlines'
Please first read about Cyrus Interoperability.
Bare newlines is a nono in an RFC822 message. You should first try to fix the software that
is causing the problem.
As it happens, the bare newlines-rejection has never been a problem for us."
O problema, portanto, se trata de 'quebra de linha', onde alguns caracteres que o Outlook (principalmente) utiliza para
marcar o fim de uma linha de texto violam a 'RFC822', e o Cyrus IMAP é conhecido, além da sua boa performance e
escalabilidade, por ser bastante rigoroso com RFCs.
Como não há qualquer documento na base de conhecimento pública da Microsoft que viabilize alterar o comportamento do
Outlook/Exchange para corrigir este problema, portanto existem duas soluções:
I- Alterar o código do Cyrus para não rejeitar 'bare newlines'. Isso envolve aplicar um 'patch' já conhecido, muitas soluções
que utilizam o Cyrus (SUSE e-mail server e Invoka, por exemplo) já optaram por este caminho.
II- Fazer com que o cliente que está importando a mensagem, identifique esse comportamento e corrija conforme a
'RFC822'.
Abaixo está o conteúdo do 'patch' para o Cyrus desconsiderar essa RFC. Foi feito para a versão 2.3.7, caso utilize alguma
versão mais recente, provavelmente será necessário modificar:
— NEW FILE cyrus-imapd-2.3.7-nobarenewlinescheck.patch —
— cyrus-imapd-2.3.7/imap/message.c 2006-10-28 22:18:08.000000000 +0200
+++ cyrus-imapd-2.3.7/imap/message.c.nobarenewlinescheck 2006-10-28 22:21:55.000000000 +0200
@@ -256,8 +256,9 @@
r = IMAP_MESSAGE_CONTAINSNULL;
}
else if (*p = ‘\n’) {
- if (!sawcr && (inheader || !allow_null))
- r = IMAP_MESSAGE_CONTAINSNL;
+ /* Do *NOT* check for RFC compliant line breaks (bare newlines) */
+ /* if (!sawcr && (inheader || !allow_null))
+ r = IMAP_MESSAGE_CONTAINSNL; */
sawcr = 0;
if (blankline) {
inheader = 0;:
Para aplicar o 'patch', copie o conteúdo acima, salve o arquivo no diretório raiz dos fontes e execute o comando:
# patch -p1 < arquivo.patch
Feito isto, compile o Cyrus normalmente.
Fabio Soares Schmidt
http://respirandolinux.wordpress.com
Nenhum comentário foi encontrado.