2013-05-07 235 views
1

我想使用下面的程序发送邮件,但我收到以下错误消息。邮件发送失败,SMTP无法连接

   public class SMTPTest { 
    //private Logger log = Logger.getLogger(this.getClass()); 

    public boolean sendSimpleMail(String to, String subject, String body) { 
     Properties props = new Properties(); 
     props.put("mail.smtp.user", "amrita_test"); 
     props.put("mail.smtp.password", "aview"); 
     props.put("mail.smtp.host", "192.168.0.25"); 
     props.put("mail.smtp.port", "25"); 
     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.auth", "true"); 
     // props.put("mail.smtp.debug", "true"); 
     props.put("mail.smtp.debug", "false"); 
     props.put("mail.smtp.socketFactory.port", "425"); 
     props.put("mail.smtp.socketFactory.class", 
       "javax.net.ssl.SSLSocketFactory"); 
     props.put("mail.smtp.socketFactory.fallback", "false"); 
     try { 
      Authenticator auth = new SMTPAuthenticator(); 
      Session session = Session.getInstance(props, auth); 
      // session.setDebug(true); 
      MimeMessage msg = new MimeMessage(session); 
      String content = body; 
      msg.setSubject(subject); 
      msg.setFrom(new InternetAddress("[email protected]")); 
      Address[] addresses = new Address[1]; 
      addresses[0] = new InternetAddress("[email protected]"); 
      msg.setReplyTo(addresses); 
      msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
      msg.setContent(content, "text/html"); 
      Transport.send(msg); 
      return true; 
     } catch (Exception mex) { 
      mex.printStackTrace(); 
      System.out.println("Error in sending mail :: " + mex.getMessage()); 
      return false; 
     } 
    } 

    private class SMTPAuthenticator extends Authenticator { 
     public PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication("amrita_test", 
        "aview"); 
     } 
    } 
    public static void main(String args[]){ 
     SMTPTest test=new SMTPTest(); 
     test.sendSimpleMail("[email protected]", "subject", "body"); 
    } 
} 

错误是: javax.mail.MessagingException的:无法连接到SMTP主机:192.168.0.25,端口:25;

nested exception is: 
    java.net.ConnectException: Connection timed out: connect 
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282) 
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370) 
    at javax.mail.Service.connect(Service.java:297) 
    at javax.mail.Service.connect(Service.java:156) 
    at javax.mail.Service.connect(Service.java:105) 
    at javax.mail.Transport.send0(Transport.java:168) 
    at javax.mail.Transport.send(Transport.java:98) 
    at SMTPTest.sendSimpleMail(SMTPTest.java:45) 
    at SMTPTest.main(SMTPTest.java:62) 
Caused by: java.net.ConnectException: Connection timed out: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 
    at java.net.Socket.connect(Socket.java:519) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:550) 
    at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141) 
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232) 
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:163) 
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250) 
    ... 8 more 

但SMTP服务器或连接没有问题。 telnet 192.168.0.25 25 连接正常。 如何解决这个问题。

+1

您正在使用SSL,端口将不同于SSL而不是25.更改端口并检查是否可以使用该端口执行telnet或禁用SSL。 – 2013-05-07 09:20:28

+0

@ Karthikeyan嗨,如何禁用SSL。 – 2013-05-07 09:39:36

+0

只需使用以下属性'props.put(“mail.smtp.user”,“amrita_test”); props.put(“mail.smtp.password”,“aview”); props.put(“mail.smtp.host”,“192.168.0.25”); (“mail.smtp.port”,“25”); props.put(“mail.smtp.auth”,“true”);' – 2013-05-07 09:43:37

回答

0

如果这是一个身份验证问题,我相信你会得到一个不同的错误。

您的网络/ SMTP服务器是否支持IP6?如果您的客户端支持IP6,则更高版本的Java默认为IP6,但许多SMTP服务器都配置为IP4。请参阅此文章Sending email using JSP了解如何让您的JVM强​​制实施IP4。这需要在JVM实例化时设置。

+0

在com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1196) \t在com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:584) \t在javax.mail.Transport。 send0(Transport.java:169) \t在javax.mail.Transport.send(Transport.java:98) \t在SMTPTest.sendSimpleMail(SMTPTest.java:51) \t在SMTPTest.main(SMTPTest.java:68 ) 引起:com.sun.mail.smtp.SMTPAddressFailedException:503 – 2013-05-08 07:16:41

0

请尝试通过从代码中仅删除以下内容来再次发送邮件。

props.put("mail.smtp.socketFactory.port", "425"); 
    props.put("mail.smtp.socketFactory.class", 
      "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.socketFactory.fallback", "false"); 

通常情况下,异常

java.net.ConnectException:连接超时

只有在Java邮件无法连接到服务器提到的造成指定的端口。最可能的原因是java邮件试图连接到会话属性中指定的425端口。

相关问题