2012-06-14 13 views
6

folgende ist mein Code E-Mail senden:javax.mail.MessagingException: Verbindung zum SMTP-Host konnte nicht hergestellt werden?

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>"); 
    } 
} 

, aber wenn ich den Code ausführen es gibt mir die folgende Ausnahme.

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) 

als ich dieses usdc2spam2.slingmedia.com ping es gibt mir ohne Probleme zu beantworten. Ich verwende windows 7

Bitte helfen Sie mir, dies zu lösen.

+1

Ping ist kein Beweis, dass Sie eine E-Mail senden können. Versuchen Sie 'telnet usdc2spam2.slingmedia.com 9000'. Oder wenn Sie (Win7) nicht über "Telnet" verfügen, verwenden Sie z. [Putty] (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) –

+1

Was passiert, wenn Sie 'telnet usdc2spam2.slingmedia.com 9000' ausprobieren? Ich vermute, dass Sie in der Eigenschaft "mail.smtp.port" den falschen Port angeben. – beny23

Antwort

4

Dies ist diese beiden Linien, die mir das Problem war Gießen:

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

und hinzugefügt, um diese Zeile:

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

Nach dem Entfernen und Hinzufügen der obigen Codezeilen es funktionierte gut.

+3

sollte erklären, warum diese Zeile nicht benötigt wird – SAR

+0

Es funktionierte, aber ich dint entfernen über zwei Zeilen! – vnshetty

+0

funktioniert nicht für mich. –

2

Was bewirkt, dass Ihr Problem direkt in dem Stack-Trace ist:

java.net.ConnectException: Connection refused: connect 

brauchen Sie ein Passwort für den SMTP-Server zu verbinden? Sind Sie sicher, dass Sie die richtigen Einstellungen (wie in der Portnummer) verwenden? Sind Sie hinter einem Proxy oder einer Firewall? Können Sie diese Einstellungen in einem normalen Mailprogramm (z. B. Thunderbird) verwenden und E-Mails senden?

2

Versuchen Sie, den eingehenden Regeln in Ihrer Windows-Firewall den Port 9000 hinzuzufügen.

1

Diese Ausnahmebedingung tritt normalerweise auf, wenn an dem Port, mit dem Sie eine Verbindung herstellen möchten, kein Dienst überwacht wird.

Versuchen Sie, die Verbindung über putty oder telnet herzustellen. Ich kann wetten, dass Sie den gleichen Fehler bekommen werden.

Stellen Sie sicher, diese Dinge:

  • Hostname und Port, den Sie,
  • Der Server richtig zuhört, und
  • Es gibt keine Firewall die Verbindung zu verbinden sind versucht, zu blockieren.
Verwandte Themen