在我的 Mac 上,我遵循了以下步骤:
以下是我用来测试的 ruby 文件。它能够从 STDIN 读取数据并写入文件 sample.mail:
#!/usr/bin/env ruby while line = STDIN.gets f = File.open("/Users/username/sample.mail", "a+") f.puts line f.close end
编辑
/etc/aliases
并添加此行:username: "|/Users/username/stdinpipe.rb"
编辑
/etc/postfix/main.cf
并添加此行allow_mail_to_commands = alias,forward,include
用于
sudo newaliases
疼痛的变化。
现在,在此阶段我希望当我向 username@localhost 发送邮件时它应该附加到/Users/username/sample.mail
。
但事实并非如此。
我哪里做错了?
答案1
默认情况下,OS X 中的 postfix 没有指定任何 alias_maps。您需要确保此行在 main.cf 中未被注释掉:
alias_maps = hash:/etc/aliases
此外,脚本必须可由 _postfix 用户执行。您要写入的文件必须由 _postfix 用户拥有并可写入
更正这些问题后,你需要重新加载 postfix:sudo postfix reload
答案2
您可能需要确保脚本可执行。例如,在脚本上运行 chmod a+x。此外,您的别名示例行有一个大写字母“/Users”,这是非常规的,并且 unix 尊重路径和文件中的大小写(与 windows 不同),因此请确保大小写匹配。
如果失败,您可以将“#!/usr/bin/env ruby”替换为“#!/usr/bin/ruby”(或您的 ruby 所在的任何位置)。