Sintaxe do parâmetro de notificação ruim do Postfix

1

Por favor, tenha paciência comigo, já que não sou um administrador especialista

Eu tenho um servidor de e-mail linux que funciona há alguns anos e agora, de repente, um determinado usuário não consegue enviar e-mails. Eles recebem imediatamente uma resposta do "Administrador do Sistema" dizendo

501 5.5.4 error bad notify parameter syntax

Isso só acontece para esse usuário e somente em seu computador. Ele funciona bem no Thunderbird, mas não no Outlook 2013. Outros usuários podem usar o Outlook 2013 sem problemas.

Eu assisti o log e é isso que ele diz quando esse usuário tenta enviar e-mail

replacing command "RCPT TO: <[email protected]> NOTIFY=SUCCESS,FAILURE,DELAY" with "RCPT TO: <[email protected]> NOTIFY=SUCCESS,FAILURE,DELAY NOTIFY=NEVER"

Eu verifiquei as regras do Outlook que podem estar adicionando cabeçalhos, verificador de vírus de e-mail desativado, conta adicionada novamente, etc.

Eu tenho lido e parece que NOTIFY = NUNCA não pode ser misturado com nenhum outro comando NOTIFY

Eu tenho uma configuração smtpd_command_filter como esta

/^(RCPT\s+TO:<.*>.*)\s+NOTIFY=\S+(.*)/ $1 NOTIFY=NEVER$2
/^(RCPT\s+TO:.*)/                    $1 NOTIFY=NEVER

Eu não sou bom com expressões regulares, mas estou supondo que não está analisando o comando original corretamente e está adicionando NOTIFY = NEVER ao final, em vez de substituí-lo.

Nesse meio tempo, eu comentei isso, o que envia uma mensagem "sua mensagem foi entregue com sucesso" para o remetente. Eu silenciei isso adicionando

smtpd_discard_ehlo_keywords = silent-discard, dsn

para main.cf

As minhas novas configurações estão corretas ou preciso corrigir o problema original, que, na minha opinião, está na expressão regular? Alguma idéia?

    
por Russell 13.12.2013 / 05:16

1 resposta

1

I've been reading and it appears that NOTIFY=NEVER can not be mixed with any other NOTIFY commands

Para referência, é definido na RFC 1891 Seção 5.1

A RCPT command issued by a client may contain the optional esmtp-keyword "NOTIFY", to specify the conditions under which the SMTP server should generate DSNs for that recipient. If the NOTIFY esmtp-keyword is used, it MUST have an associated esmtp-value, formatted according to the following rules, using the ABNF of RFC 822:

notify-esmtp-value = "NEVER" / 1#notify-list-element

notify-list-element = "SUCCESS" / "FAILURE" / "DELAY"

Notes:

a. Multiple notify-list-elements, separated by commas, MAY appear in a NOTIFY parameter; however, the NEVER keyword MUST appear by itself.

b. Any of the keywords NEVER, SUCCESS, FAILURE, or DELAY may be spelled in any combination of upper and lower case letters.

Este é o seu regex (parece ser copiado de esta página )

/^(RCPT\s+TO:<.*>.*)\s+NOTIFY=\S+(.*)/ $1 NOTIFY=NEVER$2
/^(RCPT\s+TO:.*)/                    $1 NOTIFY=NEVER

Esta é a sequência de comandos RCPT do Outlook 2013

RCPT TO: <[email protected]> NOTIFY=SUCCESS,FAILURE,DELAY

A string acima corresponderá à segunda linha. Por quê? Porque entre TO: e <[email protected]> , há espaço em branco. Sua primeira linha de expressão regular não contém espaços em branco entre TO: e '<'.

Para espaço entre ':' e '<' problema, aqui o que RFC 5321 diz

Since it has been a common source of errors, it is worth noting that spaces are not permitted on either side of the colon following FROM in the MAIL command or TO in the RCPT command. The syntax is exactly as given above.

Então, é por isso que o problema aparece localmente. Parece que o outlook ainda adicionando espaço entre após RCPT TO: deste modo violar as especificações RFC.

Solução Regex:

Modifique a primeira linha de regex, para que ela se torne

/^(RCPT\s+TO:\s*<.*>.*)\s+NOTIFY=\S+(.*)/ $1 NOTIFY=NEVER$2

adicionar \ s * corresponderá a uma string que tenha zero ou mais espaço em branco após RCPT TO:

Para saber como funciona o regex, visite esta página .

    
por 16.10.2014 / 03:32