1

我在使用 JavaMail 从 hotmail 地址发送电子邮件时遇到问题。我验证我可以通过 telnet 端口 587 连接到 smtp.live.com。有趣的事情(对我来说)是如果我改变:

主机=“smtp.gmail.com”t.connect(主机,用户名,密码);

它可以在默认端口上很好地连接到 Gmail 并发送电子邮件。

但是,如果我将代码更改为:

host = "smtp.live.com" t.connect(host,587, username, password); 它给了我以下错误:

javax.mail.MessagingException:无法连接到 SMTP 主机:smtp.live.com,端口: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, Inc., 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): Using factory org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl @ 4007ed70 09-15 01:57:37.490:调试/NativeCrypto(720):设置 SSL_OP_NO_SSLv3 09-15 01:57:37.538:错误/NativeCrypto(720):连接期间出现未知错误 1

看起来 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();

}

} 
4

1 回答 1

0

我在向 Hotmail/Outlook 发送电子邮件时遇到了同样的问题......

我通过在您的属性中将套接字工厂端口始终添加到 578 来解决它,例如:

props.put("mail.smtp.socketFactory.port", "587");

对于 hotmail 的情况,端口是 25。

props.put("mail.smtp.port", "25");

有点晚了,但也许有帮助;)

于 2014-09-08T10:19:46.353 回答