web-dev-qa-db-ja.com

procmailはphpスクリプトを実行しません

私は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 Sudokannelユーザーとして使用し、生の電子メールを含むファイルをスクリプトにパイプすると、正常に実行されます。

_[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クラスにバグがある可能性があります。

1
Phliplip

問題は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"));

自己メモ:使用しないでください コメントに記載されているヒントとトリック

1
Phliplip

限定されたシェルの問題のように見えます。phpコマンドがパスにあることを確認してください。また、procmailをデバッグするために、ファイルの先頭にいつでも追加できます。

LOGFILE=$HOME/procmail.log
VERBOSE=on
0
lynxman