RE:NODE

Приложения12 мин чтения

Перенос почты на собственный сервер без потери писем

Перенесите ящики из Gmail, Microsoft 365 или от хостинга на свой почтовый сервер: копирование через imapsync, безопасное переключение MX и сохранность всех старых писем.

0 прочтений

Перенести почту на новый сервер безопасно, если делать всё в правильном порядке: создать почтовые ящики на новом сервере, скопировать существующую почту через imapsync, пока старый провайдер ещё принимает письма, понизить TTL записи MX, переключить MX, запустить imapsync второй раз, чтобы подобрать всё, что пришло во время переключения, и только после этого переводить почтовые клиенты людей. Старые учётные записи после этого оставьте на несколько недель. В таком порядке не теряется ни одно письмо и никто не сидит день без почты. В любом другом порядке - классика жанра: сначала переключить DNS, а потом копировать - почта пропадает во время распространения изменений, и вернуть её невозможно.

В этой статье - весь переезд: что переносится, а что нет, команды imapsync, особенности Gmail и Microsoft 365, переключение DNS и сохранение старого архива.

Что переносится по IMAP, а что нет#

IMAP переносит письма и папки. Всё остальное, что почтовый провайдер хранит за вас, переезжает иначе или не переезжает вовсе.

ЧтоПереносится через imapsyncКак перенести иначе
Письма и вложенияДа-
Структура папокДа-
Отметки «прочитано», «помечено», «отвечено»Да-
Исходные даты полученияДа-
Ярлыки GmailКак папки, с дубликатамиСм. раздел про Gmail
КонтактыНетЭкспорт в vCard (.vcf)
КалендариНетЭкспорт в iCalendar (.ics)
Серверные фильтры и правилаНетПереписать как правила Sieve
Алиасы и адреса пересылкиНетСоздать заново в админке нового сервера
ПаролиНетЗадать новые и сообщить пользователям
Подписи, настройки клиентаЖивут в клиентеОбычно сохраняются, если клиент тот же

До начала запишите для своей организации список того, что не переносится по IMAP. Сама почта - простая часть; ломается обычно алиас, на который отправляют все счета и о существовании которого никто не помнил.

Прежде чем начать: инвентаризация и объёмы#

Для каждого почтового ящика соберите: адрес, все алиасы, которые на него доставляют, его размер и кто им пользуется на каких устройствах. С общими ящиками и списками рассылки - то же самое. Большинство провайдеров показывают размеры ящиков в консоли администратора; если нет, их выведет imapsync --justfoldersizes, запущенный против старого сервера.

Затем проверьте три вещи на новой стороне:

  • Хранилище. Сложите размеры ящиков и оставьте запас на рост и на собственные индексы сервера. Домен с 18 ГБ почты не поместится в тариф на 10 ГБ, и узнавать об этом посреди копирования неприятно.
  • Учётные записи. Создайте все ящики и алиасы на новом сервере до копирования. imapsync копирует в учётные записи, но не создаёт их.
  • Доступ к DNS. Вам нужно будет править записи MX, SPF, DKIM и DMARC домена. Выясните, где на самом деле размещён DNS домена - как это определить, объясняет статья NS-серверы и DNS-записи, - и понизьте TTL записи MX до 300 секунд как минимум за сутки до переключения, чтобы изменение распространилось за минуты, а не за часы.

Копирование ящиков через imapsync#

imapsync - стандартный инструмент для копирования с IMAP на IMAP. Он входит на оба сервера, обходит все папки и копирует письма, которых ещё нет в месте назначения, вместе с их отметками и датами. Повторный запуск копирует только новое, и именно на этом держится переключение в два прохода. Это Perl-скрипт, который публикует его автор Жиль Ламираль; проще всего запустить его без установки Perl-модулей через официальный Docker-образ gilleslamiral/imapsync.

Запускайте его с машины с хорошим соединением до обоих серверов - со своего компьютера или, для большого переезда, с небольшого VDS, - а не с самого почтового сервера.

