最近需要做一个在JAVA中监测目录下是否有新文件产生,如果有的话使用Linux指令发送邮件,
使用mutt发送邮件的指令如下
echo "14:07" | mutt -a /home/pi/test.jpg -- 1111111@qq.com
意思为发送内容为“14:07”,并且添加附件test.jpg发送到1111111@qq.com这个邮箱。
经过测试,这句话单独在Linux系统下运行没有问题,也成功发送接收到。
但是调用Runtime.getRuntime().exec() 的时候不行
经查找是因为使用了管道的原因,需要添加/bin/sh -c 作为脚本去执行,但是却无法成功发送。
系统反馈无法发送此邮件。
将上述的代码作为sh脚本写入运行,提示子进程已经结束,邮件发送失败。猜想是由于mutt发送需要时间较长,sh已经运行结束,导致进程提前结束无法发送成功
但是如果使用sleep的话,会造成休眠,在脚本后面加上wait也没用。。。。
再次提出问题,如何在java代码中调用Linux指令的mutt发送邮件(有管道)
java代码中运行Linux指令代码如下:
public static void executeLinuxCmd(String[] cmd) {
InputStream in = null;
String result = null;
try {
Process pro = Runtime.getRuntime().exec(cmd);
pro.waitFor();
in = pro.getInputStream();
BufferedReader read = new BufferedReader(new InputStreamReader(in));
while((result = read.readLine())!=null) {
System.out.println(result);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
调用executeLinuxCmd的代码如下(监测部分省略,cmd指令输出过,确定正确)
String path2=path + "/" + event.context() ;
String cmd="echo "+"\"hello hello\""+"|mutt -a "+path2+" -- 1111111@qq.com";
String[] str={"/bin/sh","-c",cmd};
executeLinuxCmd(str);
System.out.println(cmd);
监测成功创建文件,并且发送,然后显示
无法发送此信件。
echo "hello hello"|mutt -a /home/pi/this_is_test/wenjian -- 1111111@qq.com
折腾了2天了,求大佬指导一下,感激不尽