gpt4 book ai didi

java - 使用 SSMTP 和 ProcessBuilder

转载 作者:行者123 更新时间:2023-12-02 11:32:01 25 4
gpt4 key购买 nike

我目前正在为学校开发一个项目,我正在尝试使用 sSMTP 将电子邮件从 java 发送到使用文本文件的用户。从命令行执行ssmtp email@gmail.com < msg.txt工作正常,并向我发送包含 msg.txt 中包含的信息的电子邮件。但是,当我尝试使用 ProcessBuilder 在 java 中执行此操作时,它不会发送电子邮件。

`ProcessBuilder builder = new ProcessBuilder;
builder.command("ssmtp", "email@gmail.com", "<", "msg.txt");
Process p = builder.start();`

我相信它不喜欢我尝试通过管道输入 msg.txt 的位置。如果有人知道更好的方法来做到这一点那就太好了。我还没有找到任何东西,也不知道自己该怎么做

最佳答案

您可以直接读取 msg.txt 并将其写入进程的 OutputStream<,而不是尝试依赖 shell 的重定向功能(如您所见,这不起作用)/。这将是同样的事情,但在代码中(这也将是一个更好的解决方案)。

类似的东西

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();
<小时/>

正如 dave_thompson_085 所评论的那样,进行编程重定向更加容易。如今事情确实很容易!

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

关于java - 使用 SSMTP 和 ProcessBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49223605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com