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