Перейти к основному контенту

Импорт писем из базы восстановления Microsoft Exchange (RDB)

Перед началом

  • {{ССЫЛКА:install.source-choose|Как выбрать способ сбора почты}}
  • {{ССЫЛКА:install.source-smtp|Приём потока через SMTP}}
  • {{ССЫЛКА:install.retention-create|Создание правила хранения}}

Если письма остались только в резервной копии базы Microsoft Exchange — например, сотрудник уволен и его ящик удалён, — их можно перенести в архив Клавдия из базы восстановления (Recovery Database, RDB). Для этого применяется утилита выгрузки из RDB (поставляется отдельно, обратитесь к поставщику).

Импорт проходит в два этапа:

  1. На сервере Exchange утилита читает письма из подключённой базы восстановления и сохраняет их в файлы EML.
  2. Файлы EML загружаются в Клавдий через приёмник SMTP.

Утилита только читает базу восстановления: письма, папки, права и сама база не изменяются. Восстанавливать ящик в промежуточный ящик, устанавливать Outlook или включать EWS не нужно.

Что потребуется

Что Требование
Сервер Exchange Exchange 2013, 2016 или 2019; утилита запускается на том сервере, где подключена база восстановления
База восстановления создана и подключена (смонтирована) администратором Exchange из резервной копии
Учётная запись администратор Exchange; консоль Exchange Management Shell, запущенная от имени администратора
Программы на сервере только штатные: .NET Framework 4.5 или новее, Windows PowerShell 3 или новее. Устанавливать ничего не нужно
Место на диске локальный диск сервера (желательно NTFS) с запасом больше объёма выгружаемых ящиков

Клавдий должен быть с включённой {{ССЫЛКА:install.smtp-service|службой SMTP}} и правилами для хранения входящих писем.

Создание и подключение базы восстановления выполняется штатными средствами Exchange и в этой статье не описывается. Ниже в примерах база называется Recovery_VIP — подставьте имя своей базы.

Шаг 1. Разместите утилиту на сервере Exchange

  1. Скопируйте архив утилиты на сервер Exchange и распакуйте его (правая кнопка мыши → [Извлечь всё]).
  2. Создайте папку C:\RdbReader и скопируйте в неё содержимое папки утилиты из архива.
  3. Убедитесь, что есть файлы C:\RdbReader\scripts\Export-Rdb.ps1 и C:\RdbReader\bin\RdbWorker.exe.
  4. Выберите папку для результата на локальном диске, например на C:\RdbExport. Сетевые папки для результата не используйте.

Шаг 2. Откройте консоль Exchange

  1. В меню [Пуск] найдите Exchange Management Shell.
  2. Нажмите по нему правой кнопкой мыши → [Запуск от имени администратора].

Все команды ниже вставляются в это окно целиком и выполняются клавишей Enter. Обычная командная строка cmd не подходит.

Если Windows запрещает запуск скрипта, выполните в этом же окне:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force

Разрешение действует только до закрытия окна. Если запрет задан групповой политикой и команда его не снимает, обратитесь к администратору Windows.

Шаг 3. Проверьте базу и получите список ящиков

Get-MailboxDatabase -Identity 'Recovery_VIP' -Status | Format-List Name,Recovery,Mounted,Server,Guid
& 'C:\RdbReader\scripts\Export-Rdb.ps1' -Database 'Recovery_VIP' -Mode List -OutputDirectory 'C:\RdbExport'

У базы значения Recovery и Mounted должны быть True. Утилита сама проверит, что запущена на нужном сервере и что версия Exchange поддерживается.

В списке ящиков найдите нужного сотрудника по столбцу DisplayName и запишите его MailboxGuid — идентификатор вида aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.

Шаг 4. Выполните пробное чтение

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

& 'C:\RdbReader\scripts\Export-Rdb.ps1' -Database 'Recovery_VIP' -Mode Probe -MailboxGuid 'GUID-ящика' -OutputDirectory 'C:\RdbExport'

Вместо GUID-ящика подставьте MailboxGuid из списка. Выбирайте ящик, в котором точно есть письма: пустой ящик не подтверждает, что чтение работает.

Проба успешна, если в итоге Saved больше нуля и нет ошибок. Письма сохраняются в папку C:\RdbExport\.probe. Откройте в ней пару файлов message.eml (найдите их поиском в Проводнике), включая письмо с вложением, и убедитесь, что текст и вложения на месте. Файлы EML можно открыть любым почтовым клиентом на другом компьютере — на сервер Exchange ничего устанавливать не нужно.

{{СКРИНШОТ}} Консоль Exchange: итог пробного чтения.

Если доступ запрещён

Если проба завершается ошибкой AccessDenied или NoAccess, не меняйте права на базу наугад. Повторите пробу с параметром -RunAsSystem:

& 'C:\RdbReader\scripts\Export-Rdb.ps1' -Database 'Recovery_VIP' -Mode Probe -MailboxGuid 'GUID-ящика' -OutputDirectory 'C:\RdbExport' -RunAsSystem

Утилита запустит чтение от имени локальной системы через временное задание Планировщика Windows и удалит задание после завершения. Если это помогло, добавляйте -RunAsSystem и во все команды выгрузки. Если выгрузку прервать принудительно, задание может остаться: его имя начинается с Klavd-Rdb-, удалите его в Планировщике заданий.

Шаг 5. Выгрузите письма

Один ящик:

& 'C:\RdbReader\scripts\Export-Rdb.ps1' -Database 'Recovery_VIP' -Mode Export -MailboxGuid 'GUID-ящика' -OutputDirectory 'C:\RdbExport'

Все ящики базы восстановления — та же команда без -MailboxGuid.

