JavaMail API не работает для меня с исключением com.sun.mail.util.MailConnectException: не удалось подключиться к хосту, порту - PullRequest
0 голосов
/ 02 мая 2019

Я видел все вопросы и ответы по этой проблеме, я прочитал FAQ, перепробовал все найденные решения, кроме написания своего собственного, я отключил менее безопасное приложение Gmail и так далее.Я проверил соединение telnet, конечно, попытался пропинговать smtp.gmail.com и все работает отлично.Даже я написал (чтобы быть уверенным) небольшое приложение на C #, которое заняло у меня 5 минут (и это работает!).Пожалуйста, дайте мне понять, как я могу решить эту проблему.Для каждого решения, использующего ttl или ssl, я получаю вот эту трассировку стека

    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!


, например, этот код выдает ошибку, указанную выше

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

Я получаю следующеетрассировка стека

    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

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Детали конфигурации выглядят хорошо для меня.

Большая подсказка в том, что вы получаете "Отказ в соединении".Теоретически, есть несколько возможных объяснений этому:

  • Все серверы smtp.gmail.com не работают.Это очень маловероятно.
  • Серверы smtp.gmail.com могут занести в черный список ваш IP-адрес или диапазон сети, содержащий ваш IP-адрес.(Возможно, серверы gmail.com получали слишком много СПАМА через вашего интернет-провайдера.)
  • Возможно, в электронной почте есть блокировка по всей стране.(Например, было заявлено , что Китай иногда делает это.)
  • Возможно, интернет-провайдер блокирует соединение с smtp.gmail.com на этих портах ... или, возможно, все исходящие соединенияна этих портах.Это может быть сделано для предотвращения рассылки спама клиентами вашего интернет-провайдера.Ознакомьтесь с положениями и условиями вашего интернет-провайдера относительно отправки электронных писем, а также проверьте, как должен сделать это.
  • Возможно, ваша организация блокирует подключение к smtp.gmail.com.Это можно сделать, чтобы они могли отслеживать все исходящие электронные письма.Это также может быть сделано для предотвращения спама или поведения, которое можно интерпретировать как спам.Обратитесь к местным ИТ-менеджерам и сетевым менеджерам.
  • Возможно, это внутренний брандмауэр вашей машины.(Хотя вы говорите, что отключили его ...)

Существует один простой тест, который вы можете проверить.Используйте команду "telnet", чтобы попытаться подключиться к smtp.gmail.com через эти два порта.Если вы получили «Отказано в соединении», это убедительное свидетельство какой-то блокировки.

Наконец, если порты открыты, проверьте, что вы делаете с этой страницей учебника:


0 голосов
/ 02 мая 2019

Через полтора дня я обнаружил проблему.Это было связано с AVG антивирусом или, если говорить точнее, AVG вирусом.Он был отключен (как он мне показывал), но я заметил некоторую среднюю рекламу, прикрепленную к сообщениям, отправленным с приложением, написанным на C #, я нашел способ действительно отключить его!И это работает сейчас!

...