Почему письма не отправляются с сервера Ubuntu по SMTP, в то время как с локального компьютера на Windows все работает корректно?

Добрый день! <br/> <br/> У меня есть код на C#, который отправляет электронные письма: <br/> <pre><code class="cs">MailMessage mail = new MailMessage();
        mail.From = new MailAddress(EmailLogin); 
        mail.To.Add(new MailAddress(emailAddress)); 
        mail.Subject = "SUBJECT";
        mail.IsBodyHtml = false;
        mail.Body = "Body";

        SmtpClient client = new SmtpClient();
        client.Host = "smtp.mail.ru";
        client.Port = 587; 
        client.EnableSsl = true;
        client.Credentials = new NetworkCredential(EmailLogin, EmailPassword); 
        client.Send(mail);</code></pre> <br/> <br/> Я тестировал этот код на локальной машине, и все работало без проблем, но после загрузки на сервер Ubuntu возникла ошибка: <br/> <br/> Я подозреваю, что проблема может быть связана с SSL, но у меня нет глубоких знаний в этой области. У меня есть опыт в подключении сертификатов для домена, но сейчас у меня голый сервер с открытым статичным IP, без домена и вообще без необходимости в нем. <br/> <br/> У меня установлена версия OpenSSL 3.0.2 <br/> <br/> Можете подсказать, на что следует обратить внимание в данной ситуации? Спасибо!
  • 20 ноября 2024 г. 18:13
Ответы на вопрос 2
Здравствуйте!

При отправке электронных писем с сервера Ubuntu с использованием SMTP может возникать несколько проблем. Вот несколько шагов и идей, которые помогут вам диагностировать и, возможно, решить эту проблему.

1. **Проверка правил брандмауэра**:
   Убедитесь, что у вас нет правил брандмауэра, блокирующих исходящие соединения на порт 587. В Ubuntu для управления брандмауэром может использоваться `ufw` (Uncomplicated Firewall). Попробуйте временно отключить брандмауэр и проверить, работает ли отправка:
   ```bash
   sudo ufw disable
   ```
   Если это решает проблему, настройте правила брандмауэра для разрешения трафика на нужный порт.

2. **Проверка зависимостей .NET**:
   Убедитесь, что на сервере Ubuntu установлены все необходимые зависимости для работы .NET и приложений, использующих SSL. Попробуйте установить или обновить пакеты:
   ```bash
   sudo apt-get install libssl-dev
   ```

3. **Проверка сетевых соединений**:
   Убедитесь, что ваш сервер может подключаться к SMTP-серверу. Вы можете использовать утилиту `telnet` или `openssl` для проверки доступности порта:
   ```bash
   telnet smtp.mail.ru 587
   ```
   или
   ```bash
   openssl s_client -connect smtp.mail.ru:587 -starttls smtp
   ```
   Если соединение не удается, возможно, проблема на стороне вашего провайдера или в настройках сети.

4. **Установка сертификатов**:
   Если проблема действительно связана с SSL, убедитесь, что на сервере установлены необходимые сертификаты. Обычно это делается с помощью следующей команды:
   ```bash
   sudo apt-get install ca-certificates
   sudo update-ca-certificates
   ```

5. **Проверка логов**:
   Обратите внимание на логи вашего приложения и самой системы (например, `/var/log/syslog`), чтобы получить дополнительную информацию о возникшей ошибке. Это может дать подсказки, почему соединение не устанавливается.

6. **Обновление .NET и библиотек**:
   Убедитесь, что у вас установлена последняя версия .NET и все компоненты актуальны. Это можно сделать с помощью:
   ```bash
   sudo apt-get update
   sudo apt-get upgrade
   ```

7. **Проверка учетных данных**:
   Убедитесь, что имя пользователя и пароль, которые вы используете для аутентификации в SMTP-сервере, верны.

8. **Тестирование с другим SMTP-сервером**:
   Если все вышеперечисленное не помогло, попробуйте протестировать отправку почты с другого SMTP-сервера, чтобы исключить проблемы со стороны smtp.mail.ru.

Можно попробовать использовать более детализированное логирование в вашем приложении, чтобы выяснить точную причину ошибки при отправке. Удачи! Если возникнут дополнительные вопросы, не стесняйтесь обращаться.
Спасибо всем огромное! Помог топик с issue на github. Ссылку предоставил пользователь AlexVWill в комментариях! 

А именно 1ый пункт
1. Comment out the ssl_conf value in /etc/ssl/openssl.cnf
2. Uninstall OpenSSL 1.0.x
3. Set CLR_OPENSSL_VERSION_OVERRIDE=1.1 to force OpenSSL 1.1 to be used. (2.1 prefers binding to OpenSSL 1.0.x because that's what it shipped with... it only uses 1.1 if explicitly told to, or if 1.0 isn't available)
Похожие вопросы