Skip to content

This article is available in Russian. An English version is on the way.Open the Russian page

Почтовые порты 25, 465 и 587 закрыты: как отправлять письма

Почему исходящий SMTP заблокирован во всей сети, как это проверить и как сайту или приложению всё равно отправлять почту — через HTTP API почтового сервиса.

Level
Beginner
Reading time
3 min read
Updated
Tested on
Ubuntu 22.04, Ubuntu 24.04, Debian 12
Contents
  1. Что работает, а что нет
  2. Как убедиться, что дело в порте
  3. Решение: сервис отправки с API
  4. Частые ошибки

Во всей сети QoCloud закрыты исходящие соединения на порты 25, 465 и 587 — это порты, по которым серверы отправляют почту по протоколу SMTP. Так мы защищаем IP-адреса от попадания в спам-листы: один взломанный сервер, рассылающий спам, способен испортить репутацию целой подсети, и письма остальных клиентов перестанут доходить.

Ограничение действует для всех серверов и не снимается по запросу. При этом отправлять письма из ваших приложений можно — через почтовый сервис по HTTPS.

Что работает, а что нет

ЗадачаРаботает?
Отправка через SMTP с сервера (Postfix, Exim, PHP mail(), SMTP-библиотеки) на порты 25/465/587Нет
Отправка через HTTP API почтового сервиса (порт 443)Да
Подключение к внешнему сервису по HTTPS, IMAP-сбор писемДа
Почтовые ящики на своём домене у почтового хостингаДа, сервер для этого не нужен

Ограничение касается только исходящих соединений на почтовые порты. Но собственный почтовый сервер, который не может отправлять письма, почти бесполезен, поэтому ящики для людей удобнее держать у почтового хостинга, а с VPS — отправлять служебные письма через API.

Как убедиться, что дело в порте

Если приложение пишет «Connection timed out» при отправке почты, проверьте подключение к SMTP-серверу. Команда будет ждать и завершится по таймауту:

bash
$ apt install -y netcat-openbsd$ nc -vz -w 5 smtp.example.com 587

А HTTPS-запрос к API того же сервиса пройдёт сразу:

bash
$ curl -sS -o /dev/null -w "%{http_code}\n" https://api.mail-provider.example/

Решение: сервис отправки с API

Сервисы транзакционной почты принимают письмо по HTTPS-запросу и доставляют его со своих серверов с хорошей репутацией. Обычно у них есть бесплатный или недорогой тариф для небольших объёмов, статистика доставки и обработка отказов. Известные примеры — Mailgun, SendGrid, Postmark, Amazon SES, Unisender Go; выбирайте по цене, стране хранения данных и удобству API.

  1. 01Зарегистрируйтесь в сервисе отправки и добавьте свой домен.
  2. 02Добавьте в DNS домена записи SPF и DKIM, которые выдаст сервис, и дождитесь подтверждения.
  3. 03Создайте API-ключ с правом только на отправку.
  4. 04Переключите приложение на отправку через API: библиотекой сервиса, плагином или обычным HTTP-запросом.
  5. 05Отправьте тестовое письмо и проверьте, что оно не попало в спам.

Частые ошибки

  • Письма уходят, но попадают в спам — не настроены SPF, DKIM и DMARC для домена отправителя.
  • Форма обратной связи на сайте «молчит» — CMS пытается слать через mail() или SMTP. Установите плагин или модуль для отправки через API.
  • Системные уведомления (cron, fail2ban) не приходят — их тоже отправляйте скриптом через API или заменяйте уведомлениями в мессенджер.

Read to the end and the article counts toward your learning progress.

  • почта
  • smtp
  • порт 25
  • порт 587
  • email
  • рассылка

Was this article helpful?