0

procmail を使用して受信メールに対してカスタム解析を実行しようとしています。Java プログラムを呼び出して、標準入力への |パイプを使用してメッセージのヘッダーと本文を読み取りたいと考えています。perl と python を使用してメールをフィルタリングする例はたくさんありますが、Java を使用した例はありません。最初の例として、私の procmail レシピは次のとおりです。

:0 hbfW
|"/usr/bin/java -cp /root/parser HelloWorldApp"

そして、私のJavaアプリは標準入力をエコーするだけです:

import java.io.*;
public class HelloWorldApp {
 public static void main(String[] args) {
 InputStreamReader isReader = new InputStreamReader(System.in);
BufferedReader bufReader = new BufferedReader(isReader);
while(true){
    try {
        String inputStr = null;
        if((inputStr=bufReader.readLine()) != null) {
            System.out.println(inputStr);
        }
        else {
            break;
        }
    }
    catch (Exception e) {
       break;
    }
  }
 }
}

procmail ログ:

procmail: Executing "/usr/bin/java -cp /root/parser HelloWorldApp"
/bin/sh: /usr/bin/java HelloWorldApp: No such file or directory
procmail: Error while writing to "/usr/bin/java HelloWorldApp"
procmail: Rescue of unfiltered data succeeded

1) データを Java にパイプする正しいレシピを作成していますか? 2) 引き続き procmail に配信を処理させたいので、(f) フラグを使用したレシピを作成します。しかし、Java プログラムから作成された結果を procmail に送り返すにはどうすればよいでしょうか? 標準出力?

4

2 に答える 2

1

「/usr/bin/java -cp /root/parser HelloWorldApp」の周りの引用符を削除します。

ソース: http://www.linfo.org/pipe.html

于 2011-09-09T23:51:07.973 に答える
0

レシピの「フィルター」フラグは、パイプラインが標準入力でメッセージを読み取り、元のメッセージを置き換える (おそらく変更されていない) メッセージを標準出力に書き戻すことを指定します。

Jake223 が既に回答したように、コマンドを囲む引用符は正しくないため、削除する必要があります。ただし、エラー メッセージは実際にはその特定のエラーに対応しているようには見えません。

于 2011-09-12T11:56:36.380 に答える