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 修复它,新版本两者兼而有之。
在此先感谢您成为我的第二眼。这就是我发送电子邮件的方式,但我不确定我所做的更改是否破坏了它。
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 修复它,新版本两者兼而有之。