1. Блог
  2. Мануалы

Перенос почты между серверами с помощью imapsync

Перенос почты между серверами с помощью imapsync

При смене хостинга или почтового сервиса письма нужно перенести вместе с папками, отметками о прочтении и датами. Утилита imapsync копирует почту с одного IMAP-сервера на другой напрямую, ящик за ящиком. Её можно запускать повторно: уже перенесённые письма пропускаются, поэтому последний прогон перед переключением занимает минуты.

Что понадобится

  • адреса IMAP-серверов — старого и нового;
  • логины и пароли ящиков на обеих сторонах;
  • уже созданные ящики на новом сервере: imapsync переносит содержимое, но не создаёт учётные записи;
  • компьютер или VPS с Docker для запуска переноса.

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

Установка

Проще всего запускать imapsync в контейнере — не придётся устанавливать десятки модулей Perl:

docker pull gilleslamiral/imapsync

Проверка:

docker run --rm gilleslamiral/imapsync imapsync --version

Установить Docker поможет эта инструкция. Если Docker недоступен, порядок установки для своего дистрибутива есть на сайте проекта imapsync.

Шаг 1. Проверка подключения

Сначала убедитесь, что логины и пароли подходят. Ключ --justlogin только проверяет вход и ничего не копирует:

docker run --rm gilleslamiral/imapsync imapsync \
  --host1 imap.old-server.com --user1 user@example.com --password1 'старый_пароль' \
  --host2 mail.new-server.com --user2 user@example.com --password2 'новый_пароль' \
  --justlogin

Параметры с цифрой 1 относятся к серверу-источнику, с цифрой 2 — к серверу назначения. Пароли берите в одинарные кавычки, чтобы оболочка не обработала специальные символы.

Шаг 2. Пробный прогон

Ключ --dry показывает, что будет сделано, но ничего не меняет:

docker run --rm gilleslamiral/imapsync imapsync \
  --host1 imap.old-server.com --user1 user@example.com --password1 'старый_пароль' \
  --host2 mail.new-server.com --user2 user@example.com --password2 'новый_пароль' \
  --automap --dry

В выводе проверьте список папок: какие найдены на старом сервере и во что они превратятся на новом. Ключ --automap сопоставляет служебные папки, которые на разных серверах называются по-разному: «Отправленные» и Sent, «Корзина» и Trash.

Шаг 3. Перенос

Уберите --dry и запустите перенос:

docker run --rm gilleslamiral/imapsync imapsync \
  --host1 imap.old-server.com --user1 user@example.com --password1 'старый_пароль' \
  --host2 mail.new-server.com --user2 user@example.com --password2 'новый_пароль' \
  --automap

В конце imapsync выведет итог: сколько писем перенесено, сколько пропущено и были ли ошибки. Если в итоге есть ошибки, запустите команду ещё раз — докопируется только недостающее.

Полезные ключи

Ключ Действие
--dry пробный прогон без изменений
--justlogin только проверка входа
--justfolders создать структуру папок без писем
--automap сопоставить служебные папки автоматически
--exclude 'Spam|Junk|Trash' не переносить указанные папки
--folder INBOX перенести только одну папку
--maxage 365 только письма не старше указанного числа дней
--maxsize 26214400 пропускать письма больше заданного размера, в байтах
--f1f2 'Старая=Новая' переименовать папку при переносе
--port1 993 --ssl1 порт и шифрование для сервера-источника
--passfile1 файл читать пароль из файла вместо командной строки
--delete2 удалить на новом сервере письма, которых нет на старом

Особенности популярных сервисов

  • Gmail. Нужен пароль приложения. Добавьте ключ --gmail1 (или --gmail2, если Gmail — получатель): он включает подходящие настройки для ярлыков и ограничений сервиса. Учтите суточные лимиты Gmail на объём передачи — большой ящик может переноситься несколько дней.
  • Microsoft 365 и Outlook.com. Используйте ключи --office1 или --office2. Вход по обычному паролю может быть отключён администратором.
  • Самоподписанный сертификат. Если старый сервер использует недоверенный сертификат, imapsync по умолчанию его принимает, но лучше убедиться, что вы подключаетесь к правильному адресу.

Массовый перенос

Для нескольких ящиков подготовьте файл users.txt — по одной строке на ящик, поля разделены точкой с запятой:

user1@example.com;пароль_на_старом;user1@example.com;пароль_на_новом
user2@example.com;пароль_на_старом;user2@example.com;пароль_на_новом

Скрипт migrate.sh:

#!/bin/bash
mkdir -p logs
while IFS=';' read -r u1 p1 u2 p2; do
  [ -z "$u1" ] && continue
  echo "=== $u1 -> $u2"
  docker run --rm gilleslamiral/imapsync imapsync \
    --host1 imap.old-server.com --user1 "$u1" --password1 "$p1" \
    --host2 mail.new-server.com --user2 "$u2" --password2 "$p2" \
    --automap --nolog < /dev/null > "logs/$u1.log" 2>&1
  tail -n 3 "logs/$u1.log"
done < users.txt
chmod +x migrate.sh
./migrate.sh

Журнал каждого ящика сохраняется в каталоге logs. Файл с паролями закройте от посторонних (chmod 600 users.txt) и удалите после переноса.

Порядок переезда без потери писем

  1. Создайте ящики на новом сервере.
  2. Заранее уменьшите TTL MX-записи домена до 300 секунд — переключение пройдёт быстрее.
  3. Сделайте первый прогон imapsync. Он самый долгий; пользователи продолжают работать на старом сервере.
  4. Переключите MX-запись на новый сервер.
  5. Подождите, пока обновится DNS, — в это время часть писем ещё приходит на старый сервер.
  6. Сделайте финальный прогон. Он докопирует письма, пришедшие за время переключения.
  7. Перенастройте почтовые программы пользователей на новый сервер.
  8. Не отключайте старый сервер ещё несколько дней и повторите прогон перед отключением.

Если новый сервер — ваш собственный, после переноса проверьте записи SPF, DKIM и DMARC: порядок описан в статьях про HestiaCP и про Mailcow. В Mailcow перенос можно настроить прямо в панели: задания синхронизации используют тот же imapsync.

Частые проблемы

  • Authentication failed. Неверный пароль, отключён доступ по IMAP или требуется пароль приложения.
  • Письма дублируются при повторном запуске. Сервер изменяет заголовки писем. Добавьте --useheader 'Message-Id', чтобы письма сравнивались только по идентификатору.
  • Папки с кириллицей отображаются неправильно. Запустите сначала с --dry --justfolders и при необходимости задайте соответствие ключом --f1f2.
  • Перенос обрывается. Просто запустите команду повторно: imapsync продолжит с места остановки.
  • Не хватает места. Проверьте квоту ящика на новом сервере до переноса.

Видеоинструкция

YouTube video
#imapsync#почта#imap#миграция#почтовый сервер

Эта статья на других языках:EnglishУкраїнська