Перенос почты IMAP
Перенос почты при смене почтового сервера
При решении вопроса о смене почтового сервера часто на первый план выходит вопрос: а что сделать, чтобы почта из старого почтового сервера (например, Dovecot) перекочевала в новый (например, Kerio Connect). Или использовалась почта на стороннем хостинге, и было принято решение о переносе всей почты на другой сервер (в том числе, на другую платформу, MS -> Unix, например).
Если вся почта принималась по POP3 — вопросов особенно не будет, в этом случае проблема возникнет при тотальной смене почтовых клиентов. А мы рассмотрим случай, когда не очень большая организация работает с почтой по протоколу IMAP. В таком случае вопрос будет стоять следующим образом:
- Либо находим утилиту по переконвертированию писем со старой на новую платформу.
- либо делаем архив почты, а на новом сервере почта будет «с нуля».
- либо (наш выбор) в цикле (или просто по очереди) автоматизированно копировать письма IMAP со старого почтового сервера на новый с помощью программы Imapsync.
В любом случае, вопросов будет много, и процесс смены почтового сервера — задача не из разряда легких. Это очень заранее запланированное мероприятие, с предварительными проверками и пр. Сразу становится понятным, почему в начале статьи я уточнил, что организация небольшая. В крупных компаниях, возможно, такой подготовленный штат системных администраторов, что они придумают что-то более быстродействующее. Для нас надо чтобы было попроще и без серьезных переконвертаций.
Imapsync
Imapsync поддерживает сохранение статуса «прочтено, не прочтено, удалено», вложенные почтовые папки и др. Imapsync написан на Perl и может быть запущен практически на любом компьютере, не обязательно запускать его на сервере. Т.е. вы можете произвести перенос почты удаленно по отношению и к старому, и к новому почтовым серверам. Вам не надо иметь доступ к консоли. Все, что необходимо — это протокол IMAP.
Схема действия такая:
- на новом почтовом сервере создаем учетные записи пользователей с паролями (пароли могут отличаться от паролей на старом почтовом сервере).
- запускаем imapsync.
imapsync \
—host1 —user1 —password1 \
—host2 —user2 —password2
где:
— почтовый сервер, откуда копируем почту,
— логин почтового аккаунта,
— пароль почтового аккаунта,
— почтовый сервер, куда копируем почту,
— логин почтового аккаунта,
— пароль почтового аккаунта
Опций на самом деле гораздо больше, эти — минимум. Можно указывать, использовать SSL или нет, минимальный размер писем, которые будут скопированы и много что еще. Я использовал только минимум опций — для переноса 10 почтовых ящиков этого может быть достаточно.
Если пароль содержит символ доллара ($), то выполнение из командной строки может привести к ошибке логина. В этой ситуации надо просто экранировать символ $ прямо в пароле.
—password1 Gmw$psdtRR надо писать
Скорее всего, у вас не 10, а 30 и больше почтовых ящиков. В таких случаях ручной ввод команд — муторно и неудобно. Разработчик предлагает вариант:
Создаем файл с логинами/паролями 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 скрипт может выглядеть примерно так:
Imap sync tool windows
Собрал новую мыльницу — exim и dovecot. Всё пучком, но втал вопрос о переносе почты и юзеров со старого сервера на новый. С юзерами решилось просто — на стером была какая-то дикая связка cyrus-imap и exim. Дикость заключалась в том, что для зваедения юзера требовалось руками поправить БД MySQL, зайти в cyradmin (типа WEB-интерфейс) создать директорию, зайти с шелла — завести пользователся при помощи saslpasswd2 . Финиш. Конечно, может когда-то всё это и работало по человечески, но мне досталось именно в таком виде, и на понимание принципа работы ушло немало времени и нервов :))) Перенос облегчался наличием БД с нешифрованными паролями. Поэтому был сделан дамп куска базы, в котором были только нужные пользователи, и этот самый дамп размещён во временной таблице. После чего два таких запроса:
Перенесли всех пользователей. Для переноса самой почты, была заюзана программа из портов — imapsync, и скриптик на шелле, такого вида:
И долго-долго ждём :))) На перенос 3Gb почты ушло часов пять-шесть. Скриптик перловый, работает медленно 🙁 В-общем-то не страшно, всё равно делается это не днём.
P.S. Это даже не руководство к действиям, а просто пример, как можно сделать.
размещено: 2006-08-02,
последнее обновление: 2006-08-02,
автор: lissyara
а для pop3 можно еще пример для полноты =)
Шустрые какие :)))
Юзайте IMAP — ибо POP3 это прошлый век 🙂
========
Когда искал — видел упоминание о том что софт существует, но на этом не зацикливался — я давно pop3 не использую.
www.yandex.ru; www.google.ru — делов-то 🙂
>Юзайте IMAP — ибо POP3 это прошлый век 🙂
я то с тобой согласен. а вот как это обьяснить пачке юзверей
>Скриптик перловый, работает медленно
Почему скриптик perl’овый — когда он башовый?
Имеется в виду скрипт imapsync
Alejandro, 2016-06-12 в 21:34:02
Прошу прощенья за некропостинг, но:
«# временный файл
file_tmp=»/tmp/user.passwd»
.
# создаём файл с паролем:
echo $
.
# Удаляем файл паролей
rm -f $<tmp_file>»
Alessias, 2017-12-19 в 19:41:52
только надо добавить параметр —skip-column-names к mysql
чтоб не пытался перенести почту пользователя local_part пользователю username
Dmitry, 2018-09-05 в 9:03:23
—nofoldersizes —skipsize —fast и будет работать быстро.
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов. 2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540 2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма 2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh 2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ 2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией. 2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat 2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp. 2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл. 2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления… 2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий. 2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
|
Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
IMAPSync. Перенос почты между серверами
В этой статье я хочу поделиться опытом переноса почты между разными серверами с помощью замечательной утилиты IMAPSync.
— Получение IMAPSync.exe из исходников github (компиляция под Windows).
— Перенос почты по IMAP между серверами.
В моем случае встала задача перенести почту со своего сервера IDECO на сервера pdd.yandex.ru. Средствами Яндекса сделать это мне не удалось, инструмент по импорту для домена и инструмент по сбору почты в свойствах ящика выдавал всегда одну ошибку — неверный пароль. Техническая поддержка отвечала раз в сутки, а проблема не решалась. Были рекомендации сменить пароль, подождать, отключить двухфакторную авторизацию и т.п. В общем стандартные отписки, к сожалению. Использовать biz.mail.ru, который прекрасно все импортировал на тестовых ящиках, не хотелось. Так как имею больше опыта с Яндексом, и больше нравится работа почты от Яндекса, было принято решение найти другой способ переноса почты. Им и стал IMAPSync.
Начинаем, при условии, что на сервере назначения у нас созданы пустые (или не очень) ящики с нужными нам логинами и паролями.
Компиляция IMAPSync.exe из исходников под Windows
- Подготавливаем инструменты для компиляции:
Скачиваем последние исходники IMAPSync с github;
Скачиваем и устанавливаем 32-битную версию Strawberry Perl (я использовал strawberry-perl v5.20.3.3-32bit);
Распаковываем исходники и копируем файл из imapsync в Wimapsync;
Запускаем от администратора командную строку, заходим в папку W и запускаем установку необходимых модулей:
Выполняем этот файл дважды, убеждаемся, что все модули установлены, ошибок нет. Если какой-то модуль не устанавливается (у меня, например, Unicode::String не хотел ставится), ставим его через ppm:
и убеждаемся, что все модули установлены, ошибок нет.
На выходе получаем imapsync.exe — запускаем его в том же окне командной строки и проверяем, должен показать справку:
Если все так, никаких ошибок нет, значит приложение готово, можно использовать.
Перенос почты по IMAP между серверами
- Копируем наше приложение Wimapsync.exe в examplesimapsync.exe. В папке examples нас интересует несколько файлов:
- imapsync_example.bat — тестирование настроек переноса и сам перенос почты для одного ящика
- sync_loop_windows.bat и file.txt — перенос почты для массива ящиков
Подготовка, тестирование, перенос одного ящика:
Открываем файл imapsync_example.bat и прописываем наши реквизиты и параметры:
—host1 mx.example.ru —user1 user —password1 «Pass123»
Сервер назначения, логин ящика, пароль ящика:
—host2 imap.yandex.ru —user2 user@example.biz —password2 «Pass123»
Использование SSL для сервера источника и назначения:
—ssl1 —ssl2
Игнорировать все заголовки в письме, кроме тех, что содержат «Message-Id». Этот параметр полезен в тех случаях, когда для одного письма на разных серверах генерируются разные заголовки, в моем случае они отличались. Яндекс для каждого письма добавлял одну дополнительную строчку, из-за чего письма дублировались при каждом последующем переносе почты. Если фильтровать заголовки по «Message-Id», то при каждом переносе почты, копируются только новые письма.
—skipheader «^(?!Message-Id)»
Автоматически определить и привязать папки на сервере источника к папкам на сервере назначения. Сама сравнивает названия и создает привязки, поддерживает папки с кириллицей в названиях. Inbox-> Входящие. Sent -> Отправленные…
—automap
Удаляет из названия INBOX во всех папках назначения. В моем случае IDECO все папки называет начиная с INBOX (INBOX.Sent, INBOX.Drafts и т.п.). Чтобы не создавать двойные названия в сервере назначения для папок, которые были созданы пользователем вручную. Тут стоит заметить, что это еще зависит от сервера.
—regextrans2 «s/^INBOX.(.+)/$1/»
Выполнять операции только для папок. Письма не переносятся.
—justfolders
Эмуляция выполнения. Будет показан весь план работ, но физически ничего не переносится. Удобно для тестирования.
После прочтения описания запускаем и проверяем как произошла привязка наших папок. Если все успешно — здорово. Если нет, то можно воспользоваться параметрами ручной привязки. Например, параметры ниже создает привязку папок «INBOX.Junk» и «INBOX.Spam» к папке «Удаленные».
Тут мы сталкиваемся с кодировкой. Чтобы определить как должны называться папки с кириллицей нужно заглянуть в логи (LOG_imapsync*.txt), которые создаются после каждого выполнения программы.
Ну, а тут уже все ясно и понятно, и сама программа предлагает нам создать ручную привязку, если это необходимо.
После прогона, убедившись, что все выглядит хорошо, удаляем параметр:
Запускаем, и проверяем как создались папки на нашем сервере назначения. Пока мы проверяем только папки. Если требуется, вносим правки в привязки. Если все выглядит так как нам нужно, отлично, переходим к письмам. Удаляем параметр:
Запускаем и проверяем как создаются папки и перемещаются письма на наш сервер назначения. Также вносим необходимые правки при необходимости. Если нам нужно было перенести только один ящик — то на этом мы закончили. Если нужно перенести больше, то переходим к следующему пункту.
Перенос почты для нескольких ящиков.
Открываем файл file.txt. Этот файл содержит хорошее описание и реальный пример, для демонстрации работы. С заполнением трудностей возникнуть не должно. Закомментируем в нем все примеры, и напишем свои данные ниже. Перечисляем все наши ящики которые хотим перенести.
Открываем файл sync_loop_windows.bat на редактирование, и после строк:
Добавляем наши параметры, не забывая про символ «^» в конце строки после %arguments%, получаем в итоге:
Сохраняем и запускаем. Проверяем как прошла отработка и удаляем параметры —justfolders —dry для запуска реального переноса всех папок и писем.
Теперь остается только ждать завершения переноса почтовых ящиков и проверять логи. Для каждого ящика будет создан свой лог.
Дополнение
Несколько основных моментов которые я для себя выделил при изучении программы и отладке ошибок:
- В папке examplesFAQ.d есть отличный FAQ с примерами
- При экспериментах с заголовками поможет параметр «—debug». В этом режиме показывается содержимое всех заголовков каждого письма.
- В качестве сервера источника и назначения можно использовать один и тот же сервер, например, для удаления дубликатов.
Компиляция и работоспособность протестирована на Windows 10 64bit и Windows 7 64bit.