私はFreeBSD7.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
_は、STDIN
から電子メールを取得し、ZendFrameworkを使用してそのメールをオブジェクトに解析するphpスクリプト(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への新しい出力はなく、スクリプトは電子メールの件名を出力する必要があります。
I 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
_には保釈テキストが追加されています。
したがって、メールのコンテンツが正しくパイプされていないか、STDINからパイプされたデータを処理するZendFrameworkクラスにバグがある可能性があります。
問題はprocmailではなく、私が持っていたZendFrameworkスクリプトにありました。
ZendFrameworkでは、STDINからの電子メールの読み取りには次のものが使用されます。
// will use file_get_contents()
$email = new Zend_Mail_Message(array('file' => "php://stdin"));
そしてNOT:
// will use stream_get_contents()
$email = new Zend_Mail_Message(array('file' => "STDIN"));
自己メモ:使用しないでください コメントに記載されているヒントとトリック
限定されたシェルの問題のように見えます。phpコマンドがパスにあることを確認してください。また、procmailをデバッグするために、ファイルの先頭にいつでも追加できます。
LOGFILE=$HOME/procmail.log
VERBOSE=on