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