2012-06-14 25 views
6

siguiente es el código para enviar correo:javax.mail.MessagingException: ¿No se pudo conectar al host 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","[email protected]"); // 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 ="<b>Hi !"+empName+"</b>"; 
     send_mail.sendMail("[email protected]", "[email protected]", "Please apply for leave for the following dates", title+"<br>by<br><b>HR<b>"); 
    } 
} 

pero cuando corro el código me da la siguiente excepción.

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) 

cuando me ping a este usdc2spam2.slingmedia.com Me da contesto sin ningún problema. Estoy usando windows 7

Ayúdame a resolver esto.

+1

ping no es una prueba de que puede enviar un correo electrónico. Pruebe 'telnet usdc2spam2.slingmedia.com 9000'. O si (Win7) no tiene 'telnet', use p. [Putty] (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) –

+1

¿Qué sucede cuando intentas usar 'telnet usdc2spam2.slingmedia.com 9000'? Sospecho que estás especificando el puerto incorrecto en la propiedad 'mail.smtp.port'. – beny23

Respuesta

4

Esto es estas dos líneas que me estaba echando el problema:

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

y ha añadido esta línea:

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

Después de eliminar y añadir las líneas anteriores de código que funcionaba bien.

+3

debería explicar por qué esta línea no es necesaria – SAR

+0

¡Funcionó pero no quité las dos líneas anteriores! – vnshetty

+0

no funciona para mí. –

2

Lo que hace que su problema está ahí mismo en el seguimiento de pila:

java.net.ConnectException: Connection refused: connect 

qué necesita una contraseña para conectarse al servidor SMTP? ¿Estás seguro de que estás usando la configuración correcta (como en el número de puerto)? ¿Estás detrás de un proxy o un firewall? ¿Puedes usar esas configuraciones en un programa de correo regular (por ejemplo, Thunderbird) y enviar correos?

2

Intente agregar el puerto 9000 a sus reglas entrantes en su firewall de Windows.

1

Esta excepción generalmente ocurre cuando no hay servicio de escucha en el puerto al que está tratando de conectarse.

Intente conectarse utilizando putty o telnet. Puedo apostar que obtendrás el mismo error.

comprobar estas cosas:

  • nombre de host y el puerto que está tratando de conectarse,
  • El servidor está escuchando correctamente y
  • Hay bloqueando la conexión sin cortafuegos.
Cuestiones relacionadas