javax.mail.MessagingException:无法连接到SMTP主机?

以下是我发送邮件的代码:

import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.Message.RecipientType; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class SendMail { public void sendMail(String m_from,String m_to,String m_subject,String m_body){ try { Session m_Session; Message m_simpleMessage; InternetAddress m_fromAddress; InternetAddress m_toAddress; Properties m_properties; m_properties = new Properties(); m_properties.put("mail.smtp.host", "usdc2spam2.slingmedia.com"); m_properties.put("mail.smtp.socketFactory.port", "465"); m_properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); m_properties.put("mail.smtp.auth", "true"); m_properties.put("mail.smtp.port", "9000"); m_Session=Session.getDefaultInstance(m_properties,new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("aaaaa","bbbbb@1"); // username and the password } }); m_simpleMessage = new MimeMessage(m_Session); m_fromAddress = new InternetAddress(m_from); m_toAddress = new InternetAddress(m_to); m_simpleMessage.setFrom(m_fromAddress); m_simpleMessage.setRecipient(RecipientType.TO, m_toAddress); m_simpleMessage.setSubject(m_subject); m_simpleMessage.setContent(m_body, "text/html"); //m_simpleMessage.setContent(m_body,"text/plain"); Transport.send(m_simpleMessage); } catch (MessagingException ex) { ex.printStackTrace(); } } public static void main(String[] args) { SendMail send_mail = new SendMail(); String empName = "xxxxx"; String title ="Hi !"+empName+""; send_mail.sendMail("123erft@slingmedia.com", "abz@gmail.com", "Please apply for leave for the following dates", title+"
by
HR"); } }

但是当我运行代码时,它给了我以下exception。

 javax.mail.MessagingException: Could not connect to SMTP host: usdc2spam2.slingmedia.com, port: 9000; nested exception is: java.net.ConnectException: Connection refused: connect at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638) at javax.mail.Service.connect(Service.java:317) at javax.mail.Service.connect(Service.java:176) at javax.mail.Service.connect(Service.java:125) at javax.mail.Transport.send0(Transport.java:194) at javax.mail.Transport.send(Transport.java:124) at samples.SendMail.sendMail(SendMail.java:46) at samples.SendMail.main(SendMail.java:55) Caused by: java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:288) at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:231) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900) 

当我ping这个usdc2spam2.slingmedia.com它给我回复没有任何问题。 我正在使用windows 7

请帮我解决这个问题。

这就是这两行让我解决的问题:

 m_properties.put("mail.smtp.socketFactory.port", "465"); m_properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); 

并添加了这一行:

 m_properties.put("mail.smtp.starttls.enable", "true"); 

删除并添加上面的代码后,它工作正常。

是什么导致您的问题就在堆栈跟踪中:

 java.net.ConnectException: Connection refused: connect 

你需要密码才能连接到SMTP服务器吗? 您确定使用正确的设置(如端口号)吗? 你是代理人还是防火墙? 您可以在常规邮件程序(例如Thunderbird)中使用这些设置并发送邮件吗?

当您尝试连接的端口上没有服务侦听时,通常会发生此exception。

尝试使用puttytelnet连接。 我敢打赌你会得到同样的错误。

validation这些事情:

  • 您尝试连接的主机名和端口,
  • 服务器正在正确监听,并且
  • 没有防火墙阻止连接。

尝试将端口9000添加到Windows防火墙中的入站规则中。