Первый, безвредный запуск, который только сообщает, что было бы сделано:

bash
$ imapsync \    --host1 imap.oldprovider.example --user1 anna@example.com \    --passfile1 ./old-anna.txt --ssl1 \    --host2 mail.example.com --user2 anna@example.com \    --passfile2 ./new-anna.txt --ssl2 \    --automap --dry

Затем настоящий: та же команда без --dry. Важные параметры:

ПараметрЧто делает
--host1, --user1, --passfile1Исходный сервер и логин; пароль читается из файла
--host2, --user2, --passfile2Сервер назначения и логин
--ssl1, --ssl2Неявный TLS с каждой стороны
--port1, --port2Порты, если они отличаются от стандартного 993
--automapСопоставляет специальные папки (Sent, Drafts, Trash, Junk) по их роли, а не по имени
--dryПоказывает, что было бы сделано, ничего не меняя
--justfoldersСоздаёт только дерево папок
--exclude 'regex'Пропускает папки с совпадающими именами
--maxage NТолько письма моложе N дней, для быстрого первого прохода

--passfile1 и --passfile2 вместо --password1 и --password2 не дают паролям попасть в историю командной оболочки и в список процессов на общей машине. Потом удалите эти файлы.

Если пользователей больше нескольких, сложите логины в файл и пройдитесь по нему циклом:

migrate.sh
#!/bin/sh# users.csv: old login;old password file;new login;new password filewhile IFS=';' read -r u1 p1 u2 p2; do  imapsync --host1 imap.oldprovider.example --user1 "$u1" --passfile1 "$p1" --ssl1 \           --host2 mail.example.com --user2 "$u2" --passfile2 "$p2" --ssl2 \           --automapdone < users.csv

Большой ящик копируется часами. Узкое место почти всегда - ограничения частоты у исходного провайдера, а не пропускная способность, и imapsync аккуратно продолжает после прерывания - просто запустите его снова.

Gmail, Google Workspace и Microsoft 365#

У каждого крупного провайдера есть одна особенность, на которой спотыкаются.

В Gmail и Google Workspace нет папок, есть ярлыки, которые по IMAP показываются как папки. Письмо с тремя ярлыками появляется в трёх папках, и каждое письмо к тому же появляется в [Gmail]/All Mail. Если копировать наивно, ящик на 5 ГБ превращается в 15 ГБ дубликатов. У imapsync для этого есть пресет --gmail1, который задаёт правильный хост и исключает виртуальные папки вроде All Mail и Important; прочитайте его документацию, чтобы знать, что именно он исключает, и решите, нужно ли копировать в папку архива письма, которые существуют только в All Mail (заархивированные без ярлыка). Кроме того, Google ограничивает объём скачивания по IMAP на учётную запись в сутки - опубликованный лимит для Workspace около 2500 МБ, - так что большой аккаунт копируется несколько дней, и начинать копирование нужно задолго до переключения. Доступ по IMAP должен быть разрешён, а при включённой двухэтапной проверке для входа нужен пароль приложения, а не обычный.

Microsoft 365 / Exchange Online для большинства тенантов больше не принимает вход по IMAP с обычным паролем - базовую аутентификацию вывели из эксплуатации. imapsync поддерживает для этого токены доступа OAuth2 (--oauthaccesstoken1), и есть пресет --office1, но для получения токена нужно зарегистрировать приложение в тенанте. Если это больше, чем вы готовы на себя взять, запасной вариант - экспортировать каждый ящик из Outlook в файл .pst и импортировать его из клиента, подключённого к обеим учётным записям; это медленнее, но теряется при этом меньше, чем принято думать.

Другие хостинги и провайдеры в стиле cPanel обычно принимают обычный вход по IMAP на 993 и ничего особенного не требуют. Проверьте, не хранит ли старый хостинг почту в пространстве имён INBOX. (папки с именами INBOX.Sent, INBOX.Archive); в большинстве случаев imapsync переводит разделители и префиксы автоматически, а --dry покажет сопоставление папок до того, как что-либо будет скопировано.

