我在postfix中有一个pipe道别名,将电子邮件传递给一个简单的可执行文件:
test: "|/home/postfix_user/test/test-exe"
所有这个可执行文件都是把一个UTF8名字的文件写入磁盘。 我可以用手运行它:
$ cd /home/postfix_user/test ; ./test-exe ; ls ACCIÓN.txt
但是,当我通过Postfix执行脚本时,我收到一条错误消息:
远程服务器返回'<#5.3.0 x-unix; test-exe:/home/postfix_user/test/ACCIN.txt:openFile:无效参数(无效字符)>'
该错误消息(来自Haskell程序)的细节告诉我,我的区域设置可能没有正确设置为UTF8。 最初,我认为这是因为Postfix调用可执行文件的shell,但将本地命令shell设置为sh似乎没有帮助。 我已经阅读了大部分的postfix文档( http://www.postfix.org/pipe.8.html,http://www.postfix.org/local.8.html,http://www.postfix .org / aliases.5.html等),但无法find这样做。
postfix_user的locale输出表明它是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=
Postfix默认会导出某些环境variables,可以通过运行postconf -d | grep export_environment来find postconf -d | grep export_environment (postconf -d是你的postfix实例的所有configuration的转储,而不仅仅是你在main.cf手动设置的configuration)
至less在我的系统上,默认的实例是:
export_environment = TZ MAIL_CONFIG LANG
我不知道LANGvariables在哪里,但是Postfix从某个地方拉了LANG=C 重写这个,并设置你自己的语言环境。 修改main.cf中的conf值以指定要使用的语言环境:
export_environment = TZ MAIL_CONFIG LANG=en_US.UTF-8