weixin_44933535 2020-01-01 14:53 采纳率: 0%
浏览 1004

关于JAVA中使用Runtime.getRuntime().exec() 调用Linux的mutt发送邮件

最近需要做一个在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天了,求大佬指导一下,感激不尽

  • 写回答

1条回答 默认 最新

  • IT•軒轅 企业官方账号 2023-12-15 02:27
    关注
    • 命令cmd使用了管道|,不兼容
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?