Переключение DNS#

Когда каждый ящик прошёл полный первый проход, переключайте доставку почты. Порядок важен.

  1. Убедитесь, что новый сервер может принимать почту. Порт 25 до него доходит, домен и все адреса существуют, а тестовое письмо, отправленное прямо на новый сервер, приходит.
  2. Добавьте новый сервер в SPF рядом со старым провайдером, например v=spf1 include:_spf.oldprovider.example ip4:203.0.113.25 ~all. Какое-то время отправляют оба.
  3. Опубликуйте ключ DKIM нового сервера под его собственным селектором. Селектор старого провайдера остаётся на месте; они не конфликтуют. Про селекторы - в статье ключи DKIM и их ротация.
  4. Измените запись `MX` на новый сервер.
  5. Дождитесь истечения старого TTL с запасом. Некоторые отправители кэшируют дольше, чем положено.
старый MX из кэшановый MXОтправляющие серверыЗапись MXTTL 300Старый провайдеропоздавшие письмаimapsyncвторой проходНовый серверпорт 25
Куда попадает почта во время переключения

Запись DMARC не меняется, пока и старый, и новый отправитель во время перекрытия проходят SPF или DKIM с выравниванием. Как проверить, что видит мир, с помощью dig MX example.com +short и как запросить авторитетный сервер в обход кэшей, описано в статье MX-записи простыми словами.

Второй проход и период перекрытия#

День-два после переключения часть почты всё ещё приходит к старому провайдеру: от отправителей с закэшированным DNS и повторные попытки, поставленные в очередь до изменения. Запустите те же команды imapsync ещё раз. Они скопируют только письма, новые на старой стороне, и не тронут то, что уже есть на новом сервере, - включая почту, доставленную туда напрямую после переключения.

Затем повторите ещё раз через несколько дней и держите старые учётные записи открытыми от двух до четырёх недель. Это окно ловит последних опоздавших и даёт вам запасной вариант, если на новом сервере что-то окажется не так. Когда входящие у старого провайдера неделю остаются пустыми, уберите его из SPF, удалите его селектор DKIM, когда убедитесь, что через него больше ничего не отправляется, и закройте учётные записи.

Перевод почтовых клиентов

Клиенты - последний шаг, после второго прохода, чтобы люди открывали почтовый клиент и видели ящик, где уже всё есть.

  • Настольные клиенты (Thunderbird, классический Outlook): добавьте новую учётную запись рядом со старой, а не меняйте настройки сервера в старой. Клиент построит свежий локальный кэш с нового сервера, а старая учётная запись останется доступной для чтения, пока вы её не удалите. Если править поле сервера на месте, локальный кэш часто запутывается и показывает дубликаты или пустые папки.
  • Телефоны: удалите старую учётную запись и добавьте новую. Телефоны мало хранят локально, так что терять нечего.
  • Контакты и календари: импортируйте экспорты .vcf и .ics туда, где они теперь будут жить.
  • Подписи и правила: правила на стороне клиента придётся создать заново; серверные правила становятся правилами Sieve на новом сервере.

В статье настройка почтового клиента есть точные параметры для каждого клиента, и её стоит разослать пользователям как инструкцию.

Сохранение старого архива#

Годы переписки - часто и причина переезда, и самый большой ящик в нём. Варианты в порядке предпочтения:

  1. Скопировать всё. Если хранилище позволяет, всё живёт на новом сервере и поиск работает как раньше.
  2. Архивная учётная запись. Скопируйте старые годы в отдельный ящик, который могут открывать несколько человек, а повседневные ящики останутся небольшими и будут быстро синхронизироваться с телефонами.
  3. Офлайн-экспорт. imapsync может копировать на любой IMAP-сервер, но для холодного архива проще экспорт в mbox или Maildir, хранящийся на отдельном хранилище. Храните его дважды, в двух местах; архив в одном экземпляре - не архив.

