2013-10-25 3 views
1

Я хотел бы написать программу, которая соединяется с сервером gmail с использованием SMTP TLS. Я использую код, указанный на этой странице:SMTP TLS не работает для gmail

http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/

Я получаю время соединения из исключений. Я могу отправить почту по электронной почте, если я использую SMTP SSL.

public void sendUsingSMTP_TLS() { 
    final String username = "[email protected]"; 
    final String password = "password"; 

    Properties props = new Properties(); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.port", "587"); 

    Session session = Session.getInstance(props, 
     new javax.mail.Authenticator() { 
     protected PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication(username, password); 
     } 
     }); 

    try { 

     Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress("[email protected]")); 
     message.setRecipients(Message.RecipientType.TO, 
      InternetAddress.parse("[email protected]")); 
     message.setSubject("Testing Subject"); 
     message.setText("Dear Mail Crawler," 
      + "\n\n No spam to my email, please!"); 

     Transport.send(message); 

     System.out.println("Done"); 

    } catch (MessagingException e) { 
     throw new RuntimeException(e); 
    } 
} 

я получаю следующее исключение:

Exception in thread “main” java.lang.RuntimeException: javax.mail.MessagingException:    
Could not connect to SMTP host: smtp.gmail.com, port: 587; 
nested exception is: 
java.net.ConnectException: Connection timed out: connect 
at SMTP_TLS.main(SMTP_TLS.java:48) 
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587; 
nested exception is: 
java.net.ConnectException: Connection timed out: connect 
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961) 
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654) 
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:253) 
at javax.mail.Transport.send(Transport.java:124) 
at SMTP_TLS.main(SMTP_TLS.java:43) 
Caused by: java.net.ConnectException: Connection timed out: connect 
at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69) 
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) 
at java.net.Socket.connect(Socket.java:579) 
at java.net.Socket.connect(Socket.java:528) 
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:299) 
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:234) 
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927) 
… 7 more 
+0

Рекомендация: Подумайте о добавлении тега "java" в свой вопрос. –

+0

Вы решили это в конце? –

+0

Да, это разрешено согласно вашему предложению. Спасибо Daniel –

ответ

7

Исключение означает, что вы не можете подключиться к порту 587 на сервере smtp.gmail.com. Проверьте это с помощью Telnet:

telnet smtp.gmail.com 587 

(Это работает для меня, так что сервер и номер порта корректны.)

Возможные причины для этого, чтобы не работать от вашего местоположения являются:

  • Неверные настройки прокси-сервера в Java
  • Брандмауэр в вашем регионе, который запрещает подключение к этому номеру порта.

Если приведенная выше команда telnet может подключаться, вы можете исключить проблему с брандмауэром. Но если это не работает, и вы находитесь в сети компании, то, скорее всего, это межсетевой экран, который вызывает проблему.

Также узнайте номер порта, который используется вместе с другим способом подключения. Возможно, это также работает с TLS.

+0

Да, проблема была в брандмауэре. Ответить –

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