Во всей сети 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-серверу. Команда будет ждать и завершится по таймауту:
$ apt install -y netcat-openbsd$ nc -vz -w 5 smtp.example.com 587А HTTPS-запрос к API того же сервиса пройдёт сразу:
$ curl -sS -o /dev/null -w "%{http_code}\n" https://api.mail-provider.example/Решение: сервис отправки с API
Сервисы транзакционной почты принимают письмо по HTTPS-запросу и доставляют его со своих серверов с хорошей репутацией. Обычно у них есть бесплатный или недорогой тариф для небольших объёмов, статистика доставки и обработка отказов. Известные примеры — Mailgun, SendGrid, Postmark, Amazon SES, Unisender Go; выбирайте по цене, стране хранения данных и удобству API.
- 01Зарегистрируйтесь в сервисе отправки и добавьте свой домен.
- 02Добавьте в DNS домена записи SPF и DKIM, которые выдаст сервис, и дождитесь подтверждения.
- 03Создайте API-ключ с правом только на отправку.
- 04Переключите приложение на отправку через API: библиотекой сервиса, плагином или обычным HTTP-запросом.
- 05Отправьте тестовое письмо и проверьте, что оно не попало в спам.
Частые ошибки
- Письма уходят, но попадают в спам — не настроены SPF, DKIM и DMARC для домена отправителя.
- Форма обратной связи на сайте «молчит» — CMS пытается слать через mail() или SMTP. Установите плагин или модуль для отправки через API.
- Системные уведомления (cron, fail2ban) не приходят — их тоже отправляйте скриптом через API или заменяйте уведомлениями в мессенджер.