我在我的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