Перенести Dovecot 0.99 на Dovecot 2.x и сохранить UID POP

У меня есть старый сервер, на котором запущены Sendmail и Dovecot 0.99. На этом сервере около 50 учетных записей электронной почты, связанных с различными доменными именами, размещенными на нем. Данные электронной почты хранятся в формате MBOX на старом сервере.

Мне нужно перенести эти учетные записи электронной почты на целевой сервер, на котором работают Postfix и Dovecot 2.x. Целевой сервер использует формат Maildir.

Перенос самих писем легко выполняется с помощью imapsync. ОДНАКО значения POP UIDL не сохраняются. Это заставляет всех пользователей с POP-клиентами (MS Outlook и т. Д.) Повторно загружать все сообщения в почтовом ящике как дубликаты в свой почтовый ящик.

Как мне сохранить UID?

Я пробовал dovecot dsync, но документация оставляет желать лучшего, и я продолжаю получать сообщения об ошибках, которые не в этом нет смысла.

ПРИМЕЧАНИЕ: Мы не можем требовать от пользователей переключения с POP на IMAP или изменения каких-либо настроек в их клиентском программном обеспечении. Миграция должна быть прозрачной для пользователей.

Заранее благодарим вас за любой совет!

1
задан 6 April 2016 в 17:58
1 ответ

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

  1. Создайте почтовый ящик пользователя на новом сервере. Установите пароль на известное значение. Убедитесь, что имя пользователя совпадает со старым именем пользователя.

  2. Скопируйте текущий хешированный пароль пользователя на старый сервер. Сохраните эту строку где-нибудь.

  3. Задайте для пароля пользователя известное значение на старом сервере.

  4. Заставьте dovecot создать соответствующие файлы почтового ящика на новом сервере: telnet на новый сервер, порт 110 и войти в систему с имя пользователя и пароль, затем введите команду UIDL. Это должно содержать ноль сообщений.

  5. Telnet к порту 110 на СТАРОМ сервере, войдите в систему как пользователь и выгрузите список UID с помощью команды UIDL. Сохраните этот список в файл в Maildir учетной записи пользователя на НОВОМ сервере. Назовите его uidlist.old

  6. Запишите значение UIDVALIDITY на старом сервере, которое для Dovecot 0.9x будет первой частью UID при выполнении команды UIDL: Пример вывода строки из команды UIDL:

    1 1234567890.12345 1 = номер сообщения 1234567890 = UIDVALIDITY 12345 = UID сообщения

  7. Измените конфигурацию dovecot нового сервера, чтобы использовать тот же формат UID, что и старый сервер. Отредактируйте файл /etc/dovecot/conf.d/20-pop3.conf и установите для pop3_uidl_format желаемый формат (для dovecot 0.9x это должно быть% v.% U)

  8. Остановите Dovecot на новом сервере.

  9. Измените файл dovecot-uidlist пользователя, изменив значение Vxxxxxx на значение UIDVALIDITY старой учетной записи. Этот файл можно найти в домашнем каталоге пользователя / Maildir

  10. Удалите все файлы dovecot.index * в Maildir пользователя.

  11. Перезапустите Dovecot на новом сервере.

  12. Импортируйте электронную почту пользователя с помощью imapsync. Включите параметр --useuid.

  13. После импорта снова подключитесь к новому серверу через telnet, порт 110, и войдите в систему как пользователь. Выполните команду UIDL. Это заставляет Dovecot перестроить список сообщений.

  14. Остановите dovecot снова на новом сервере.

  15. Убедитесь, что файл dovecot-uidlist на новом сервере имеет следующий формат: 3 Vx Ny Gz 1 Пкс.у: z ...

Первая строка содержит Vx (uidvalidity), Ny (UID следующего сообщения) и Gz (глобальный идентификатор) Последующие строки содержат отдельные сообщения. 1 - номер сообщения Px - значение uidvalidity, а y - идентификатор сообщения. z - имя файла сообщения.

Если файл НЕ в этом формате, снова выполните telnet на новый порт 110 сервера и подтвердите права пользователя, затем снова выполните команды LIST и UIDL. Это должно заставить Dovecot перезаписать файл в этом формате.

Убедитесь, что количество сообщений совпадает с количеством сообщений из старой учетной записи. Иногда может быть одно лишнее дублированное сообщение. Вероятно, он вверху, и если да, вы должны увидеть, что имена файлов идентичны. Просто удалите эту строку из голубятни-uidlist, если это дубликат.

  1. Используйте следующий сценарий PHP (требуется PHP) для замены идентификатора сообщения каждого сообщения в файле dovecot-uidlist на правильные идентификаторы из uidlist.old. Сохраните сценарий как uidimport.php в каталоге Maildir пользователя.

    http://pastebin.com/x2vvVD9w (пытался разместить здесь сообщение, но это не удалось)

  2. Убедитесь, что в uidlist.old или uidlist.new теперь есть пустые строки или ложные значения. УБЕДИТЕСЬ, что внизу нет завершающей пустой строки!

  3. Запустите uidimport следующим образом:

    php uidimport.php uidlist.old dovecot-uidlist> dovecot-uidlist.new

Будет создан dovecot-uidlist.new файл с правильным UID, помещенным в каждую строку.

  1. Остановите Dovecot еще раз и замените существующий файл dovecot-uidlist на новую версию, созданную выше.

  2. Удалите все файлы .index * и .log.

  3. Отредактируйте файл. новый файл dovecot-uidlist и убедитесь, что значение Nxxxx в строке 1 установлено на СЛЕДУЮЩИЙ номер после UID ПОСЛЕДНЕГО сообщения в списке. Этот номер будет использован для следующего поступившего сообщения.

  4. Перезапустите Dovecot и telnet на новый порт 110 сервера. Выполните аутентификацию как пользователь, затем выполните команду UIDL и сохраните вывод в uidlist.new

  5. Выполните сравнение uidlist.old и uidlist.new. Если НЕТ различий, значит, вы успешно скопировали почту пользователя, сохранив UID каждого сообщения! Поздравляем!

Выполнение этих действий предотвратит повторную загрузку существующих сообщений пользователя Outlook и другими приложениями для обмена сообщениями POP. Я успешно выполнил эти шаги для учетных записей, содержащих до 7000 сообщений в почтовом ящике!

Если у вас возникнут вопросы, свяжитесь со мной.

1
ответ дан 3 December 2019 в 23:48

Теги

Похожие вопросы