Чтобы сначала проверить выгрузку на небольшом объёме, добавьте -MaxMessages 100, а затем запустите ту же команду без этого ограничения.

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

Если выгрузка прервалась

Повторите ту же команду с той же папкой результата. Уже выгруженные письма будут пропущены (их число показывает счётчик Resumed). Не удаляйте файлы и служебные папки внутри папки результата — по ним утилита определяет, где остановилась.

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

& 'C:\RdbReader\scripts\Export-Rdb.ps1' -Database 'Recovery_VIP' -Mode Export -OutputDirectory 'C:\RdbExport' -RetryFailed

Если сервер или диск просто медленные, увеличьте время ожидания, добавив -IdleTimeoutSeconds 900 (по умолчанию — 300 секунд).

Итог выгрузки

Итог последнего запуска по каждому ящику — в файле C:\RdbExport\run-summary.json:

Итог Что означает
complete ящик выгружен полностью, ошибок нет
limited выгрузка остановлена ограничением -MaxMessages — это не полная выгрузка
partial часть писем не выгружена; список ошибок — в файле errors.jsonl в папке ящика
failed выгрузка ящика не удалась; см. «Если утилита не подходит к вашему серверу»

Выгруженные письма лежат в папке C:\RdbExport\<GUID базы>\<GUID ящика>\items\, каждое — в отдельной папке с файлом message.eml.

Шаг 6. Загрузите письма в Клавдий

  1. Скопируйте папку ящика (C:\RdbExport\<GUID базы>\<GUID ящика>) на компьютер, с которого доступен приёмник SMTP Клавдия, — например, на Linux-сервер рядом с Клавдием.

  2. Проверьте, что в Клавдии включена {{ССЫЛКА:install.smtp-service|служба SMTP}}, создан {{ССЫЛКА:install.source-smtp|источник SMTP}} и для него настроено {{ССЫЛКА:install.retention-create|правило хранения}}. Без правила письма принимаются, но в архив не помещаются.

  3. Отправьте письма в приёмник SMTP. Например, на Linux — штатной программой curl:

    cd /путь/к/папке-ящика
    find items -name message.eml -print0 | while IFS= read -r -d '' f; do
      curl -sS --url "smtp://<адрес-узла>:<порт>" \
           --mail-from "import@<ваш-домен>" --mail-rcpt "archive@<ваш-домен>" \
           --upload-file "$f" || echo "НЕ ОТПРАВЛЕНО: $f"
    done
    

    Вместо <адрес-узла> и <порт> укажите адрес и порт приёмника SMTP Клавдия. Адреса в --mail-from и --mail-rcpt — технические: Клавдий распределяет письма по ящикам по отправителю и получателям, указанным в самих письмах.

Архив отбрасывает повторно присланные письма по их идентификатору (Message-ID), поэтому при сбое загрузку обычно можно запустить заново. Исключение — письма без идентификатора (встречаются у старой внутренней почты Exchange): при повторной отправке они задвоятся. Чтобы этого избежать, при сбое отправляйте только те файлы, которые попали в строки «НЕ ОТПРАВЛЕНО».

Загрузить файлы EML можно и через HTTP-API — см. {{ССЫЛКА:install.source-files|Импорт PST / OST / EML / MSG}}.

Проверьте результат

  1. Сравните число отправленных писем с числом выгруженных (message.eml) и убедитесь, что строк «НЕ ОТПРАВЛЕНО» нет.
  2. Откройте ящик сотрудника в архиве и проверьте несколько писем: даты, отправителя, получателей, текст и вложения.
  3. Если письмо есть в архиве, но не находится поиском, проверьте {{ССЫЛКА:maintenance.search-health|очередь индексирования}} — индексирование большого объёма занимает время.

Что важно знать

  • Только почта. Выгружаются письма; контакты, календарь и задачи не переносятся.
  • Письма восстанавливаются из базы, а не копируются побайтно. Файл EML собирается из сохранённых в базе свойств письма: тема, адреса, даты, текст, вложения и вложенные письма сохраняются, но служебные заголовки исходного письма могут отличаться. Электронные подписи (S/MIME) и зашифрованные письма могут не сохранить исходную структуру.
  • Внутренняя почта Exchange. Если в базе у отправителя нет SMTP-адреса (старая внутренняя переписка), письмо попадает в технический ящик, а не в ящик сотрудника — так же, как при {{ССЫЛКА:install.source-files|импорте PST}}.
  • Папки исходного ящика. При загрузке через SMTP письма распределяются по ящикам и папкам архива по адресам отправителя и получателей, исходная структура папок ящика Exchange не воспроизводится.
  • Удалённые и скрытые элементы по умолчанию не выгружаются.

Если утилита не подходит к вашему серверу

Внутреннее устройство Exchange отличается между накопительными обновлениями (CU), поэтому на отдельных версиях утилита может сообщить, что сервер не распознан. В этом случае не копируйте файлы от другой версии Exchange и не устанавливайте Outlook. Соберите диагностику:

& 'C:\RdbReader\scripts\Export-Rdb.ps1' -Database 'Recovery_VIP' -Mode Inspect -OutputDirectory 'C:\RdbExport'

и передайте в поддержку файл C:\RdbExport\rdb-environment.txt, а также файлы result.json и worker-*.stderr.log проблемного ящика из папки C:\RdbExport\.state\. В них есть имена серверов и ящиков, идентификаторы и версии компонентов Exchange, но нет паролей; имена при пересылке можно скрыть.

Что дальше

  • {{ССЫЛКА:install.source-files|Импорт PST / OST / EML / MSG}}
  • {{ССЫЛКА:maintenance.tasks|Очередь задач}}

Навигация по книге

  • Следующая статья: {{ССЫЛКА:install.ldap-connect|Подключение LDAP / Active Directory}}