JavaMail API 对我不起作用,但出现异常 com.sun.mail.util.MailConnectException:无法连接到主机、端口



我已经看到了有关此问题的所有问题和答案,我已经阅读了常见问题解答,尝试了我发现的所有解决方案,除了写自己的解决方案,我已经关闭了更安全的应用Gmail等等。当然,我已经检查了telnet连接,试图ping smtp.gmail.com ,一切正常。即使我已经写过(可以肯定的是(C#上的小应用程序,这花了我5分钟(这是一个工作!(。请给我一个线索,我该如何解决此问题。对于使用TTL或SSL的每个解决方案,我都会得到此stacktrace

    com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.gmail.com, 587; timeout -1;
  nested exception is:
    java.net.ConnectException: Connection refused: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2209)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:740)
    at javax.mail.Service.connect(Service.java:366)
    at javax.mail.Service.connect(Service.java:246)
    at com.luga.culturalpickup.UsableSendMail.sendFromGMail(UsableSendMail.java:64)
    at com.luga.culturalpickup.UsableSendMail.main(UsableSendMail.java:84)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:359)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2175)
    ... 5 more

我已经完全禁用防火墙。

即使我已经在Javamail API周围使用了一些包装器来发送字母,并且在内部掉落了这个例外!

我想使用java发送小电子邮件!


对于Exmaple,此代码产生上面指定的错误

public class GoogleTest {
    private static final String SMTP_HOST_NAME = "smtp.gmail.com";
    private static final String SMTP_PORT = "465";
    private static final String emailMsgTxt = "Test Message Contents";
    private static final String emailSubjectTxt = "A test from gmail";
    private static final String emailFromAddress = "mail4@gmail.com";
    private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
    private static final String[] sendTo = { "alex.95@mail.ru" };

    public static void main(String args[]) throws Exception {
        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
        new GoogleTest().sendSSLMessage(sendTo, emailSubjectTxt,
                emailMsgTxt, emailFromAddress);
        System.out.println("Sucessfully mail to All Users");
    }
    public void sendSSLMessage(String recipients[], String subject,
                               String message, String from) throws MessagingException {
        boolean debug = true;
        Properties props = new Properties();
        props.put("mail.smtp.host", SMTP_HOST_NAME);
        props.put("mail.smtp.auth", "true");
        props.put("mail.debug", "true");
        props.put("mail.smtp.port", SMTP_PORT);
        props.put("mail.smtp.socketFactory.port", SMTP_PORT);
        props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
        props.put("mail.smtp.socketFactory.fallback", "false");
        Session session = Session.getDefaultInstance(props,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication("mail4@gmail.com", "password");
                    }
                });
        session.setDebug(debug);
        Message msg = new MimeMessage(session);
        InternetAddress addressFrom = new InternetAddress(from);
        msg.setFrom(addressFrom);
        InternetAddress[] addressTo = new InternetAddress[recipients.length];
        for (int i = 0; i < recipients.length; i++) {
            addressTo[i] = new InternetAddress(recipients[i]);
        }
        msg.setRecipients(Message.RecipientType.TO, addressTo);
        // Setting the Subject and Content Type
        msg.setSubject(subject);
        msg.setContent(message, "text/plain");
        Transport.send(msg);
    }
}

我会遵循stacktrace

    DEBUG: JavaMail version 1.6.2
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
DEBUG: setDebug: JavaMail version 1.6.2
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true
Exception in thread "main" com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.gmail.com, 465; timeout -1;
  nested exception is:
    java.net.ConnectException: Connection refused: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2209)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:740)
    at javax.mail.Service.connect(Service.java:366)
    at javax.mail.Service.connect(Service.java:246)
    at javax.mail.Service.connect(Service.java:267)
    at javax.mail.Transport.send0(Transport.java:252)
    at javax.mail.Transport.send(Transport.java:174)
    at com.luga.culturalpickup.GoogleTest.sendSSLMessage(GoogleTest.java:72)
    at com.luga.culturalpickup.GoogleTest.main(GoogleTest.java:29)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:359)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:217)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2175)
    ... 8 more

配置详细信息对我来说还不错。

最大的线索是您正在获得"连接拒绝"。从理论上讲,有一些可能的解释:

  • smtp.gmail.com服务器都在下降。这是高度不太可能。
  • smtp.gmail.com服务器可能已将您的IP地址或包含您IP地址的网络范围列出。(也许gmail.com服务器通过您的ISP获得了太多的垃圾邮件。(
  • 也许在电子邮件上有一个全国范围的街区。(例如,有人声称中国有时会这样做。(
  • 也许ISP在这些端口上阻止了与smtp.gmail.com的连接...或者也许在此端口上的所有出站连接。这可能是为了防止您的ISP客户垃圾邮件。检查您的ISP有关发送电子邮件的条款和条件,并检查有关您如何应如何做的信息。
  • 也许您的组织正在阻止与SMTP.GMAIL.com的连接。可以这样做,以便他们可以监视所有即将进行的电子邮件。也可以这样做以防止可以解释为垃圾邮件的垃圾邮件或行为。与您的本地IT和网络经理联系。
  • 也许是您机器的内部防火墙。(尽管您说您禁用了它...(

您可以做一个简单的测试来验证这一点。使用" telnet"命令尝试在这两个端口上连接到smtp.gmail.com。如果您得到了"拒绝连接",则有很强的证据表明某种阻挡了某个地方。

最后,如果端口似乎是打开的,请检查您在此教程页面上所做的事情:

  • https://www.mkyong.com/java/javamail-api-sending-email-email-via-gmail-gmail-smtp-example/

一天半后,我发现了一个问题。这是由于AVG防病毒软件或更正确的AVG病毒所致。它已关闭(正如他所展示的那样(,但是我注意到与C#上写的应用程序发送的消息有关的一些AVG广告,我找到了一种绝对将其关闭的方法。它现在起作用!

相关内容

  • 没有找到相关文章

最新更新