Что бы вы ни сохранили, теперь новый сервер держит единственную живую копию почты организации, так что настройте backup в первый же день. Почему проверка восстановления важнее расписания backup, объясняет статья backup, которые действительно восстанавливаются.

Решение проблем при переезде#

`imapsync` не может войти к старому провайдеру. Возможно, IMAP отключён для учётной записи или тенанта, провайдер требует пароль приложения из-за включённой двухэтапной проверки или вообще отказался от входа по паролю. Войдите настольным клиентом с теми же учётными данными; если и это не удаётся, проблема в учётной записи, а не в инструменте.

Копия намного больше ящика. Дубликаты из-за ярлыков, почти всегда Gmail. Остановитесь, удалите скопированные папки на новом сервере и начните заново с --gmail1 или явными правилами --exclude для виртуальных папок.

Папки приходят со странными именами, например `INBOX.INBOX.Sent`. Несоответствие пространства имён или разделителя между двумя серверами. Запустите с --dry --justfolders и прочитайте выведенное сопоставление; у imapsync есть параметры для настройки префиксов и разделителей, а --automap позаботится о специальных папках.

Запуск останавливается на полпути с тайм-аутами или «too many connections». Источник ограничивает частоту ваших запросов. Обрабатывайте ящики по одному, а не несколько параллельно, и просто запустите команду снова; она продолжит с того места, где остановилась.

В новом ящике у писем сегодняшняя дата. Клиент сортирует по дате, когда получил письмо с сервера, а не по собственному заголовку письма Date:. imapsync по умолчанию сохраняет внутреннюю дату сервера; переключите в клиенте столбец сортировки на дату отправки или перестройте его кэш.

Почта на алиас после переключения возвращается с ошибкой. Алиас так и не создали на новом сервере. Сверьте список инвентаризации с адресами на новом сервере - и посмотрите уведомление о недоставке, в нём указан точный адрес.

Переезд на почтовый сервер RE:NODE#

Линейка Mail Server работает на Stalwart с SMTP, IMAP и JMAP и веб-админкой, где вы создаёте домен, почтовые ящики и ключ DKIM до первого копирования. Тарифы начинаются с 10 ГБ хранилища для почты и доходят до 80 ГБ, так что перед заказом сверьте итог инвентаризации с тарифом. Попросите поддержку перенаправить порт 25 до смены MX - один почтовый сервер на адрес, - ведь сервер, который не может принимать почту, не готов к четвёртому шагу. Используйте адрес сервера и порт IMAP, показанные в панели, как --host2 и --port2. Слоты для backup входят в каждый тариф Mail; сделайте backup после первого полного копирования и один раз восстановите его куда-нибудь, чтобы знать, что он работает.

FAQ#

Можно ли перенести почту без простоя?

Да. При методе двух проходов почта всегда куда-то доставляется - старому провайдеру до и во время распространения DNS, новому серверу после, - а второй проход imapsync собирает опоздавшие письма. Пользователи замечают только момент смены клиента, а его контролируете вы.

Сколько длится переезд через imapsync?

В основном столько, сколько позволяет исходный провайдер. Несколько гигабайт с обычного хостинга копируются за час-два. Из-за суточного лимита Gmail на скачивание по IMAP большой ящик Google может копироваться несколько дней, поэтому начинайте первый проход задолго до запланированной даты переключения.

Не сломает ли перенос почты мой сайт?

Нет, если менять только почтовые записи. Записи MX, SPF, DKIM и DMARC не зависят от записей A или CNAME, которые обслуживают сайт. Правьте почтовые записи на месте, а остальные не трогайте.

Что происходит с почтой, отправленной во время переключения DNS?

Она доставляется на тот сервер, на который указывает закэшированный DNS отправителя. Почта, попавшая к старому провайдеру, не теряется - её подбирает второй проход imapsync. Поэтому старые учётные записи должны оставаться открытыми ещё какое-то время после переключения.

Можно ли запускать imapsync на самом новом почтовом сервере?

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


Комментарии

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

0/2000