Перенос почты по IMAP

  • Михаил
  • 5 мин. на прочтение
  • 60
  • 10 Feb 2022
  • 10 Feb 2023

При решении вопроса о смене почтового сервера часто на первый план выходит вопрос: а что сделать, чтобы почта из старого почтового сервера (например, Zimbra) перекочевала в новый (например, Kerio Connect). Или использовалась почта на стороннем хостинге, и было принято решение о переносе всей почты на другой сервер. Переход на новую почтовую систему немыслим без переноса уже существующей почты, так как у многих пользователей там скопилось немало ценной информации, зачастую заботливо разложенной по достаточно сложной структуре директорий. Все это требуется не только сохранить, но перенести с наименьшими неудобствами. А если ящиков много, то безусловно хочется автоматизировать эту процедуру. Справиться с этой задачей нам поможет imapsync - простая, но в тоже время мощная утилита для миграции почтовых ящиков по протоколу IMAP.

Если вся почта принималась по POP3 - вопросов особенно не будет, в этом случае проблема возникнет при тотальной смене почтовых клиентов. А мы рассмотрим случай, когда не очень большая организация работает с почтой по протоколу IMAP. В таком случае вопрос будет стоять следующим образом:

  • или находим утилиту по переконвертированию писем со старой на новую платформу...
  • или делаем архив почты, а на новом сервере почта будет "с нуля"...
  • или в цикле (или просто по очереди) автоматизировано скопировать письма по IMAP со старого почтового сервера на новый с помощью программы Imapsync.

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

Imapsync

Итак, встречаем Imapsync (http://freshmeat.net/projects/imapsync).

Страница документации: http://ks.lamiral.info/imapsync/README

Imapsync поддерживает сохранение статуса "прочтено, не прочтено, удалено", вложенные почтовые папки и др. Imapsync написан на Perl и может быть запущен практически на любом компьютере, не обязательно запускать его на сервере. Т.е. вы можете произвести перенос почты удаленно по отношению и к старому, и к новому почтовым серверам. Вам не надо иметь доступ к консоли. Все, что необходимо - это протокол IMAP.

Схема действия такая:

  • на новом почтовом сервере создаем учетные записи пользователей с паролями (пароли могут отличаться от паролей на старом почтовом сервере).
  • запускаем imapsync.
imapsync \
           --host1  --user1  --password1  \
           --host2  --user2  --password2 

 


- почтовый сервер, откуда копируем почту, 
- логин почтового аккаунта, 
- пароль почтового аккаунта, 
- почтовый сервер, куда копируем почту, 
- логин почтового аккаунта, 
- пароль почтового аккаунта 

Опций на самом деле гораздо больше, эти - минимум. Можно указывать, использовать SSL или нет, минимальный размер писем, которые будут скопированы и много что еще. Я использовал только минимум опций - для переноса 10 почтовых ящиков этого может быть достаточно.

Если пароль содержит символ доллара ($), то выполнение из командной строки может привести к ошибке логина. В этой ситуации надо просто экранировать символ $ прямо в пароле.

Пример: вместо

--password1 Gmw$psdtRR надо писать

--password1 Gmw\$psdtRR

Скорее всего, у вас не 10, а больше почтовых ящиков. В таких случаях ручной ввод команд - муторно и неудобно. Разработчик предлагает вариант:

Создаем файл с логинами/паролями file.txt:

user001_1;password001_1;user001_2;password001_2 
user002_1;password002_1;user002_2;password002_2 
user003_1;password003_1;user003_2;password003_2 
user004_1;password004_1;user004_2;password004_2 
user005_1;password005_1;user005_2;password005_2 ...

В Unix скрипт может выглядеть примерно так:

{ while IFS=';' read  u1 p1 u2 p2; do 
       imapsync --host1 imap.side1.org --user1 "$u1" --password1 "$p1" \ 
                --host2 imap.side2.org --user2 "$u2" --password2 "$p2" 
done ; } < file.txt

Обратите внимание, что есть вероятность, что ваш почтовый сервер не поддерживается Imapsync. Это лучше всего проверить лично, не полагаясь только на официальный список совместимых почтовых серверов.

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

Я использовал эту программу для переноса 15 почтовых ящиков общим объемом 4 Гб. Метод себя оправдал, но занял приличное время. Я бы не стал использовать данную программу для переноса больших объемов почты, например, почтовых ящиков по 3+ Гб. Если у вас именно такие крупные почтовые ящики, и их много, вам нужно что-то другое, более быстрое, но, возможно, более платное!