Recentemente percebi em meus scripts que enviam emails e eram executados pelo sistema via crontab não estavam acentuando corretamente o conteúdo, sendo que os caracteres acentuados estavam sendo substituídos por interroga??es. Também outro detalhe me intrigou foram esses scripts enviando o email sem o conteúdo escrito de maneira direta no corpo do email, mas em misteriosos arquivos .dat anexados que continham a mensagem.
Comportamento estranho.. porquê o script funcionava perfeitamente quando executado manualmente e só apresentava anomalias quando executado automaticamente? ❓
Após ponderar e brincar com as opções do mailx, descobri que definindo -S ttycharset=iso-8859-1 na linha de comando dentro dos scripts executados automaticamente, eles concatenariam o corpo da mensagem corretamente.. resolvendo a questão dos misteriosos anexos .dat…
Pois bem, agora só faltou solucionar a questão da acentuação!
Diante desta dica esperta passada pelo mailx acerca do charset do terminal, foi possível perceber que por algum motivo a variável de sistema LANG (que define qual charmap o sistema irá utilizar) não era definida quando um script era executado automaticamente pela crontab do sistema. O script acaba sendo executado automaticamente com o mapa de caracteres ANSI_X3.4-1968 ao invés do padrão configurado ISO-8859-1!
Agora sabendo do problema ficou fácil chegar a uma solução… bastou adicionar a seguinte linha em todos os scripts:
export LANG="en_US"
Finalmente tudo funciona perfeitamente: com acentuação e concatenação do corpo da mensagem de maneira correta! E sem precisar definir a variável ttycharsets para o envio dos emails pela linha de comando do linux! 😀