Почему возникает ошибка "Не удается подключиться к хосту SMTP"?

Почему мой код для отправки электронной почты выдает ошибку "Could not connect to SMTP host: smtp.gmail.com, port: 465"?

```java
String host = "smtp.gmail.com";
String username = "[email protected]";
String password = "myPassword";
String recipientEmail = "[email protected]";
String subject = "Тема письма";
String message = "Текст письма.";

Properties properties = new Properties();
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.smtp.ssl.trust", "true");
properties.put("mail.smtp.port", "465");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.debug", "true");
properties.put("mail.smtp.socketFactory.port", "465");
properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.socketFactory.fallback", "false");

Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
    }
});
session.setDebug(true);
try {
    MimeMessage mimeMessage = new MimeMessage(session);
    mimeMessage.setFrom(new InternetAddress(username));
    mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(recipientEmail));
    mimeMessage.setSubject(subject);
    mimeMessage.setText(message);

    Transport.send(mimeMessage);
    System.out.println("Письмо успешно отправлено.");
} catch (MessagingException ex) {
    ex.printStackTrace();
    System.out.println("Ошибка при отправке письма.");
}
```
  • 4 января 2024 г. 10:58
Ответы на вопрос 2
Ошибка "Could not connect to SMTP host: smtp.gmail.com, port: 465" указывает на проблему подключения к серверу SMTP. Вот некоторые причины, по которым может возникать эта ошибка:

1. **Неверные настройки SMTP**: Убедитесь, что используемые настройки SMTP правильные. Для Gmail они обычно следующие:
   - **SMTP host**: `smtp.gmail.com`
   - **Port**: `465` для SSL или `587` для TLS
   - **Authentication**: `true`
   - **StartTLS**: `true`, если используете порт `587`

2. **Ошибки в учетных данных**: Проверьте, правильно ли вы ввели адрес электронной почты и пароль. Обратите внимание, что, если у вас включена двухфакторная аутентификация для учетной записи Gmail, вам может потребоваться использовать специальный пароль приложения вместо обычного пароля.

3. **Фаервол или антивирус**: Программное обеспечение фаервола или антивирус может блокировать подключение к серверам SMTP. Проверьте настройки безопасности и исключите Java или ваше приложение из списка блокируемых.

4. **Проблемы сетевого подключения**: Могут быть проблемы с сетевым подключением на вашем компьютере или на стороне серверов Gmail.

5. **Настройки Gmail**: Возможно, в настройках безопасности Gmail не включен доступ для менее безопасных приложений. Чтобы отправлять письма через код, вам может потребоваться разрешить это в настройках безопасности вашего аккаунта Gmail.

6. **Истек срок действия пароля или изменения политик безопасности**: Если недавно меняли пароль или в Google были изменения в политике безопасности, это может повлиять на возможность подключения.

7. **Использование прокси-сервера**: Если вы подключены к интернету через прокси-сервер, это может мешать подключению к серверам SMTP.

Для первоначальной диагностики попробуйте выполнить следующие действия:

- Убедитесь, что вы можете вручную подключиться к `smtp.gmail.com` через порт `465` с помощью таких инструментов как `telnet` или `openssl s_client`.
- Проверьте логи программы на предмет подробных ошибок.
- Пересмотрите настройки безопасности вашего аккаунта Gmail.
- Проверьте все сетевые настройки, включая фаервол и антивирус.

Также хочу отметить, что в коде есть следующая несогласованная строка:

```java
properties.put("mail.smtp.ssl.trust", "true");
```

Здесь `"true"` должно быть `"smtp.gmail.com"`, потому что этот параметр указывает, какому хосту можно доверять при использовании SSL:

```java
properties.put("mail.smtp.ssl.trust", "smtp.gmail.com");
```

Проблема также может быть связана с использованием параметра `mail.smtp.starttls.enable`, который не необходим при использовании SSL и порта `465`. Если вы используете TLS с портом `587`, тогда этот параметр должен быть включен. Вам нужно будет выбрать один из способов (SSL или TLS) и использовать соответствующие порты (`465` для SSL или `587` для TLS) и параметры.
Прошлись по чек листу? 
https://support.google.com/a/answer/176600?hl=ru

Сам порт на гугл открыт с вашего компа? Успешно можете телнетом постучать?
Похожие вопросы