Порты SMTP 25, 465, 587 и 2525: какой выбрать и почему 25 закрыт

Для отправки писем из приложения выбирайте SMTP-порт 587 со STARTTLS или 465 с шифрованием с первого байта (SSL/TLS). Порт 25 предназначен для обмена почтой между серверами, и многие облака и хостинги закрывают его на выход по умолчанию. Порт 2525 нигде не стандартизирован: это запасной вариант, который держат некоторые сервисы рассылок.
Ниже разберём, чем порты отличаются по протоколу, почему одни и те же настройки работают на ноутбуке и молчат на VPS, как за минуту проверить порт командой и что делать, если хостинг закрыл все стандартные порты.
Короткий ответ: какой порт SMTP выбрать
| Порт | Назначение | Шифрование | Стандарт | Когда выбирать |
|---|---|---|---|---|
| 587 | отправка от клиента или приложения (submission) | STARTTLS после приветствия | RFC 6409 | по умолчанию для приложений, CMS и почтовых программ |
| 465 | отправка с неявным TLS (submissions) | TLS с первого байта | RFC 8314 | если библиотека умеет SSL/TLS или 587 закрыт |
| 25 | обмен почтой между серверами (relay, MX) | необязательный STARTTLS | RFC 5321 | только для сервера, который принимает почту из интернета |
| 2525 | нестандартный запасной порт | обычно STARTTLS | не зарегистрирован | если провайдер его предлагает, а 587 и 465 закрыты |
Если сомневаетесь, ставьте 587. Если библиотека спрашивает «SSL или TLS», для 465 выбирайте SSL (неявный TLS), для 587 — TLS (STARTTLS).
Как устроены порты почты: кто к кому подключается
В вопросе, какой порт у SMTP, легко запутаться: в почте есть две разные дороги, и обе называются SMTP.
Первая дорога — от вашего приложения до почтового сервиса. Это отправка (submission): приложение подключается к серверу провайдера, проходит аутентификацию логином и паролем и передаёт письмо. Для неё и существуют 587 и 465.
Вторая дорога — от сервера провайдера до сервера получателя. Провайдер находит MX-запись домена получателя и подключается к ней на порт 25. Здесь пароля нет: принимающий сервер проверяет не логин, а репутацию IP-адреса, SPF, DKIM и DMARC.
Когда хостинг пишет «исходящие порты SMTP закрыты», речь идёт о портах на стороне сервера, к которому вы подключаетесь. Ваш сервер открывает соединение со случайного локального порта на порт 25, 465 или 587 удалённого хоста, и фильтр смотрит именно на этот порт назначения.
Порты SMTP, IMAP и POP3
SMTP только отправляет. Чтобы почтовая программа читала ящик, нужны IMAP или POP3, и у них свои порты:
| Протокол | Без шифрования или STARTTLS | С TLS с первого байта |
|---|---|---|
| SMTP (отправка) | 587 | 465 |
| SMTP (между серверами) | 25 | — |
| IMAP (чтение, папки на сервере) | 143 | 993 |
| POP3 (скачивание писем) | 110 | 995 |
Приложению, которое только отправляет письма, IMAP и POP3 не нужны.
Порт 25: почему его закрывают
Порт 25 появился вместе с самим SMTP, и долгое время им пользовались все: и серверы, и почтовые программы. Проблема в том, что через 25 можно отправить письмо прямо на MX получателя, без логина и без провайдера. Заражённые компьютеры и арендованные на час серверы так и рассылали спам, поэтому провайдеры начали закрывать исходящий 25 у клиентов, а отправку из программ вынесли на отдельный порт 587 с обязательной аутентификацией.
Сейчас исходящий 25 закрыт по умолчанию почти в каждом облаке:
- Yandex Cloud блокирует исходящий трафик на TCP-порт 25 ко всем серверам в интернете, кроме почтовых серверов Яндекса; открыть порт можно запросом в поддержку.
- Google Cloud блокирует соединения на порт 25 к адресам за пределами вашей сети VPC, а порты 587 и 465 не ограничивает.
- Selectel блокирует исходящий трафик на порты 25, 465 и 587 к публичным адресам; для облачных и выделенных серверов блокировку можно снять, для VDS — нет.
- Timeweb Cloud при создании сервера закрывает порты 25, 465, 587 и 2525; снять блокировку можно в панели управления или через поддержку.
Входящий 25 при этом обычно открыт: сервер принимает почту, но сам до чужих MX не достучится. Поэтому типичная жалоба звучит как «письма на сервер приходят, а с сервера не уходят».
Для отправки из приложения 25 не нужен. Даже если порт открыт, соединение по нему часто идёт без шифрования, и логин с паролем уходят по сети открытым текстом.
Шифрование между серверами на порту 25
На 25 шифрование между серверами оппортунистическое: отправитель предлагает STARTTLS, и если принимающий сервер его не поддерживает или рукопожатие не удалось, письмо уйдёт открытым текстом. Gmail с 2024 года требует TLS от всех, кто отправляет на его адреса, но в общем случае гарантий нет. Домен-получатель может их добавить политикой MTA-STS (RFC 8461): она сообщает отправителям, что почту на этот домен можно передавать только по TLS с проверенным сертификатом. К отправке из приложения это не относится: там за шифрование отвечают 587 и 465.
Порт 587: стандарт для отправки
587 — порт отправки по RFC 6409. Соединение начинается без шифрования: сервер здоровается, клиент отправляет EHLO, видит в списке расширений STARTTLS, переключает соединение на TLS и только после этого проходит аутентификацию.
import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg["From"] = "Магазин <noreply@mail.example.ru>"
msg["To"] = "client@example.ru"
msg["Subject"] = "Заказ №4417 принят"
msg.set_content("Заказ принят. Доставка — завтра до 18:00.")
with smtplib.SMTP("smtp.fmailer.ru", 587) as smtp:
smtp.starttls()
smtp.login("<логин токена>", "<пароль токена>")
smtp.send_message(msg)
Порт 587 поддерживает практически любая библиотека и любая CMS, поэтому его и стоит ставить первым. Слабое место у STARTTLS одно: клиент должен требовать шифрование. Клиент, который продолжает без TLS, когда сервер не предложил STARTTLS, отдаст пароль любому, кто вмешается в соединение. Во фреймворках за это отвечают флаги вроде EMAIL_USE_TLS = True в Django или secure: false с requireTLS: true в Nodemailer.
Порт 465: SMTP с SSL/TLS с первого байта
465 — это «порт SMTP SSL». Соединение шифруется сразу, ещё до приветствия сервера, и открытой фазы, которую можно подменить, нет.
У порта запутанная история. В конце 1990-х его зарегистрировали под SMTP поверх SSL, вскоре регистрацию отозвали в пользу STARTTLS на 587, но почтовые программы продолжали им пользоваться. В 2018 году RFC 8314 вернул 465 под отправку с неявным TLS и назвал такой способ предпочтительным. Поэтому оба варианта, 465 и 587, сегодня правильные.
import smtplib
# msg собран так же, как в примере выше
with smtplib.SMTP_SSL("smtp.fmailer.ru", 465) as smtp:
smtp.login("<логин токена>", "<пароль токена>")
smtp.send_message(msg)
Главная ошибка с 465: включить на нём STARTTLS. Клиент ждёт приветствия открытым текстом, сервер ждёт рукопожатия TLS, и соединение висит до таймаута. Обратная ошибка — включить SSL на 587 — заканчивается быстрее: TLS-библиотека получает вместо рукопожатия текстовое приветствие и падает с ошибкой вида wrong version number.
Порт 2525: нестандартный запасной
У 2525 нет регистрации в IANA и нет RFC. Это соглашение: ряд сервисов рассылок принимает на 2525 ту же отправку, что и на 587, чтобы клиенты могли обойти блокировку стандартных портов. Документация Google Cloud приводит 2525 как пример порта для такого обхода.
Два ограничения стоит знать заранее. Порт 2525 работает только с теми сервисами, которые его открыли. А некоторые хостинги закрывают и его: в списке Timeweb Cloud он стоит рядом с 25, 465 и 587.
FMailer порт 2525 не использует. Вместо него у каждого стандартного порта есть свой дублирующий: 8587 для STARTTLS, 8465 для SSL/TLS и 8025 без шифрования.
Порты FMailer
| Порт | Шифрование | Зачем |
|---|---|---|
| 587 | STARTTLS | основной вариант |
| 465 | SSL/TLS | если библиотека предпочитает неявный TLS |
| 8587 | STARTTLS | если хостинг закрыл 587 |
| 8465 | SSL/TLS | если хостинг закрыл 465 |
| 25, 8025 | без шифрования | только для окружений, где TLS невозможен |
Хост smtp.fmailer.ru, логин и пароль берутся из токена домена, механизм аутентификации — AUTH PLAIN. Если клиент позволяет выбрать механизм, выберите PLAIN.
Дублирующие порты помогают там, где стандартные закрыты целиком. На Selectel исходящие 465 и 587 заблокированы вместе с 25, а 8587 и 8465 в этот список не входят. Порты без шифрования в продакшене не используйте: по ним пароль токена уходит открытым текстом. Полные параметры подключения — в документации по SMTP.
Если закрыто вообще всё, кроме HTTPS, остаётся REST API на https://api.fmailer.ru: исходящий 443 открыт практически везде, и те же логин и пароль токена работают в запросе.
Как проверить порт SMTP за минуту
Проверяйте с той машины, откуда пойдут письма, а не со своего ноутбука: домашний провайдер и облако фильтруют разное.
Открыт ли порт вообще:
nc -vz smtp.fmailer.ru 587
В Windows то же самое делает PowerShell:
Test-NetConnection smtp.fmailer.ru -Port 587
Отвечает ли сервер по SMTP (без шифрования):
telnet smtp.fmailer.ru 587
В ответ должна прийти строка, начинающаяся с 220. Дальше можно набрать EHLO test и посмотреть список расширений: на 587 среди них будет STARTTLS.
Работает ли TLS:
# 587 и 8587: STARTTLS
openssl s_client -starttls smtp -crlf -connect smtp.fmailer.ru:587
# 465 и 8465: TLS с первого байта
openssl s_client -crlf -connect smtp.fmailer.ru:465
Успешный вывод показывает цепочку сертификатов и параметры TLS-сессии. На 465 и 8465 после них сервер пришлёт приветствие 220.
Как читать результат
| Что видите | Что это значит |
|---|---|
строка 220 за секунду |
порт открыт, сервер отвечает |
| долгое ожидание, потом таймаут | пакеты молча отбрасывает фильтр по дороге: хостинг или файрвол |
Connection refused сразу |
до хоста дошли, но на этом порту никто не слушает или соединение сбрасывают |
| на 587 работает, на 25 таймаут | закрыт исходящий 25, это нормально для облака |
| таймаут на 25, 465 и 587 | хостинг закрыл стандартные порты SMTP: пробуйте 8587 и 8465, а если молчат и они — API |
Разбор отказа в соединении со стороны получателя — на странице Connection refused.
Если нужно посмотреть на чужой SMTP-сервер со стороны интернета, подойдёт проверка SMTP-сервера: инструмент открывает настоящее соединение, показывает приветствие, STARTTLS и сертификат и проверяет, не открытый ли это релей. Он подключается только к стандартным портам 25, 465, 587 и 2525, поэтому дублирующие порты FMailer проверяйте командами выше.
Частые ошибки
Порт 25 в настройках приложения. На локальной машине письма уходят, на сервере в облаке — таймаут. Причина почти всегда в блокировке исходящего 25. Замените порт на 587 или 465.
SSL на 587 или STARTTLS на 465. Порт и режим шифрования настраиваются парой. В PHPMailer это PHPMailer::ENCRYPTION_STARTTLS для 587 и PHPMailer::ENCRYPTION_SMTPS для 465. В Django нельзя включать одновременно EMAIL_USE_TLS и EMAIL_USE_SSL: для 587 нужен первый, для 465 второй.
Проверка с ноутбука вместо сервера. Команда openssl с рабочей машины отвечает за вашу сеть, а не за сеть хостинга. Проверка должна идти с того хоста, где работает приложение, иначе вы ищете проблему не там.
Пароль по незашифрованному соединению. Порт 25 или 8025 без TLS отдаёт логин и пароль любому, кто видит трафик. Если TLS на сервере приложения действительно невозможен, хотя бы заведите для этого окружения отдельный токен и периодически его меняйте.
Неподходящий механизм аутентификации. Некоторые клиенты по умолчанию пробуют механизм, который сервер не объявил, и получают отказ. FMailer принимает AUTH PLAIN; если ответ сервера похож на ошибку логина, разбор есть на странице 535 5.7.8 Authentication failed.
Ожидание, что 2525 есть везде. Порт 2525 открывают отдельные сервисы и закрывают отдельные хостинги. Прежде чем прописывать его в конфиге, проверьте, слушает ли его ваш провайдер.
Частые вопросы
Какой порт SMTP-сервера используется по умолчанию?
Для отправки из приложения или почтовой программы — 587 со STARTTLS. Порт 25 по умолчанию используют серверы для передачи почты друг другу, а 465 — для отправки с шифрованием с первого байта.
Чем 465 отличается от 587?
Только моментом, когда начинается шифрование. На 587 соединение открывается текстом и переходит на TLS командой STARTTLS. На 465 TLS начинается сразу. Оба варианта безопасны, если клиент требует шифрование и проверяет сертификат.
Можно ли отправлять письма из приложения через порт 25?
Технически да, если провайдер его не закрыл, но смысла в этом мало. Порт 25 часто блокируют, соединение по нему может идти без шифрования, а для отправки через сервис нужна аутентификация, которой место на 587 или 465.
Есть ли у FMailer порт 2525?
Нет. Если хостинг закрыл стандартные порты, используйте дублирующие: 8587 для STARTTLS и 8465 для SSL/TLS. Если закрыт весь исходящий SMTP, отправляйте через REST API по HTTPS.
Как понять, что хостинг блокирует исходящий SMTP?
Выполните nc -vz smtp.fmailer.ru 587 с сервера приложения. Таймаут без ответа почти всегда означает фильтр у хостинга. Сравните с портом 8587: если он отвечает, а 587 нет, блокировка точно на стороне провайдера.
Какие порты нужны для IMAP и POP3?
IMAP — 993 с TLS (или 143 со STARTTLS), POP3 — 995 с TLS (или 110). Эти порты нужны почтовой программе, чтобы читать ящик. Для отправки писем из приложения они не используются.
Итог
Для отправки ставьте 587 со STARTTLS или 465 с SSL/TLS. Порт 25 оставьте серверам, которые принимают почту: из облака он почти наверняка закрыт, и это не ошибка настройки. Порт 2525 — частное соглашение отдельных сервисов, а не стандарт. Если хостинг закрыл стандартные порты, у FMailer есть 8587 и 8465, а для самых строгих сетей — REST API по HTTPS.
Попробовать FMailer
Подключите домен на fmailer.ru: в настройках приложения поменяются только хост, порт, логин и пароль, а SPF, DKIM и DMARC для поддомена отправки FMailer опубликует сам после делегирования NS. Если исходящий 587 на вашем хостинге закрыт, переключитесь на 8587 — код при этом не меняется.