#Симптомы и область применимости
Форма сайта отправляет уведомления через SMTP, но библиотека пишет о неуспешном STARTTLS. Не смешивайте ошибки TLS, SMTP AUTH, DNS и сертификата; сервер может отвечать на TCP, но не поддерживать нужный режим подключения.
#Причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Перепутаны порты и режимыРазные порты работают с разными способами установления защищённого сеанса. | Клиент использует TLS сразу на 587 или STARTTLS на 465 | Сверьте порт и режим с документацией провайдера. |
| Сертификат не подходит имени сервераПриложение подключается к IP, алиасу или старому домену. | TLS завершается с name mismatch или verify failed | Используйте официальное DNS-имя SMTP и действительную цепочку. |
| STARTTLS не предлагаетсяСлужба не настроена или перед подключением стоит несовместимый шлюз. | Ответ EHLO не содержит STARTTLS | Проверьте конфигурацию submission и промежуточный узел. |
#Пошаговая диагностика и исправление
- 1. Прочитайте полную ошибку приложенияВ журнале отправки найдите тип исключения: timeout, certificate verify failed, handshake failed, AUTH error. Замаскируйте пароль и SMTP-токены перед копированием в отчёт. Если отказ 535 уже после TLS, не пытайтесь исправлять сертификат — проверяйте учётную запись.
- 2. Сверьте настройки отправителя в сайтеОткройте параметры почтового модуля сайта или конфигурационный файл в защищённом редакторе. Найдите hostname SMTP, порт, тип шифрования и имя учётной записи; не публикуйте пароль и не храните его в общедоступном webroot. Убедитесь, что модуль реально использует эти параметры.
- 3. Уточните официальный режим у провайдераОбычно 587 поддерживает STARTTLS, 465 — TLS с начала соединения, а 25 обслуживает передачу между серверами. Возможны индивидуальные настройки, поэтому проверьте справку конкретной почтовой службы. Не переключайте на незашифрованный режим ради обхода ошибки.
- 4. Проверяйте STARTTLS с той же машины, что запускает сайтВ терминале веб-сервера выполните диагностическое соединение к настоящему SMTP-хосту. При успешном рукопожатии изучите имя, сроки и цепочку сертификата; если timeout, переходите к исходящим сетевым ограничениям.
- Linux/Windows с OpenSSL, без администратора; замена домена обязательнаLinux · Терминал (Bash)КомандаLinux/Windows с OpenSSL, без администратора; замена домена обязательна. Проверяет TLS, не пароль.
openssl s_client -starttls smtp -connect mail.example.com:587 -servername mail.example.com -verify_return_error </dev/null
- 5. Проверьте DNS и сетевое ограничениеСравните разрешённый IP SMTP-хоста и доступность TCP-порта с веб-сервера. В облаках провайдер может ограничивать исходящий SMTP, особенно 25; порт 587 тоже может ограничиваться межсетевыми правилами. Не открывайте все исходящие порты для обхода.
- Linux с glibc; на других системах используйте nslookup или digLinux · Терминал (Bash)КомандаLinux с glibc; на других системах используйте nslookup или dig.
getent ahosts mail.example.com
- 6. Отдельно проверьте сертификаты и системное времяЕсли OpenSSL сообщает о недоверенном сертификате, проверьте имя, цепочку и часы сервера. Обновление доверенных корневых сертификатов выполняйте штатным механизмом ОС. Не используйте TLS verify=false в коде как постоянное решение.
- 7. Проверьте исходный код библиотеки только на поддерживаемые настройкиЕсли библиотека PHPMailer или иной модуль поддерживает STARTTLS, выберите рекомендованный провайдером способ, не придумывая имена параметров для своей версии. При неизвестной версии сначала определите её из зависимостей приложения и прочитайте официальную инструкцию.
- 8. Отправьте одно письмо и зафиксируйте результатПосле точечной правки отправьте уведомление на собственный тестовый адрес; проверьте успешный SMTP-ответ, очередь Postfix (если задействована) и факт получения. При новой ошибке верните исходные настройки и разберите новый этап обмена.
#Как убедиться, что проблема устранена
С веб-сервера успешно устанавливается защищённый SMTP-сеанс к нужному имени, приложение проходит авторизацию и доставляет одно тестовое письмо. Проверка сертификата остаётся включённой.
#Если проблема осталась
Если OpenSSL работает, а библиотека сайта нет, проверьте версию TLS-библиотеки/настройку SSL в конкретном приложении и цепочку ошибок, а не меняйте DNS. Если соединение заблокировано извне, обратитесь к хостеру с портом и кодом таймаута.