Como posso definir a localidade para um script executado pelo Postfix?

2

Eu tenho um alias de pipe no postfix para passar emails para um executável simples:

test: "|/home/postfix_user/test/test-exe"

Tudo o que esse executável faz é gravar um arquivo com um nome UTF8 no disco. Posso rodar manualmente:

$ cd /home/postfix_user/test ; ./test-exe ; ls 
ACCIÓN.txt

No entanto, quando executo o script pelo Postfix, recebo uma mensagem de erro:

Remote Server returned '< #5.3.0 x-unix; test-exe: /home/postfix_user/test/ACCIN.txt: openFile: invalid argument (invalid character)>'

Os detalhes dessa mensagem de erro (proveniente de um programa Haskell) informam que minha localidade provavelmente não está configurada corretamente como UTF8. Originalmente, eu pensei que isso era por causa do shell com o qual o Postfix invoca o executável, mas definir o shell de comando local como sh não pareceu ajudar. Eu li a maior parte da documentação do postfix ( link , link , link , etc), mas pode encontre de qualquer maneira para fazer isto.

A saída de locale para postfix_user indica que é UTF8:

$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
    
por jkeuhlen 09.11.2017 / 21:06

1 resposta

2

O postfix por padrão exportará certas variáveis de ambiente, que podem ser encontradas executando postconf -d | grep export_environment (postconf -d é um despejo de todas as configurações para sua instância de postfix, não apenas aquelas que você definiu manualmente em main.cf )

Pelo menos no meu sistema, a instância padrão era:

export_environment = TZ MAIL_CONFIG LANG

Não sei ao certo onde a variável LANG está sendo definida, mas o Postfix estava obtendo LANG=C de algum lugar. Para substituir isso e definir sua própria localidade. Modifique esse valor de conf em main.cf para especificar qual localidade você deseja usar:

export_environment = TZ MAIL_CONFIG LANG=en_US.UTF-8
    
por 09.11.2017 / 22:15

Tags