Введение: зачем знать почтовые протоколы
Почтовая система состоит из нескольких агентов. MUA (Mail User Agent) - это клиент, которым пользуется человек: Outlook, Thunderbird, мобильное приложение. MSA и MTA (Mail Submission Agent и Mail Transfer Agent) отвечают за отправку и передачу письма между серверами. MDA (Mail Delivery Agent) доставляет письмо в ящик получателя. SMTP, IMAP и POP3 - это протоколы, которые связывают эти компоненты в единую систему.
SMTP отвечает за отправку. IMAP и POP3 - за получение. Разница между ними определяет, где хранятся письма, как они синхронизируются и что происходит при сбое. Для администратора это знание критично: неправильный выбор протокола приводит к потере писем, дублированию данных и жалобам пользователей. Статья даёт практическую базу для настройки серверов, отладки доставки и выбора параметров для почтовых клиентов.
Если вы разворачиваете почтовую инфраструктуру с нуля, начните с гайда по контейнеризации почтового сервера. Там разобрана архитектура компонентов и их изоляция в Docker и Kubernetes.
SMTP: протокол отправки почты
SMTP (Simple Mail Transfer Protocol) - это протокол передачи почты от отправителя к получателю. Он работает по модели «клиент-сервер» и использует текстовые команды. Клиент подключается к серверу, передаёт адреса отправителя и получателя, затем тело письма. Сервер отвечает кодами состояния: 250 - команда принята, 550 - отказ, 421 - сервис недоступен.
Письмо может пройти через несколько SMTP-серверов. Отправитель передаёт письмо своему MSA, тот - MTA получателя, который доставляет его в ящик через MDA. Каждый переход - это отдельная SMTP-сессия.
Как работает SMTP: сессия отправки письма
Типичный диалог клиента и сервера выглядит так:
Клиент: EHLO mail.example.com
Сервер: 250-smtp.example.com Hello mail.example.com
Сервер: 250-STARTTLS
Сервер: 250-AUTH PLAIN LOGIN
Клиент: STARTTLS
Сервер: 220 Ready to start TLS
Клиент: EHLO mail.example.com
Сервер: 250-smtp.example.com Hello mail.example.com
Сервер: 250-AUTH PLAIN LOGIN
Клиент: AUTH LOGIN
Сервер: 334 VXNlcm5hbWU6
Клиент: (base64-encoded username)
Сервер: 334 UGFzc3dvcmQ6
Клиент: (base64-encoded password)
Сервер: 235 Authentication successful
Клиент: MAIL FROM:<sender@example.com>
Сервер: 250 OK
Клиент: RCPT TO:<recipient@example.org>
Сервер: 250 OK
Клиент: DATA
Сервер: 354 End data with <CR><LF>.<CR><LF>
Клиент: (заголовки и тело письма)
Клиент: .
Сервер: 250 OK: queued as 12345Команда EHLO начинает сессию и запрашивает список расширений сервера. MAIL FROM задаёт адрес отправителя, RCPT TO - получателя. DATA открывает передачу тела письма, которое заканчивается точкой на отдельной строке. После этого сервер помещает письмо в очередь доставки.
Для ручной проверки SMTP-сервера можно использовать telnet или openssl. Это базовый навык при диагностике проблем с отправкой. Подробнее о методах тестирования читайте в статье о диагностике очереди отправки.
Порты SMTP: 25, 465, 587 - что использовать
Три порта исторически связаны с SMTP:
- 25 - стандартный порт для связи между почтовыми серверами (MTA-to-MTA). Многие провайдеры блокируют его для исходящих подключений клиентов, чтобы бороться со спамом.
- 587 - порт для отправки писем от клиентов с аутентификацией (submission). Это современный стандарт для MUA.
- 465 - устаревший порт SMTPS с неявным SSL/TLS. Некоторые клиенты и серверы до сих пор его поддерживают.
Для новых конфигураций используйте порт 587 с STARTTLS. Порт 25 оставьте для межсерверной передачи. Порт 465 применяйте только если 587 недоступен по техническим причинам.
Безопасность SMTP: шифрование и аутентификация
SMTP-соединение защищается двумя способами. STARTTLS - это расширение, которое обновляет обычное соединение до зашифрованного после команды EHLO. Неявный SSL/TLS - это подключение, которое шифруется с первого байта, обычно на порту 465.
Аутентификация выполняется через команду AUTH с механизмами PLAIN или LOGIN. Оба передают credentials в base64, поэтому без TLS они уязвимы. Современные сервисы требуют пароль приложения вместо основного пароля аккаунта.
Открытый релей - это SMTP-сервер, который принимает почту от любых отправителей и пересылает её любым получателям. Такие серверы быстро попадают в чёрные списки. Всегда настраивайте аутентификацию и ограничивайте релей только доверенными сетями.
IMAP: протокол для синхронизации почты
IMAP (Internet Message Access Protocol) хранит письма на сервере. Клиент подключается, загружает заголовки и тела по запросу, а изменения синхронизируются обратно. Сервер остаётся источником истины. Это ключевое отличие от POP3.
IMAP поддерживает папки, флаги состояния (прочитано, отвечено, помечено), частичную загрузку сообщений и поиск на сервере. Для корпоративной среды с несколькими устройствами это стандарт де-факто.
Как IMAP синхронизирует почту между устройствами
Каждое сообщение в IMAP имеет уникальный идентификатор UID. Клиент кэширует письма локально, но состояние хранится на сервере. Когда вы читаете письмо на телефоне, клиент отправляет команду установки флага Seen. Другие устройства при следующей синхронизации видят это изменение.
Флаги IMAP:
- Seen - письмо прочитано
- Answered - на письмо отправлен ответ
- Flagged - письмо помечено как важное
- Deleted - письмо помечено на удаление
IMAP позволяет загружать только заголовки или отдельные части MIME. Это экономит трафик при работе с вложениями.
Порты IMAP: 143 и 993
Порт 143 - стандартный IMAP с возможностью STARTTLS. Порт 993 - IMAP с неявным SSL/TLS. Для новых конфигураций используйте 993 с SSL/TLS. Это исключает риск перехвата credentials при старте соединения.
POP3: протокол для загрузки почты на устройство
POP3 (Post Office Protocol version 3) загружает письма на клиент и по умолчанию удаляет их с сервера. Это простой протокол с минимальным набором команд: USER, PASS, STAT, LIST, RETR, DELE, QUIT.
POP3 подходит для сценариев, где почта нужна на одном устройстве и есть требование локального хранения. Он не поддерживает синхронизацию папок, флагов или частичную загрузку.
Как POP3 работает: загрузка и удаление писем
Жизненный цикл письма при использовании POP3:
- Клиент подключается к серверу и аутентифицируется.
- Команда LIST показывает список писем с номерами.
- Команда RETR загружает письмо на устройство.
- Команда DELE помечает письмо на удаление.
- При команде QUIT сервер удаляет помеченные письма.
Опция «оставлять копии на сервере» меняет поведение: после QUIT письма не удаляются. Но это создаёт риск повторной загрузки при сбое клиента. POP3 не отслеживает, какие письма уже загружены, поэтому каждый раз клиент видит всю папку входящих.
Порты POP3: 110 и 995
Порт 110 - стандартный POP3 с возможностью STARTTLS. Порт 995 - POP3 с неявным SSL/TLS. Используйте 995 для новых конфигураций.
IMAP vs POP3: сравнительный анализ
| Характеристика | IMAP | POP3 |
|---|---|---|
| Хранение писем | На сервере | На устройстве, сервер очищается |
| Синхронизация | Полная между устройствами | Отсутствует |
| Доступ с нескольких устройств | Да | Нет |
| Офлайн-доступ | Через кэш | Полный, письма локально |
| Папки и метки | Поддерживаются | Не поддерживаются |
| Нагрузка на сервер | Выше | Ниже |
| Риск потери писем | Низкий, письма на сервере | Высокий при сбое клиента |
Когда выбрать IMAP: сценарии использования
IMAP выбирайте в этих случаях:
- Пользователь работает с почтой на телефоне, ноутбуке и планшете.
- Нужен доступ к папкам и меткам с любого устройства.
- Корпоративная среда, где почта должна быть доступна после замены устройства.
- Требуется централизованное резервное копирование на сервере.
Когда выбрать POP3: сценарии использования
POP3 оправдан в таких ситуациях:
- Одно устройство для работы с почтой.
- Ограниченное дисковое пространство на сервере.
- Необходимость локального архива писем для compliance.
- Нестабильное интернет-соединение, когда важна работа офлайн.
Для большинства современных сценариев IMAP - правильный выбор. POP3 оставьте для специфических случаев, где локальное хранение важнее синхронизации.
Практическая настройка почтового клиента
Настройка почтового клиента сводится к указанию серверов входящей и исходящей почты, портов, типа шифрования и метода аутентификации. Современные сервисы требуют пароль приложения вместо основного пароля аккаунта.
Для Gmail параметры такие:
- IMAP-сервер: imap.gmail.com, порт 993, SSL/TLS
- POP3-сервер: pop.gmail.com, порт 995, SSL/TLS
- SMTP-сервер: smtp.gmail.com, порт 587, STARTTLS
Пароль приложения создаётся в настройках безопасности Google-аккаунта. Без него клиент не пройдёт аутентификацию.
Настройка IMAP в Outlook и Thunderbird
В Outlook: Файл → Добавить учётную запись → Ввести email → Дополнительные параметры → Выбрать IMAP → Указать серверы и порты. В Thunderbird: Создать учётную запись → Настроить вручную → IMAP → Заполнить поля серверов, портов и шифрования.
Обязательно включите SSL/TLS для порта 993. Без шифрования пароль передаётся в открытом виде.
Настройка POP3 в Outlook и Thunderbird
Процесс аналогичен IMAP, но выбирается POP3. Укажите pop.gmail.com и порт 995 с SSL/TLS. В настройках дополнительно задайте опцию «Оставлять копии на сервере», если письма должны сохраняться для доступа с других устройств.
Настройка SMTP для отправки
SMTP-сервер: smtp.gmail.com, порт 587, шифрование STARTTLS. Аутентификация обязательна - используйте тот же пароль приложения, что и для входящей почты. Если порт 587 заблокирован, попробуйте 465 с SSL/TLS.
Для собственного почтового сервера параметры зависят от конфигурации. Если вы разворачиваете инфраструктуру на Linux, обратитесь к руководству по системному администрированию Linux - там есть проверенные команды для настройки сервисов.
Типичные проблемы и их решение
Большинство проблем с почтовыми клиентами сводятся к трём категориям: ошибки аутентификации, блокировка портов, таймауты соединения. Разберём каждую.
Ошибка аутентификации: проверяем пароль приложения
Современные почтовые сервисы отключают базовую аутентификацию по основному паролю. Если клиент отклоняет пароль, создайте пароль приложения в настройках безопасности аккаунта. Для Gmail: Google Account → Security → App passwords. Для Яндекс 360: ID → Безопасность → Пароли приложений.
Проверьте, что в клиенте выбран правильный механизм аутентификации. Некоторые старые клиенты не поддерживают OAuth2 и требуют именно пароль приложения.
Порт заблокирован: обход ограничений
Провайдеры часто блокируют порт 25 для исходящих подключений. Используйте порт 587 для отправки. Если заблокирован и он, попробуйте 465. Проверьте настройки брандмауэра на сервере: возможно, порт закрыт локально.
Для диагностики используйте telnet или openssl s_client. Команда openssl s_client -connect smtp.example.com:587 -starttls smtp покажет, отвечает ли сервер и корректно ли настроен TLS.
Полный набор инструментов для проверки почтовой инфраструктуры описан в статье о диагностике доставки.
Заключение: итоговые рекомендации
SMTP - для отправки. IMAP - для синхронизации. POP3 - для локального хранения. В большинстве случаев выбирайте IMAP: он сохраняет письма на сервере и синхронизирует состояние между устройствами. POP3 используйте только когда нужно локальное хранение на одном устройстве.
Всегда включайте шифрование: SSL/TLS для IMAP и POP3, STARTTLS для SMTP. Всегда настраивайте аутентификацию. Проверяйте порты: 993 для IMAP, 995 для POP3, 587 для SMTP. При ошибках сверяйте параметры с документацией провайдера и тестируйте соединение вручную.
Если вы строите почтовую инфраструктуру с нуля, начните с гайда по развертыванию почтового сервера в Docker и Kubernetes. Для глубокого понимания Linux-основы обратитесь к практическому руководству по Linux.