Почему подключение с учетными данными через SMTP не выполняет аутентификацию?

Пытаясь создать клиент электронной почты с использованием JavaFX и Jakarta Mail, я хотел реализовать тест подключения, чтобы убедиться, что введенные пользователем учетные данные действительно работают как для указанного ими сервера IMAP, так и для SMTP. У меня пока нет проблем с проверкой учетных данных IMAP.

Для моего кода проверки SMTP я искал в Интернете возможный подход и наткнулся на этот вопрос и реализовал его в своем проекте следующим образом:

public static boolean canConnectViaSmtp (String host, int port, String username, String password) {
        Properties properties = new Properties ();
        properties.put ("mail.smtp.auth", true);
        properties.put ("mail.smtp.starttls.enable", true);
        properties.put ("mail.debug", true);

        Session session = Session.getInstance (properties, null);
        session.setDebug (true);
        session.setDebugOut (System.out);
        Transport transport;

        try {
            transport = session.getTransport ("smtp");
        } catch (NoSuchProviderException e) {
            System.err.println ("Could not connect to smtp://" + host + ":" + port + ", Jakarta Mail is missing the SMTP provider");
            e.printStackTrace ();
            return false;
        }

        try {
            transport.connect (host, port, username, password);
            transport.close ();
        } catch (AuthenticationFailedException e) {
            System.err.println ("Credentials for smtp://" + host + ":" + port + " invalid");
            return false;
        } catch (MessagingException e) {
            System.err.println ("Could not connect to smtp://" + host + ":" + port + ", Jakarta Mail is reporting an error");
            e.printStackTrace ();
            return false;
        }

        return true;
}

Вопрос, который я связал выше, похоже, указывает на то, что это должно подтвердить, что учетные данные работают. Однако до сих пор я пробовал два SMTP-сервера под моим контролем, и обе попытки подключения не возвращали false с учетными данными, которые, я могу гарантировать, не работают.

В выводе отладки Jakarta Mail я также не вижу попыток выполнить SMTP AUTH (сокращенно журнал):

DEBUG: setDebug: Jakarta Mail version 2.0.0
DEBUG: getProvider() returning jakarta.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtpserver", port 25, isSSL false
... pre-STARTTLS communication ...
STARTTLS
220 TLS go ahead
EHLO mymachine
250-smtpserver Hello mymachine
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250 HELP
DEBUG SMTP: Found extension "SIZE", arg "52428800"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "HELP", arg ""
QUIT
221 smtpserver closing connection

Пока я пытался взглянуть на код Jakarta Mail, у меня нет времени на то, чтобы пытаться полностью понять его на всех уровнях абстракции. Это приводит меня к моему вопросу: возможна ли проверка учетных данных SMTP через Jakarta Mail, и если да, то как?


person Alexander Leithner    schedule 06.03.2021    source источник


Ответы (1)


Ваши серверы не настроены для объявления расширения аутентификации SMTP (RFC 4954), судя по EHLO. отклик.

Затем учетные данные не отправляются клиентом (поскольку сервер все равно их не поймет).

Вы должны увидеть что-то вроде этого в ответе сервера:

250-AUTH GSSAPI DIGEST-MD5

Выдержка из RFC 4954:

Ключевое слово AUTH EHLO содержит в качестве параметра разделенный пробелами список имен доступных механизмов [SASL]. Список доступных механизмов МОЖЕТ измениться после успешной команды STARTTLS [SMTP-TLS].

person rkosegi    schedule 06.03.2021
comment
Технически серверы настроены на поддержку аутентификации, поскольку я запрещаю отправлять почту без надлежащих учетных данных. Однако я не обратил внимания на порт, который использовал, и поэтому остановился на том, который его не рекламировал. Так что это была моя вина, а не вина Jakarta Mail. - person Alexander Leithner; 06.03.2021