2013-04-27 87 views
0

我想通過JavaMail API發送電子郵件,但最終收到SocketException:Connection reset。JavaMail SocketException:連接重置

import java.util.Properties; 
import javax.mail.*; 
import javax.mail.internet.*; 

public class SendMailSSL { 
public static void main(String[] args) { 

Properties props = new Properties(); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.socketFactory.port", "465"); 
    props.put("mail.smtp.socketFactory.class", 
    "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.port", "465"); 

    Authenticator auth = new Authenticator() { 

      @Override 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication("[email protected]","gmailPassword"); 
      } 
     }; 

    Session session = Session.getDefaultInstance(props,auth); 


    try { 

    Message message = new MimeMessage(session); 
    Address sender = new InternetAddress("[email protected]"); 
    message.setFrom(sender); 

    String recipients = "[email protected],[email protected],[email protected]"; 
    String[] toList = recipients.split(","); 
    System.out.println(toList.length); 
    Address[] addressTo = new InternetAddress[toList.length]; 

    for(int i = 0; i < toList.length; i++){ 
    addressTo[i] = new InternetAddress(toList[i]); 
    } 

    for(int i=0; i < addressTo.length; i++) { // changed from a while loop 
      message.addRecipient(Message.RecipientType.TO, addressTo[i]); 
     } 


    message.setSubject("Testing Subject 5"); 
    message.setText("Dear Message ," + 
    "\n\n HELLO, please! \n https://192.168.192.120:8181/centralWeb"); 
    System.out.println("SENDING MAIL......... " + new Date().toString()); 

    message.setHeader("Content-type", "text/html; charset=UTF-8"); 
    Transport.send(message); 

    System.out.println("Done " + new Date().toString()); 

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

} 
} 

NetBeans的輸出:

1 
SENDING MAIL......... Sun Apr 28 01:30:18 IST 2013 
Exception in thread "main" java.lang.RuntimeException: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465; 
    nested exception is: 
    java.net.SocketException: Connection reset 
    at sendmailssl.SendMailSSL.main(SendMailSSL.java:65) 
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465; 
    nested exception is: 
    java.net.SocketException: Connection reset 
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706) 
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525) 
    at javax.mail.Service.connect(Service.java:313) 
    at javax.mail.Service.connect(Service.java:172) 
    at javax.mail.Service.connect(Service.java:121) 
    at javax.mail.Transport.send0(Transport.java:190) 
    at javax.mail.Transport.send(Transport.java:120) 
    at sendmailssl.SendMailSSL.main(SendMailSSL.java:60) 
Caused by: java.net.SocketException: Connection reset 
    at java.net.SocketInputStream.read(SocketInputStream.java:189) 
    at java.net.SocketInputStream.read(SocketInputStream.java:121) 
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:312) 
    at sun.security.ssl.InputRecord.read(InputRecord.java:350) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1328) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) 
    at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:503) 
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:234) 
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1672) 
    ... 7 more 
Java Result: 1 
BUILD SUCCESSFUL (total time: 2 seconds) 

我已經試過禁用IPv6和過於關閉我的防火牆,但問題仍然存在。如果有問題,我正在使用Windows 7 x64。

感謝任何能夠幫助我解決此問題的人。

+0

'Transport.send(..)'看起來很可疑。您在代碼中的哪個位置連接到服務器?請參閱http://stackoverflow.com/a/1990581/336802中的代碼 – chr 2013-04-28 00:02:51

+0

@chr是的,你是對的。令人驚訝的是,代碼確實工作出於某種原因。 (這是我的殺毒軟件中一個愚蠢的smtp輸出過濾器,導致套接字異常)。 感謝您指出,我將添加您指出的代碼。 – user2327683 2013-04-28 15:37:11

回答

1

嘗試從JavaMail的常見問題解答這些調試提示:

此外,您可能要糾正這些common mistakes,雖然我不認爲他們是相關到你的問題。

+1

我實際上有一些在鏈接中提到的錯誤,在我的代碼中。謝謝,我會修改我的代碼。順便說一句,我得到了它的工作。事實證明,這是一個smtp傳出過濾器在我的防病毒阻止連接。 – user2327683 2013-04-28 15:40:13

+0

ANTIVIRUS也是我的問題......! – HaveAGuess 2013-05-30 23:31:45

相關問題