Imapsync перенос почты ubuntu

Обновлено: 05.07.2024

В качестве рабочего инструмента выступит пакет imapcopy, только как показала документация он не может работать с ящиками которые работают через SSL/TLS, т. е. Подключение происходит на порт 993 (Шифрование), в следствии этого нужно будет в системе поднять локальный прокси именуемый, как stunnel который будет переводить подключение с зашифрованного подключения на не зашифрованное.

Устанавливаю stunnel в систему:

$ sudo apt-get install stunnel openssl -y

$ sudo nano /etc/default/stunnel4

$ openssl req -new -out stunnel.pem -keyout stunnel.pem -nodes -x509 -days 3650

Common Name (e.g. server FQDN or YOUR name) [] :10.7.8.147

$ sudo nano /etc/stunnel/stunnel1.conf

[imap1] accept = 10.7.8.147:1430

[imap2] accept = 10.7.8.147:1431

$ sudo service stunnel4 start

Starting SSL tunnels: [Started: /etc/stunnel/stunnel1.conf] stunnel.

$ sudo netstat -tulpn | grep stunnel

tcp 0 0 10.7.8.147:1430 0.0.0.0:* LISTEN 1957/stunnel4

tcp 0 0 10.7.8.147:1431 0.0.0.0:* LISTEN 1957/stunnel4

Устанавливаю утилиту imapcopy в задачи которой будет копирование содержимого одного почтового ящика домена на другой почтовый ящик домена:

$ apt-cache search imapsync

$ sudo apt-get install imapcopy -y

$ sudo find / -name ImapCopy.cfg

$ sudo cp /usr/share/doc/imapcopy/examples/ImapCopy.cfg

Создаю конфигурационный файл на основе данных взаимодействия утилиты stunnel при работе с различными доменами почтовых серверов:

$ sudo nano ImapCopy.cfg

imapcopy: /usr/bin/imapcopy /usr/share/man/man1/imapcopy.1.gz

-l → записывать результаты работы в файле imapcopy.log

$ ./imapcopy ImapCopy.cfg -l imapcopy.log

Getting folderlist on sourceserver OK, found 8 folder

Processing Folder INBOX

137 Messages copied, 0 Errors (INBOX -> INBOX)

1 User processed, 137 Messages copied, 0 Error(s)

0 Folder(s) created, 0 Folder create errors, 0 Folder not copied

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

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

Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:

Поблагодари автора и новые статьи

будут появляться чаще :)

Карта МКБ: 4432-7300-2472-8059

Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.

Иногда у администраторов возникает необходимость перенести почтовый сервер: либо на другое железо, либо даже в какой-нибудь облачный сервис. Задача обычно выглядит простой: на новом месте заводятся аккаунты для всех пользователей, затем копируется почта и наконец правятся MX-записи.

Однако в реальности с переносом почты могут возникнуть трудности: например при переносе в облачный сервис нет прямого доступа к диску, и может не быть удобных средств миграции. В этом случае может выручить утилита imapsync, о которой и пойдёт речь далее.

Допустим что миграция осуществляется с частного почтового сервера в Google Suite и мы уже подошли к тому шагу, когда созданы новые учётные записи в Google Suite. Склонируем репозиторий с исходным кодом mailsync на какую-нибудь машину под управлением Ubuntu 18.04:

Переходим в директорию с исходным кодом:

Устанавливаем необходимые библиотеки (подробности в файле "INSTALL.d/INSTALL.Ubuntu.txt"):

После этого создадим файл "mails.csv", в котором каждая строка будет иметь вид:

Здесь "old_login" и "old_pass" - логин и пароль пользователя на старом сервере, а "new_login" и "new_pass" - логин и пароль пользователя на новом сервере.

Если вы мигрируете в Google Suite то вам надо будет зайти в настройки безопасности -> «Основные настройки" -> "Приложения, не обладающие надежной защитой" и на время миграции разрешить приложения, не обладающие надёжной защитой. Без этой настройки может не получится подключиться к IMAP.

Настройка безопасности приложений в GSuite

После этого остаётся написать небольшой скрипт, который последовательно выполнит imapsync для каждого из наших пользователей. Примерный листинг скрипта:

После выполнения скрипта в файл "mail_errors" будут записаны логины пользователей, для которых перенос почты не удался. Обычно это связано либо с большим объёмом почты (превышение квоты), либо с наличием спецсимволов в паролях. Поэтому лучше заранее проверить размеры ящиков и хотя бы на время миграции установить на ящики пароли, не содержащие символов, которые при подстановке в команды оболочки могут быть интерпретированы не правильно (например знак доллара или обратный слэш).

В последних ревизиях mailsync появилась поддержка аккаунтов GMail и MS Exchange. Однако в силу ряда причин у автора этих строк не было возможности протестировать этот функционал.

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

Инструмент Imapsync позволяет синхронизировать почтовые ящики, используя протокол IMAP. Это будет работать только в том случае, если вы также используете IMAP для получения своих электронных писем или если вы не удаляете свои электронные письма с сервера по протоколу POP.

Требования

    .
  • Экземпляр сервера Vultr Ubuntu 16.04 LTS.

Перед установкой любых пакетов на экземпляр сервера Ubuntu рекомендуется обновить систему.

Установка

Во-первых, вам нужно установить необходимые предварительные условия для запуска Imapsync.

Может потребоваться обновить клиенты IMAP и JSON cpanm .

Загрузите последний код Imapsync из официального репозитория Git.

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

Вы можете проверить версию Imapsync, используя следующую команду.

Синхронизация электронной почты

Пароли

Для того, чтобы не вводить простые пароли текста почтового ящика, вы можете хранить их в файлах и использовать --passfile1 и --passfile2 аргументы , чтобы автоматически загружать их из файлов , содержащих пароли.

Соединение с сервером IMAP

Существует несколько вариантов подключения Imapsync к вашему почтовому серверу, в том числе тип используемого подключения. По умолчанию Imapsync будет пытаться использовать SSL или TLS на порту 993 для подключения. Ниже приведены примеры для подключения на сервере для миграции (замены 1 с 2 для второго сервера).

  • --nossl1 для незашифрованного соединения через порт 143 ( не рекомендуется )
  • --ssl1 для зашифрованного соединения с SSL через порт 993
  • --tls1 соединиться с TLS через порт 993

Есть также варианты для определения типа аутентификации. Это указано с --authmech1 и --authmech2 аргументами, чьи возможными значениями являются следующим (в верхнем регистре).

Папки

  • --automap использовать автоматическое распознавание папок по умолчанию.
  • --nomixfolders чтобы избежать слияния папок с похожим именем в зависимости от регистра.
  • --prefix1 удалить префикс из папок для переноса.
  • --prefix2 добавить префикс в перенесенные папки.
  • --skipemptyfolders не создавать пустые папки на конечном сервере.

Варианты миграции

Чтобы ускорить миграцию электронной почты, вы можете использовать --usecache аргумент для временного хранения папок на сервере, на котором вы установили Imapsync.

Наконец, перед началом миграции не стесняйтесь использовать --dry аргумент для проверки результата команды, не выполняя ее.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также: