ショートストーリー
.qmailファイルを使用して受信メールをフィルタリングするPHPスクリプトがあります。スクリプトは完全に機能し、すべてのアクティビティをログに記録しますが、私の知る限り、スクリプトがdot-qmail終了コード99を返し、それ以降の.qmail行の処理を停止する場合、最後の.qmail行は実行されません。
長い話:
Linux2.6.18-4-686でParallelsPleskPanelバージョン9.3.0を使用しています。
私のPHPCLIバージョンは5.2.0-8+etch16(cli)です(ビルド日:2009年11月24日11:14:47)。
Spamassassin、Dr。Web、zen.spamhaus.orgとその結果に満足できなかったため、すべての受信メールをフィルタリングするための独自のPHPスクリプトを作成することにしました。
(「この男は車輪の再発明をしている」と思う人もいますが、私は顧客とその特定のニーズを個人的に知っているので、何千ものテストを行った後、ブラックボックスモデルを回避し、プロセスを包括的に制御し、サーバーリソースを解放し、他の優れた機能への扉を開くことができます)。
ただし、サーバーにスクリプトをインストールするのに苦労しています。
qmailfilterは私のスクリプトであり、 http: //titanpad.com/1IFDj1jvB0で見ることができます。
既存の.qmailファイルを次の/var/qmail/mailnames/customerdomain.com/username/.qmail
ように編集しました。
|/var/my/qmailfilter/qmailfilter
|/usr/bin/deliverquota ./Maildir
このユーザーアカウントにメッセージを送信すると、qmailfilter PHPスクリプトが実行され、完全にログに記録され、終了コードが返されます(メッセージを破棄する場合は99、メッセージを配信する次の.qmail行に進む場合は0)。
私がすでに試した多くの終了コードに関係なく、メッセージを配信することがわかりました。
スクリプト(174行目を参照)は、前後に空白なしのテキスト終了コードを出力します。、、、さらにはexit($code)
、を試しました。print $code
echo($code)
file_put_contents("php://stdout", $code)
exit(chr($code))
dot-qmail
コードは次のとおりです。
0-成功(次の.qmail行に移動)
99-成功して中止します(次の行を実行しないでください)
100-永続的なエラー(バウンス)
111-ソフトエラー(後で再試行)
出典:Qmailの全体像。
その他の試み/実験:
シバンライン( )を削除し
#!/usr/bin/php
、最初の.qmail
ラインをに変更しました|php -q /var/my/qmailfilter/qmailfilter
スクリプトの最後の行でホワイトスペースを確認しました
dot-qmail manファイルを読みましたが、決定的なものは見つかりませんでした
.qmail行に参加しました:
| / var / my / qmailfilter / qmailfilter | / usr / bin / Deliverquota ./Maildir
この場合、ヘッダー、件名、またはメッセージ本文のない適切なリターンコードのみを含むメッセージを受け取りました。
2行目をコメントアウト(#)しました
.qmail
が、メッセージの受信を停止しました。/var/qmail/control/defaultdelivery
最初の行を追加するために編集:| php / var / my / qmailfilter / qmailfilter | / usr / bin / Deliverquota ./Maildir
ユーザー.qmail
ファイルの名前をに変更しました_qmail
。同じ結果。
PHPスクリプトを介してメッセージを配信し、終了コードを忘れる必要がありますか?
もしそうなら、メッセージをユーザーMaildir / newに保存するだけで十分ですか?
もしそうなら、メッセージのファイル名は重要ですか?
任意のアイデアをいただければ幸いです。どうもありがとう!
更新:それを必要とする人のために、私はicebex.comで最終的なスクリプトを公開しましたslash qmailfilter