procmail不执行php脚本

我在我的FreeBSD 7.2上安装了一个kannel短信网关 – 这个服务很好用。

我现在正在尝试设置一个email2smsfunction。 为此我创build了一个名为kannel的系统用户,所有的邮件都被转发给这个用户。

kannel的主目录中,我有以下文件。

 -rw-r--r-- 1 kannel kannel 81B 17 jan 09:50 .procmailrc lrwxr-x--- 1 root kannel 58B 14 jan 13:24 email2sms.php @ -> some-what-some-where -rw-rw-rw- 1 root kannel 5,8K 17 jan 09:52 log.email2sms -rw------- 1 kannel kannel 1,3K 17 jan 09:50 procmail.log -rw-r----- 1 root kannel 606B 14 jan 13:28 rawmail.txt 

文件email2sms.php是一个符合PHP脚本(ZendFramework应用程序)的符号链接,它接受来自STDIN的电子邮件,并使用ZendFramework将该邮件parsing为对象。 然后,它执行一个http请求到SMS网关。 PHP脚本的作品。

.procmailrc内容

 LOGFILE=$HOME/procmail.log VERBOSE=yes :0 | php email2sms.php >> log.email2sms 

从上次发送的电子邮件我有这procmail.log

 procmail: [97744] Mon Jan 17 09:50:40 2011 procmail: [97744] Mon Jan 17 09:50:40 2011 procmail: Assigning "LASTFOLDER= php email2sms.php >> log.email2sms" procmail: Executing " php email2sms.php >> log.email2sms" procmail: Notified comsat: "kannel@:/home/user/kannel/ php email2sms.php >> log.email2sms" From [email protected] Mon Jan 17 09:50:40 2011 Subject: asdf as Folder: php email2sms.php >> log.email2sms 2600 

但是log.email2sms没有新的输出,脚本应该输出邮件的主题。

如果我sudo作为kannel用户,并用原始邮件将一个文件传送给脚本,它执行得很好。

 [root@webserver /home/user/kannel]# /home/user/kannel/ sudo -u kannel cat rawmail.txt | php email2sms.php >> log.email2sms 

并根据需要输出到log.email2sms

任何想法家伙?

UPDATE

我改变了phpscript只是die('bail me out scotty'); 并且在发送电子邮件时脚本从.procmail执行。 log.email2sms文件log.email2sms保释文本。

所以也许邮件的内容不是真正的pipe道,或者处理来自STDIN的pipe道数据的Zend Framework类是错误的。

问题不在于procmail,而在于我的Zend Framework脚本。

在ZendFramework中,从STDIN中读取电子邮件使用:

 // will use file_get_contents() $email = new Zend_Mail_Message(array('file' => "php://stdin")); 

并不是:

 // will use stream_get_contents() $email = new Zend_Mail_Message(array('file' => "STDIN")); 

注意自己:不要使用评论中给出的tips'n'trix

看起来像一个有限的shell问题,确保PHP命令是在path中,也为了debuggingprocmail,你总是可以添加在文件的顶部

 LOGFILE=$HOME/procmail.log VERBOSE=on