【问题标题】:JavaMail SocketException: Connection resetJavaMail SocketException:连接重置
【发布时间】:2013-04-21 19:34:54
【问题描述】:

我正在尝试通过 JavaMail API 发送电子邮件,但最终收到 SocketException: Connection reset。

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("userName@gmail.com","gmailPassword");
             }
         };

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


    try {

    Message message = new MimeMessage(session);
    Address sender  = new InternetAddress("any@...");
    message.setFrom(sender);

    String recipients = "email1@...,email2@...,email2@...";
    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,如果这很重要的话。

感谢任何可以帮助我解决此问题的人。

【问题讨论】:

  • Transport.send(..) 看起来很可疑。您在代码中的哪个位置连接到服务器?见stackoverflow.com/a/1990581/336802中的代码
  • @chr 是的,你是对的。令人惊讶的是,由于某种原因,该代码确实有效。 (这是我的防病毒软件中的一个愚蠢的 smtp 传出过滤器,它导致了套接字异常)。感谢您指出,我将添加您指出的代码。

标签: java jakarta-mail


【解决方案1】:

试试 JavaMail FAQ 中的这些调试技巧:

此外,您可能需要更正这些 common mistakes,尽管我认为它们与您的问题无关。

【讨论】:

  • 我实际上在链接中的代码中提到了一些错误。谢谢,我会修改我的代码。顺便说一句,我搞定了。原来是我的防病毒软件中的一个 smtp 传出过滤器阻止了连接。
  • 杀毒软件也是我的问题...!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
相关资源
最近更新 更多