2013-05-07 7 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. –

+0

@ Karthikeyan Привет, Как отключить SSL. –

+0

Просто используйте следующие свойства '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.auth", "true"); ' –

ответ

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 –

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-почта пытается подключиться к порту 425, указанному в ваших свойствах сеанса.

Смежные вопросы