Java sendmail 不太有效(新方法)

Java sendmail doesn't quite work (novel approach)

在此先感谢您成为我的第二眼。这就是我发送电子邮件的方式,但我不确定我所做的更改是否破坏了它。

import java.io.*;
String msg = "From:sender@em.ail\nTo:\"First Last\"<my@em.ail>\nSubject:Test Mail\n\nBlah Blah Blah\n.\n";
Process p = Runtime.getRuntime().exec(mail);
PrintWriter pw = new PrintWriter(p.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
pw.print(msg);
while (br.ready()) {System.out.println(br.readLine());}

真正令人困惑的是,如果我打印出 msg 并将其粘贴到终端 window 之后 运行 'sendmail -t' 电子邮件发送就好了。我在 windows 7 上使用腻子,我的 IDE 是 RSA 8.0.4 。服务器是某种 运行 Solaris。我个人并不反对安装一个库来处理邮件,但是在这里安装任何东西都是一项艰巨的任务。


根据大家的建议,代码现在是这样的

import java.io.*;
String msg = "From:sender@em.ail\r\nTo:my@em.ail\r\nSubject:Test Mail\r\n\r\nBLAH BLAH BLAH\r\n.\r\n";
Process p = Runtime.getRuntime().exec(mail);
PrintWriter pw = new PrintWriter(p.getOutputStream());
pw.print(msg);
pw.close();

但还是不行。尝试从 "getErrorStream()" 进行缓冲读取,但没有任何结果。

试试 JavaMail。不过,您需要在类路径中放置一些罐子。此外,您还需要一个 smtp 服务器凭据。

试试这个:

import java.io.*;
String msg = "From:sender@em.ail\r\nTo:my@em.ail\r\nSubject:Test Mail\r\n\r\nBLAH BLAH BLAH\r\n.\r\n";
Process p = Runtime.getRuntime().exec(mail);
PrintWriter pw = new PrintWriter(p.getOutputStream());
pw.print(msg);
pw.flush();
pw.close();

或者这个:

import java.io.*;
String msg = "From:sender@em.ail\r\nTo:my@em.ail\r\nSubject:Test Mail\r\n\r\nBLAH BLAH BLAH\r\n.\r\n";
Process p = Runtime.getRuntime().exec(mail);
PrintWriter pw = new PrintWriter(p.getOutputStream());
pw.println(msg);
pw.flush();
pw.close();

问题原来是字符串 mail 中的拼写错误以及 ready() 没有做我想做的事。打字错误导致了错误,其中一位读者被阻止了。修复拼写错误或删除 InputReader 修复它,新版本两者兼而有之。