Procmail配方,管道到Java stdin

时间:2011-09-09 22:41:24

标签: java pipe stdin procmail recipe

我正在尝试使用procmail对传入邮件运行一些自定义解析,并且想要使用| pipe to stdin调用java程序来读取消息的标题和正文。有很多使用perl和python过滤邮件的例子,但没有使用java。作为一个开始的例子,我的procmail食谱:

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

我的java应用程序只是echo的stdin:

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?标准输出?

2 个答案:

答案 0 :(得分:1)

删除“/ usr / bin / java -cp / root / parser HelloWorldApp”周围的引号。

来源:http://www.linfo.org/pipe.html

答案 1 :(得分:0)

配方上的“过滤器”标志指定管道将读取标准输入上的消息,并在标准输出上回写(可能未更改)消息,这将替换原始消息。

由于Jake223已经回复,命令周围的引号不正确,应该删除。但是,错误消息看起来并不像是对应于该特定错误。