我无法使用JavaMail从Hotmail地址发送电子邮件。我确认我可以通过telnet端口587连接到smtp.live.com。有趣的是(对我而言)是我改变了:
host =“smtp.gmail.com” t.connect(主机,用户名,密码);
它可以在默认端口上连接到Gmail并发送电子邮件。
但是,如果我将代码更改为:
host =“smtp.live.com” t.connect(主机,587,用户名,密码); 它给了我以下错误:
javax.mail.MessagingException:无法连接到SMTP主机:smtp.live.com,port:587;
嵌套异常是:
java.io.IOException:SSL握手失败:SSL库失败,通常是协议错误
错误:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知协议(外部/ openssl / ssl / s23_clnt.c:604 0xaf076228:0x00000000)
使用session.setDebug(true)我得到这个信息:
09-15 01:57:37.280:INFO / System.out(720):DEBUG:getProvider()返回javax.mail.Provider [TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems,公司,1.4.1] 09-15 01:57:37.300:INFO / System.out(720):DEBUG SMTP:useEhlo true,useAuth true 09-15 01:57:37.310:INFO / System.out(720):DEBUG SMTP:尝试连接主机“smtp.live.com”,端口587,isSSL true 09-15 01:57:37.330:INFO / SSLSocketFactory(720):使用工厂org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl@4007ed70 09-15 01:57:37.490:DEBUG / NativeCrypto(720):设置SSL_OP_NO_SSLv3 09-15 01:57:37.538:ERROR / NativeCrypto(720):连接时出现未知错误
看起来Hotmail与OpenSSL的搭配并不好。有人有解决方案吗?
以下是我的代码......以防它有用。
提前致谢,
Ĵ
String host = "smtp.live.com";
String username = foo@hotmail;
String password = "**";
Transport t = null;
Properties props = new Properties();
props.put("mail.smtps.auth", "true");
//props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
Session session = Session.getInstance(props);
session.setDebug(true);
try{
MimeMessage msg = new MimeMessage(session);
msg.setSubject("Testing SMTP-SSL");
msg.setContent("This is a test", "text/plain");
msg.setFrom(new InternetAddress(username));
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(username, false));
t = session.getTransport("smtps");
t.connect(host,587, username, password);
t.sendMessage(msg, msg.getAllRecipients());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
t.close();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:0)
向Hotmail / Outlook发送电子邮件时遇到同样的问题......
我通过在您的属性中将套接字工厂端口始终添加到578来解决它:
props.put("mail.smtp.socketFactory.port", "587");
对于hotmail案例,端口是25。
props.put("mail.smtp.port", "25");
有点晚但也许有帮助;)