• О проекте
  • Контакты
  • Форум
Главное меню
  • На главную
  • Поиск
Разделы
  • SysAdmin
    • Linux
      • Apache
      • Dial-in сервера
      • DNS
      • Gentoo
      • Samba
      • SpamAssassin
      • FTP
      • IPTables
      • LDAP
      • Почтовые системы
      • Программирование под Linux
      • Разное
      • KDE
      • SSH
      • SQL
      • Crypto
    • Microsoft
      • ISA
      • Exchange Server
      • Active Directory
      • Outlook
      • Windows Server
      • Windows XP/Vista/7
    • Citrix
    • Cisco
    • Mikrotik
    • PBX и VoIP
    • Virtual
    • Asterisk
  • Разное интересное
  • tmp
Login Form



  • Забыли пароль?
  • Забыли логин?

PostHeaderIcon Миграция IMAP-ящиков с помощью imapsync

Взято: http://dmitriy-trt.blogspot.com/2010/11/dovecot-fetchmail-deliver-no-mda.html

 

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

Чтобы не светить пароли в списке процессов, создаем для каждого пользователя по 2 файла, содержащие пароли от внешнего и локального ящиков. Сначала подготовим папку для них:

# mkdir /home/vmail/.pass
# cd /home/vmail/.pass

Эти процедуры нужно повторить для каждого перемещаемого пользователя:

# touch joe.remote joe.local
# chown root joe.remote joe.local
# chmod 0600 joe.remote joe.local

И затем вписать в созданные файлы соответствующие пароли с помощью вашего любимого текстового редактора.

Далее начинается самое веселье. Нужно методом поиска в интернете, чтения невнятного мануала к imapsync и других магических манипуляций подобрать опции для каждого из IMAP-серверов.  Опишу опции, которые пришлось использовать мне. Большинство опций имеют на конце цифру 1 - сервер, с которого будут переноситься письма, или 2 - сервер, на который они будут переноситься. Итак, опции (те, что имеют вариант для каждого из серверов приведены с 1 на конце):

  • --host1 imap.external.com
    имя сервера

  • --port1 993
    порт для подключения

  • --user1 "joe"
    имя пользователя для аутентификации

  • --passfile1 /home/vmail/.pass/joe.remote
    путь к файлу с паролем

  • --ssl1
    использовать ли шифроввание при подключении к серверу

  • --noauthmd5
    общая опция (одна и работает сразу для обоих серверов), отключает использование аутентификации по MD5; нужна, если программа при запуске выдаст ошибку о невозможности использования такого метода аутентификации

  • --sep1 "."
    --prefix1 ""
    префикс и разделитель в именах папок, они нужны если imapsync не может определить их автоматически и явно просит указать одну из них, или возникают проблемы с недопустимыми именами при создании папок в процессе синхронизации; как их определять - расскажу ниже

  • --delete
    --expunge1
    после первой удачной синхронизации нужно добавить эти опции и запустить imapsync еще раз для удаления писем с внешнего сервера; имейте ввиду, что --expunge2 указывать не нужно

Итак, в самом простом случае для каждого аккаунта нужно запустить imapsync 2 раза. Второй раз - только убедившись, что всё перенеслось как следует, для очистки ящика на внешнем сервере. Переносим почту:

# imapsync --ssl1 --ssl2 --noauthmd5 --host1 imap.external.com --port1 993 --host2 imap.localserv.net --port2 993 --user1 "joe" --passfile1 /home/vmail/.pass/joe.remote --user2 joe --passfile2 /home/vmail/.pass/joe.local

Второй раз запускаем уже с опциями удаления:

# imapsync --ssl1 --ssl2 --noauthmd5 --host1 imap.external.com --port1 993 --host2 imap.localserv.net --port2 993 --user1 "joe" --passfile1 /home/vmail/.pass/joe.remote --user2 joe --passfile2 /home/vmail/.pass/joe.local --delete --expunge1

Теперь самое веселое, если imapsync не может определить префиксы и разделители пути на серверах, нужно соединиться с сервером (мы будем использоовать защищенное соединение), вручную залогиниться и запросить перечисление папок. Тогда мы увидим как он представляет папки и сможем это объяснить imapsync.

Соединяемся с сервером:

$ openssl s_client -connect imap.external.com:993

если видим в конце ответа

* OK IMAP4 ready

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

1 login joe joe-password

видим

1 OK LOGIN Ok.

далее набираем по очереди 2 команды и анализируем их результат:

2 list "*" ""
3 list "" "*"

результат будет иметь вид, похожий на следующее:

* LIST (\HasNoChildren) "." "INBOX.Archive"
* LIST (\HasNoChildren) "." "INBOX.Sent"
* LIST (\HasNoChildren) "." "INBOX.Draft"

Это означает, что префикса у пути нет, а разделитель папок - точка. В результате параметры будут

--prefix1 "" --sep1 "."

То же самое нужно повторить и для локального сервера.

 

Copyright © 2010 MiaNet.RU.
All Rights Reserved.

Designed by tim.