Используйте IMAP. Он держит почту на сервере и синхронизирует её между всеми устройствами, его поддерживает любой почтовый клиент, а на порту 993 он зашифрован с первого байта. JMAP - современная замена: JSON поверх HTTPS, эффективная синхронизация, полноценный push, - и он великолепен там, где его поддерживает клиент, но большинство популярных клиентов пока его не умеют. POP3 скачивает почту на одно устройство, и включать его стоит только ради конкретного старого устройства, которое больше ничего не умеет. Для собственного сервера это означает: включите IMAPS на 993 и порт для отправки, добавьте JMAP поверх HTTPS, если у вас есть клиенты, которые им пользуются, а POP3 и порты без шифрования оставьте выключенными.
Ни один из этих протоколов не отправляет почту. Отправка - это всегда SMTP submission на 587 или 465, кроме JMAP, который встраивает отправку в тот же API. На этом различии люди спотыкаются при настройке клиентов, поэтому ниже оно встретится ещё раз.
Три протокола вкратце#
| POP3 | IMAP | JMAP | |
|---|---|---|---|
| Стандарт | RFC 1939 (1996) | RFC 9051 IMAP4rev2 (2021); RFC 3501 rev1 | RFC 8620 ядро, RFC 8621 почта (2019) |
| Транспорт | Текст поверх TCP | Текст поверх TCP | JSON поверх HTTPS |
| Порты | 110 STARTTLS, 995 TLS | 143 STARTTLS, 993 TLS | 443 |
| Где живёт почта | На устройстве | На сервере | На сервере |
| Папки | Только «Входящие» | Да | Да (mailboxes) |
| Несколько устройств | Плохо | Да | Да |
| Push | Нет | IDLE, одна папка на соединение | Push для всех изменений |
| Отправка | Нет - через SMTP | Нет - через SMTP | Встроена |
| Поддержка клиентами | Повсеместная | Повсеместная | Ограниченная |
POP3: скачать и (обычно) удалить#
POP3 - Post Office Protocol версии 3 - относится к серверу как к месту временного хранения. Клиент подключается, получает список ожидающих писем, скачивает их и по умолчанию удаляет с сервера. После этого почта живёт на одном устройстве.
+OK POP3 readyUSER anna@example.com+OKPASS ********+OK 3 messagesRETR 1+OK message follows...DELE 1+OKQUITТакая модель имела смысл, когда у людей был один компьютер, а у сервера - мало диска. Сегодня она проваливается по всем важным пунктам: прочитали письмо на телефоне - и на ноутбуке его уже нет; папок не существует, так что раскладка писем на одном устройстве ничего не значит на других; а когда устройство умирает, вместе с ним умирает и почта, если только кто-то не сделал резервную копию.
Клиенты предлагают «оставлять копию на сервере», и это немного помогает. Они отслеживают, какие письма уже забрали, с помощью UIDL (уникальных идентификаторов), так что два устройства могут скачать всё. Но статус прочтения, удаления и папки по-прежнему не синхронизируются, а ящики на сервере растут бесконечно, если какой-нибудь клиент не настроен удалять письма через определённое число дней.
Когда POP3 ещё имеет смысл: старое устройство или приложение, которое умеет только забирать почту, например система тикетов, импортирующая письма из ящика, или пользователь, который действительно хочет держать всю почту на одной машине и ничего на сервере. На этом, пожалуй, всё.
IMAP: истина хранится на сервере#
IMAP - Internet Message Access Protocol - держит всю почту и папки на сервере, а клиент показывает их представление. Прочитали письмо на телефоне - на ноутбуке оно помечено прочитанным. Положили в папку - оно лежит в ней везде. Потеряли телефон - ничего не потеряно.
Что заставляет IMAP работать на практике:
- Папки и флаги на сервере. Прочитано, отвечено, помечено, удалено, а также пользовательские ключевые слова - всё хранится для каждого письма.
- Частичная загрузка. Клиент может сначала скачать заголовки и структуру, а тело или отдельное вложение - только когда письмо открывают. Именно благодаря этому большими ящиками можно пользоваться на телефоне.
- Поиск на сервере.
SEARCHвыполняется на сервере, так что клиент может найти письмо в ящике на 10 GB, не скачивая его. - IDLE (RFC 2177). Клиент говорит серверу «сообщай мне об изменениях» и держит соединение открытым; новая почта появляется за секунды. Подвох в том, что IDLE следит за одной папкой на соединение, так что клиенту, который хочет мгновенных обновлений по пяти папкам, нужно пять соединений.
- Эффективная повторная синхронизация с расширениями CONDSTORE и QRESYNC (RFC 7162). Переподключившийся клиент может спросить «что изменилось с последовательности изменений N», а не перечислять заново все письма. Без них открытие большой папки после суток офлайн означает повторную проверку флагов каждого письма.
Слабость IMAP в том, что это многословный текстовый протокол с состоянием, спроектированный в 1980-х и с тех пор постоянно расширяемый. Каждый клиент должен держать долгоживущее соединение на каждую папку, за которой следит, разбирать сложную грамматику и справляться с длинным списком необязательных расширений, которые серверы поддерживают неравномерно. На телефоне открытые соединения сажают батарею, поэтому мобильные клиенты часто опрашивают сервер по расписанию вместо IDLE. Например, приложение Mail на iPhone предлагает push для некоторых типов аккаунтов, но IMAP-аккаунты проверяет по расписанию.
Используйте порт 993 (неявный TLS). Порт 143 со STARTTLS допустим, только если сервер отказывается принимать логин до согласования TLS; RFC 8314 рекомендует неявный TLS именно потому, что в нём нет фазы открытого текста, которую можно атаковать.
JMAP: почта как современный API#
JMAP - JSON Meta Application Protocol - был разработан в Fastmail и стандартизирован IETF в 2019 году, чтобы заменить проблемы IMAP современным дизайном. Это JSON-запросы поверх HTTPS:
{ "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail"], "methodCalls": [ ["Email/query", { "accountId": "a1", "filter": { "inMailbox": "inbox-id" }, "sort": [{ "property": "receivedAt", "isAscending": false }], "limit": 10 }, "q"], ["Email/get", { "accountId": "a1", "#ids": { "resultOf": "q", "name": "Email/query", "path": "/ids" }, "properties": ["subject", "from", "receivedAt", "preview"] }, "g"] ]}Два вызова в одном запросе: второй использует результат первого через обратную ссылку (#ids), так что клиент получает и список, и подробности за один круг. Такая пакетность - во многом причина того, что JMAP быстр на медленных мобильных соединениях.
Остальные принципы его устройства:
- Строки состояния для синхронизации. У каждого типа объектов есть состояние. Клиент спрашивает «что изменилось с состояния X» и получает ровно идентификаторы созданных, изменённых и удалённых объектов. Никаких повторных перечислений и соединений на каждую папку.
- Push для всего. Одно соединение - EventSource поверх HTTP или WebSocket (RFC 8887) - уведомляет клиента об изменениях во всех ящиках. Бережно к батарее и мгновенно.
- Встроенная отправка.
EmailSubmissionотправляет почту через тот же API с той же аутентификацией. JMAP-клиенту не нужны отдельные настройки SMTP. - Автообнаружение. Клиенты находят API по адресу
https://<host>/.well-known/jmap, который возвращает объект сессии с конечными точками и возможностями. - Обычная веб-инфраструктура. Это HTTPS, так что он проходит через файрволы, прокси и балансировщики, которые уже обслуживают веб-трафик, и им легко пользоваться из браузера или любого языка программирования.
Ограничение - клиенты. Большинство популярных почтовых приложений для компьютеров и телефонов - Outlook, Apple Mail, приложение Gmail - JMAP не понимают. Его используют собственные приложения Fastmail, некоторые новые и open-source-клиенты, веб-клиенты и библиотеки для создания собственных инструментов. На стороне сервера его реализуют Stalwart, Cyrus IMAP и Apache James. Если вы пишете программу, которая читает или раскладывает почту, программировать под JMAP куда приятнее, чем под IMAP; если вы настраиваете телефоны для офиса, они по-прежнему будут использовать IMAP.
Что это значит для ваших пользователей#
Всё это может одновременно работать с одним и тем же ящиком. Сервер вроде Stalwart хранит почту один раз и отдаёт её по каждому включённому протоколу, так что пользователь может читать почту на телефоне по IMAP, пока скрипт раскладывает письма через JMAP, и оба видят одни и те же папки.
Настройки клиента для типичного случая:
| Параметр | Значение |
|---|---|
| Сервер входящей почты | mail.example.com, IMAP |
| Порт и защита входящей почты | 993, SSL/TLS |
| Сервер исходящей почты | mail.example.com, SMTP |
| Порт и защита исходящей почты | 465 SSL/TLS или 587 STARTTLS |
| Имя пользователя | Логин учётной записи (часто полный адрес) |
| Аутентификация | Обычный пароль или пароль приложения |
В статье настройка почтового клиента для IMAP и SMTP разобраны Thunderbird, Outlook, iOS и Android, включая autoconfig, чтобы пользователям не приходилось ничего из этого вводить.
Что включать на собственном сервере#
Каждый открытый порт - это нечто, выставленное в интернет и для ботов, подбирающих пароли. Включайте то, чем пользуетесь.
- IMAPS на `993`: да. Он нужен каждому клиенту.
- Submission на `465` или `587`: да, один из них, для отправки. Оба - если у вас есть клиенты, которые настаивают на каком-то одном.
- JMAP на `443`: да, если вы используете JMAP-клиент или хотите строить инструменты поверх ящика; в Stalwart он делит HTTPS-слушатель с веб-админкой.
- IMAP на `143`: только если клиент не умеет неявный TLS, и только с обязательным STARTTLS до входа.
- POP3 на `995`: только для конкретного устройства, которому он нужен. Никогда
110без TLS. - ManageSieve на `4190`: только если пользователи редактируют правила фильтрации из клиента, который его использует.
На тарифе RE:NODE Mail Server нужно распределить пять портов, так что выбор вполне конкретный: IMAPS, порт для отправки и HTTPS покрывают почти всех, и остаётся место для одного-двух дополнительных. Порт 25 для приёма почты из интернета - отдельный вопрос, его поддержка настраивает по запросу. О слушателях на стороне сервера - в статье настройка почтового сервера Stalwart, а почему 25 - особый случай, объясняет статья порт 25 и блокировка исходящей почты.
Логины, пароли и безопасность во всех протоколах#
Все три протокола передают имя пользователя и пароль, и все три - мишени. Боты, подбирающие пароли, круглосуточно прочёсывают порты IMAP, POP3 и submission по всему интернету, и учётную запись, павшую жертвой одного из них, за считанные часы начинают использовать для рассылки спама. Выбор протокола значит меньше, чем то, как защищены логины.
- Шифруйте каждое соединение. Неявный TLS на
993,995и465или STARTTLS, обязательный до аутентификации, на остальных. Сервер, принимающий пароль открытым текстом на143или110, отдаёт его любому на пути. - Используйте пароли приложений для каждого устройства, если сервер их поддерживает. Телефон, ноутбук и планшет получают каждый свой пароль, так что потерянное устройство означает отзыв одного пароля, а не смену основного пароля пользователя везде.
- Выключайте то, чем не пользуетесь. Выключенный POP3-слушатель невозможно взломать перебором. Это самый сильный довод в пользу того, чтобы по умолчанию держать POP3 выключенным.
- Следите за неудачными попытками входа в логах сервера. Ровный поток попыток с множества адресов против одной учётной записи - это атака подбором; подумайте, достаточно ли силён пароль этой учётной записи, чтобы её игнорировать.
- OAuth - то, как крупные провайдеры сейчас предпочитают, чтобы клиенты входили в систему, и некоторые собственные серверы тоже поддерживают его для IMAP и SMTP через механизмы
XOAUTH2иOAUTHBEARER. Поддержка OAuth клиентами для собственных серверов неполная, так что обычные пароли поверх TLS остаются типичным вариантом.
У JMAP здесь есть небольшое преимущество: он работает поверх HTTPS с теми же вариантами аутентификации, что и любой веб-API, так что инструменты для токенов и ограничения частоты запросов, которые уже защищают веб-сервисы, применимы к нему напрямую.
Перевод пользователей с POP3 на IMAP#
Если вам достались пользователи на POP3 - обычное дело после многих лет на старом хостинге, - перевести их на IMAP стоит усилий, но делать это нужно аккуратно, потому что их почта может существовать только на их компьютерах.
- Выясните, где живёт почта каждого пользователя. Если клиент удалял письма с сервера после скачивания, единственная копия - локальная. Если оставлял, копия на сервере может быть полной, частичной или многолетней давности.
- Добавьте IMAP-аккаунт рядом с POP3 в том же клиенте, указав тот же ящик. POP3-аккаунт пока не удаляйте.
- Перетащите локальные папки в IMAP-аккаунт. Клиент загрузит их на сервер, и для большого ящика это может занять часы. Потом сверьте количество писем на стороне сервера.
- Настройте остальные устройства только на IMAP.
- Удалите POP3-аккаунт, когда загрузка подтверждена, и какое-то время храните локальную копию старого файла данных.
При переносе целого сервера между провайдерами быстрее и надёжнее копировать на стороне сервера по IMAP с помощью инструмента вроде imapsync - об этом статья перенос почты на собственный сервер.
Типичные проблемы каждого#
- POP3 «съел» почту. Клиент, настроенный удалять письма после скачивания, опустошил сервер; другие устройства ничего не видят. Включите «оставлять на сервере», а лучше переходите на IMAP.
- На одном устройстве не видно папок IMAP. Папки существуют, но в этом клиенте на них не оформлена подписка. Ищите опцию «подписаться» или «управление папками».
- Отправленные письма появляются дважды или не появляются вовсе. В IMAP клиент после отправки по SMTP загружает копию в папку «Отправленные». Если сервер тоже сохраняет отправленную почту, получаются дубли; если в настройках клиента папка отправленных указывает на локальную папку, сервер её никогда не видит. Укажите в клиенте в качестве папки отправленных серверную
Sent. - Новая почта медленно приходит на телефон. Клиент опрашивает сервер вместо использования IDLE, часто ради экономии батареи. Проверьте интервал проверки или используйте клиент с push.
- «Не удаётся подключиться» на 993, а 143 работает. Мешает файрвол или порт не открыт наружу. Проверьте проброс портов, прежде чем разбираться с сертификатом.
- Предупреждения о сертификате. Клиент подключается к имени, которого нет в сертификате сервера, например к голому IP. Используйте имя хоста.
FAQ#
POP3 приватнее, раз почта удаляется с сервера?
Только если клиент удаляет письма после скачивания и больше нигде копий нет - и тогда ваша почта существует на одном устройстве, у которого, скорее всего, нет резервной копии. Ради приватности шифруйте соединение и защищайте сервер, а не полагайтесь на удаление.
Можно ли использовать IMAP и POP3 с одним ящиком?
Да, если сервер это позволяет, но POP3-клиент, удаляющий письма после скачивания, уберёт их и из представления IMAP. Если без смешения не обойтись, настройте POP3-клиент оставлять почту на сервере.
JMAP заменяет SMTP?
Для клиентов - да: JMAP-клиенты отправляют почту через API. Между серверами - нет. Почта по-прежнему идёт с вашего сервера в другие организации по SMTP на порту 25.
Почему мой телефон не поддерживает JMAP?
Большинство почтовых приложений для телефонов построены вокруг IMAP и Exchange и JMAP не добавили. Используйте на телефонах IMAP; преимущества JMAP сильнее всего видны в веб-клиентах и в программах, которые вы пишете сами.
Какой порт использовать для IMAP?
993 с SSL/TLS. 143 используйте только с обязательным STARTTLS и только если клиент не умеет неявный TLS.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.