procmail不执行php脚本

procmail不执行php脚本

我已经在我的 FreeBSD 7.2 上设置了 kannel SMS 网关 - 该服务运行良好。

我现在正在尝试设置 email2sms 功能。为此,我创建了一个名为 的系统用户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 将该邮件解析为对象。然后它向 SMS 网关发出 http 请求。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要求。

大家有什么想法吗?

更新

我将 phpscript 改为 just die('bail me out scotty');,发送电子邮件时脚本从 .procmail 执行。文件log.email2sms附加了保释文本。

因此,邮件内容可能没有被正确地传输,或者处理来自 STDIN 的传输数据的 Zend Framework 类存在错误。

答案1

问题不在于 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

答案2

看起来像是一个有限的 shell 问题,请确保 php 命令在路径中,另外为了调试 procmail,您可以随时在文件顶部添加

LOGFILE=$HOME/procmail.log
VERBOSE=on

相关内容