2013-04-27 235 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