我正在尝试编写一种基于参数发送电子邮件的方法,它完全适用于CentOS和OSX。但是,该方法在Windows上无法正常工作(即使在Windows上重新编译时)以及其他一些Linux操作系统 - 它会引发MessagingException。有没有人有任何想法,我可以如何解决这个在Windows上工作?谢谢!在某些机器上抛出MessagingException,但在其他机器上工作正常
private static void sendEmail(String towhom, String subject, String body) {
String host = "smtp.gmail.com", from = "myemail", pass = "mypassword";
Properties props = System.getProperties();
Scanner scan = new Scanner(System.in);
try {
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props, null);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
InternetAddress toAddress = new InternetAddress(towhom);
message.addRecipient(Message.RecipientType.TO, toAddress);
message.setSubject(subject);
message.setText(body);
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
catch(AddressException e) {
System.out.println("Invalid Email Address.");
}
catch(MessagingException e) {
System.out.print("\nInvalid Email Address, please reenter it: ");
sendEmail(scan.nextLine(), subject, body);
}
}
你可以添加堆栈跟踪?另外,你可以从你的linux终端上telnet smtp.gmail.com 587吗? – JHS
'MessagingException'catch块中的'e.printStackTrace();'。 – JHS
这是太长,只贴:http://pastebin.com/02xP4171 –