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Русский