我已将邮件设置为传入地址,以便在postfix中转发为php脚本的别名。我认为这是有效的,因为mail.log中有以下条目:
Oct 22 00:07:02 doodle postfix/qmgr[19688]: 60AB5688811C: from=<me@gmail.com>, size=1468, nrcpt=1 (queue active)
Oct 22 00:07:17 doodle postfix/local[26486]: 60AB5688811C: to=<php_mail_handler@localhost>, orig_to=<php@doodle.com>, relay=local, delay=16, delays=1.8/0.1/0/14, dsn=2.0.0, status=sent (delivered to command: php /home/doodle/htdocs/mail_handler.php)
Oct 22 00:07:17 doodle postfix/qmgr[19688]: 60AB5688811C: removed
这似乎表明postfix正在将它传递给脚本。我没有错误退回到我的电子邮件,但脚本没有执行(它应该将时间写入文件)。该脚本可以从命令行和Web执行中运行。它的代码是:
<?php
$f = fopen('php.txt','a+');
fwrite($f,date('Y-m-d h:i:s')."\n");
fclose($f);
?>
我的别名文件包含:
php_mail_handler: "| php /home.doodle/htdocs/mail_handler.php"
我最初的问题是它无声地失败 - 如上所示,mail.log似乎表明一切都很好。是否有一个日志可以告诉我为什么php无法执行,我可以检查?关于一般问题的任何想法?发送邮件的论坛中模糊的类似帖子似乎说这需要smrsh中的符号链接,但我没有发现任何说postfix需要这个。
非常感谢任何帮助。
垫
答案 0 :(得分:1)
今年重访,我再次遇到并解决了同样的问题:
Postfix使用非特权用户“nobody”从别名执行管道命令。要解决此问题,请创建具有所需权限的用户并分配给main.cf中的default_privs(您需要添加该行):
default_privs = mynewuser
重新开始,你不在。
答案 1 :(得分:1)
如果Michaels解决方案不起作用,而不是使用
$f = fopen('php.txt','a+');
fwrite($f,date('Y-m-d h:i:s')."\n");
尝试
system("echo 'it works!' > /home/yourname/php.txt");
在我新鲜的安装后,postfix的php CLI调用无法访问fopen和fwrite。
答案 2 :(得分:0)
将一个shebang添加到PHP脚本的顶部,使其可执行,并从管道调用中删除php
。这避免了postfix可能解决PHP二进制文件路径的任何问题。
// Top of the PHP file...
#!/usr/bin/php -q
# Alias file:
php_mail_handler: "|/home/doodle/htdocs/mail_handler.php"
# make it executable
chmod +x /home/doodle/htdocs/mail_handler.php