Клиент переезжает к нам с другого хостинга, у него двадцать почтовых ящиков, и вся переписка должна оказаться на новом сервере. Звучит просто, но на практике всплывают ошибки авторизации, разные структуры папок и главный вопрос клиента: «А точно всё перенеслось?». Стандартный инструмент для переноса — imapsync. Но для десятков ящиков нужна обвязка: массовый запуск, проверка размеров и понятная сводка. Так появился imapsync-manager.

Что делает

imapsync-manager — Bash-скрипт поверх imapsync, который:

  • проверяет размер и количество папок в ящиках до и после переноса;
  • переносит все ящики из файла одной командой;
  • показывает, с какими ящиками проблемы входа;
  • собирает сводку ошибок в отдельный лог.

Установка

Сначала нужен сам imapsync (установка — по инструкции автора на его сайте). Затем:

git clone https://github.com/solo10010/imapsync-manager
cd imapsync-manager
chmod +x sync.sh
./sync.sh --help

Файл со списком ящиков

Ящики перечисляются в файле, одна строка — одна пара «откуда → куда»:

старый_хост;логин;пароль;новый_хост;логин;пароль;
старый_хост;логин;пароль;новый_хост;логин;пароль;

Файл содержит пароли клиентов. Храните его с правами 600, работайте с ним только на сервере миграции и удаляйте сразу после переноса.

Порядок работы

1. Проверка до переноса. Сразу видно, к каким ящикам не подходят пароли, и сколько данных предстоит перенести:

./sync.sh --file listmail.txt --size
=============== start check mails (3) ===============
user1@old: success login MailSize:5.14 MB Folder:5 -> user1@new: success login ... SUCCES!
user2@old: failed login ...                      -> user2@new: failed login  <X> FAILED!
=================== SOURCE MAIL =====================
SOURCE      Total Mail Size: 5.14 MB
SOURCE      Total Folder Count: 10

Ящики с ошибкой входа выясняем с клиентом до начала переноса — это экономит время и нервы.

2. Перенос:

./sync.sh --file listmail.txt --migrate

3. Проверка после. Тот же --size показывает размер и количество папок на источнике и на назначении. Если цифры сходятся — можно с уверенностью отвечать клиенту «всё перенеслось» и прикладывать сводку.

Если на старом сервере IMAP работает без SSL на порту 143:

./sync.sh --file listmail.txt --port 143 --size

Практические советы по переносу почты

  • Сначала проверка, потом перенос. Неверные пароли — самая частая причина «потерянных» ящиков.
  • Переносите до смены MX, а после — запустите синхронизацию ещё раз. imapsync докопирует письма, пришедшие на старый сервер, пока обновлялся DNS.
  • Сравнивайте размеры и количество папок, а не только «скрипт не упал».
  • Предупредите клиента про правила, фильтры и адресные книги — они хранятся не в IMAP и не переносятся imapsync.
  • Удалите файл с паролями после завершения и попросите клиента сменить пароли, если они передавались по почте или в мессенджере.

Итоги

Перенос почты — рутинная, но чувствительная операция: клиент оценивает хостинг по тому, не потерялось ли ни одного письма. Обвязка поверх imapsync превратила миграцию десятков ящиков в три команды с понятной отчётностью — проверка, перенос, сверка. В компании я также разработал внутренний сервис переноса почты для коллег.