Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SSMTP和ProcessBuilder_Java - Fatal编程技术网

Java 使用SSMTP和ProcessBuilder

Java 使用SSMTP和ProcessBuilder,java,Java,我目前正在为学校做一个项目,我正在尝试使用sSMTP从java向使用文本文件的用户发送电子邮件。从命令行ssmtp执行email@gmail.com

我目前正在为学校做一个项目,我正在尝试使用sSMTP从java向使用文本文件的用户发送电子邮件。从命令行ssmtp执行email@gmail.com
`ProcessBuilder builder = new ProcessBuilder;
 builder.command("ssmtp", "email@gmail.com", "<", "msg.txt");
 Process p = builder.start();`

我相信它不喜欢我尝试在msg.txt中使用管道。如果有人知道更好的方法,那就太好了。我还没有找到任何东西,也不知道自己该怎么做,而不是试图依赖shell的重定向功能,正如您所看到的那样,它不起作用,您可以读取msg.txt并将其写入进程的OutputStream。这将是相同的事情,但在代码和它将是一个更好的解决方案了

类似于

Process p = new ProcessBuilder("ssmtp").start();
PrintStream out = new PrintStream(p.getOutputStream());
String line = null;
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("msg.txt")));
while((line = in.readLine()) != null)
    out.println(line);
out.close();
in.close();
但是,如果您想使用shell重定向,我不建议您使用任何严重的重定向,那么您需要执行实际执行重定向的程序,即bash。下面应该可以做到这一点:

new ProcessBuilder("bash", "ssmtp", "email@gmail.com", "<", "msg.txt").start();

非常感谢你!我甚至没想到把文件读进去。我唯一需要更改的是在第一行中,我需要添加电子邮件的目的地作为命令;请参阅javadoc。较旧的更基本的Runtime.exec无法运行。
new ProcessBuilder("ssmtp", "email@gmail.com").redirectInput(new File("msg.txt")).start();