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

Порты 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 — код при этом не меняется.

Подключить домен на fmailer.ru →