如何设置 Postfix 运行的脚本的语言环境?

如何设置 Postfix 运行的脚本的语言环境?

我在 Postfix 中有一个管道别名,用于将电子邮件传递给一个简单的可执行文件:

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 设置为 UTF8 似乎没有sh帮助。我已阅读了大部分 postfix 文档(http://www.postfix.org/pipe.8.htmlhttp://www.postfix.org/local.8.htmlhttp://www.postfix.org/aliases.5.html等),但找不到任何方法来做到这一点。

localefor的输出postfix_user确实表明它是 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=

答案1

Postfix 默认会导出某些环境变量,可以通过运行找到这些变量postconf -d | grep export_environment(postconf -d 是 Postfix 实例的所有配置的转储,而不仅仅是你手动设置的配置main.cf

至少在我的系统上,默认实例是:

export_environment = TZ MAIL_CONFIG LANG

我不确定该LANG变量在哪里设置,但 Postfix 是LANG=C从某个地方获取的。要覆盖此变量,请设置您自己的语言环境。修改该 conf 值以main.cf指定您要使用的语言环境:

export_environment = TZ MAIL_CONFIG LANG=en_US.UTF-8

答案2

为了完整性:如果存在
,Postfix 将会读取/etc/default/postfix(至少在 Debian 上)。

由于转发LANG已经是 的export_environment默认设置,您可以添加

LANG=en_US.UTF-8

/etc/default/postfix(或者可能来源于/etc/default/locale那里)而不是改变export_environment

相关内容