邮件到PHP似乎失败了,但在哪里?

时间:2011-10-21 20:45:39

标签: php postfix-mta

我已将邮件设置为传入地址,以便在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需要这个。

非常感谢任何帮助。

3 个答案:

答案 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