PHPメールフィルタリングスクリプト:qmailファイルで認識されていない終了コード

StackOverflow https://stackoverflow.com/questions/3673835

  •  01-10-2019
  •  | 
  •  

質問

ショートストーリー

.Qmailファイルを使用して、受信メールをフィルタリングするPHPスクリプトがあります。スクリプトは完全にうまく機能し、すべてのアクティビティを記録しますが、私の知る限り、スクリプトがさらに.Qmail行の処理を停止するDot-Qmail Exitコード99を返す場合、最後の.Qmail行は実行されません。

長い話:

Linux 2.6.18-4-686の下で、Parallels Pleskパネルバージョン9.3.0を使用しています。

私のPHP CLIバージョンは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がメッセージを配信する場合は0)。

私が既に試した多くの出口コードのメッセージを逆に伝えていることがわかりました。

スクリプト(行174を参照)は、前後に空白なしでテキスト終了コードを出力します。私は試した exit($code), print $code, echo($code) そしてさえ file_put_contents("php://stdout", $code), 、そしてまた exit(chr($code)).

dot-qmail コードは次のとおりです。

0-成功(次の.Qmail Lineに行く)

99-成功と中止(次の行を実行しないでください)

100-永続的なエラー(バウンス)

111-ソフトエラー(後で再試行)

出典:大きなQmail画像。

その他の試み/実験:

  1. 削除しました シバン ライン (#!/usr/bin/php)最初のものを変更しました .qmail|php -q /var/my/qmailfilter/qmailfilter

  2. スクリプトの最後の行をホワイトスパースのためにチェックしました

  3. dot-qmail manファイルを読むが、決定的なものは見つかりませんでした

  4. .Qmail Linesに参加:

    |/var/my/qmailfilter/qmailfilter |/usr/bin/deliverquota ./maildir

この場合、ヘッダー、件名、またはメッセージ本文のない適切な返品コードのみを持つメッセージを受け取りました。

  1. コメントした(#)2番目 .qmail ラインですが、あらゆる種類のメッセージの受信を停止しました。

  2. 編集 /var/qmail/control/defaultdelivery 最初の行を追加するには:

    | php/var/my/qmailfilter/qmailfilter |/usr/bin/dervirquota ./maildir

ユーザーの名前が変更されました .qmail にファイル _qmail. 。同じ結果。

PHPスクリプトを介してメッセージを配信し、終了コードを忘れる必要がありますか?

もしそうなら、ユーザーMailDir/Newにメッセージを保存するのに十分ですか?

もしそうなら、メッセージファイル名は重要ですか?

どんなアイデアも感謝します。どうもありがとう!

更新:それを必要としている人のために、私はicebex.comスラッシュqmailfilterで最終スクリプトを公開しました

役に立ちましたか?

解決

私はコードを簡単に見るだけでしたが、文字列値を使用しているように見えました。 exit('99')exit(99) 同じではありません。文字列ではなく整数を使用してください。

  • Exit('99 ')は99を印刷し、0を返します。

  • 終了(99)は99を返します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top