Самый простой совет - это надо архивировать почту, но это не решение проблемы. С каждым может такое случиться, вот и я попытаюсь коротко объяснить, как можно "заставить" работать почтовую программу. Пример привожу из личной практики. Предполагаю, что у Вас на компьютере установлен Microsoft Office, включая Access, Outlook, и Outlook Express.
1. До этого почту пытались восстановить разными методами. Например, путем экспорта и импорта писем в Outlook и Outlook Express. Путем замены версий 5 версии Outlook Express на 6. Путем поиска специальных программ в интернете по этой тематике, но часть из них работает по принципу: сначала сделай архив, а только потом ее восстанавливай. Другие работают правильно, т.е. пытаются анализировать dbх файл. Но в этом случае Вы должны точно знать, что надо восстанавливать, да и программы стоят несколько сот долларов. Реально же в базе данных было около 300 файлов, объем почты - 250МБ, и сразу найти испорченные данные было невозможно.
2. Решение как всегда оказалось достаточно простое, но сначала немного о почтовых базах данных. Принцип хранения данных Outlook и Outlook Express сильно отличается. В первой программе почта сохраняется в одном файле *.pst, в другой - в файлах *.dbx. Например, Вы создаете папку test, одновременно открывается файл test.dbx. Переименовываете папку test в test1, также изменяется и имя файла в test1.dbx. За это и пришлось "зацепиться", написав маленькую программу. А теперь поговорим и о самом восстановлении.
3. Средствами поиска Windows (кнопка "Пуск" - "Найти" - "Файлы и Папки" ...) находите папки, где есть файлы базы данных Outlook (например, D:\Documents and Settings\Антон\Local Settings\Application Data\Microsoft\Outlook) и Outlook Express (например, D:\Documents and Settings\Антон\Local Settings\Application Data\Identities\{...}\Корпорация Майкрософт\Outlook Express). Пример, для Windows 2000.
4. Переименовываете папку Outlook Express, например, Outlook Express1, а у Outlook достаточно переименовать файл: outlook.pst, например, в outlook1.pst. Запускаете поочередно программы Outlook Express и Outlook. Минимальное количество файлов для работы программ, будет создано автоматически (или после небольших ваших ответов на вопросы программы Outlook).
5. Теперь Вам необходимо проанализировать информацию в папках Outlook Express и Outlook Express1. Попробуйте создать в Outlook Express папку test. Теперь скопируйте любой dbx файл из Outllook Express1 в файл test.dbx. Открыв почту, вы увидите, что папка test изменилась, в ней появились письма. Осталось только автоматизировать этот процесс.
6. Создавать напрямую, в Outlook Express через VBA, не получиться (или у меня нет такой информации). Но их достаточно легко создать в Outlook. Смотрите пример ниже, или скачайте программу: la_automat.mdb (5 пример)
7. На заключительном этапе Вам остается импортировать папки в Outllook Express из Outllook, далее через проводник WIndows cкопируйте из нерабочего архива Express dbx файлы. Что не надо копировать? Например, folders.dbx (от нее зависает Express), а также основные папки Удаленные, Отправленные. Их может и не быть в каталоге, т.к. возможно они были переименованы в результате сбоя компьютера, но почту вы прочтете в папке с другим именем.
8. Когда Вы откроете Express, папки будут с разными экзотическими именами, например, " (1)", " ". Но это не так важно. Корреспонденция сохраняется полностью. Остается в ручную сгруппировать письма и потом сжать базу. Если Вы не знаете, что за письма лежат в папке, то лучше их удалить. Иногда полезно вовремя избавиться от ненужной информации. Мусора всегда хватает.
VBA пример: Создание папок в Outlook |
'============================================================== ' Кнопка по которой запускается программа Private Sub butExecute_Click() Dim app As Outlook.Application 'Приложение программы Dim i As Integer 'Счетчик Dim myNamespace, myfolder As MAPIFolder, mynewfolder
On Error GoTo 999 Set app = New Outlook.Application Set myNamespace = app.GetNamespace("MAPI") Set myfolder = myNamespace.GetDefaultFolder(olFolderInbox) With Application.FileSearch .NewSearch .LookIn = Me.myFolderInternetExpress ' = c:\ .FileName = "*.dbx" ' Выбираем файлы для Outlook Express .SearchSubFolders = True If .Execute(SortBy:=msoSortByFileName, _ SortOrder:=msoSortOrderAscending) > 0 Then Dim strFile As String For i = 1 To .FoundFiles.Count strFile = fGetFileName(.FoundFiles(i)) Set mynewfolder = myfolder.Folders.Add(strFile) DoEvents Next i End If End With
app.Quit 'Закрываем Outlook MsgBox "Папки созданы!", vbExclamation, "Почта" Exit Sub 999: MsgBox Err.Description 'Ошибка Err.Clear Resume Next End Sub
' Получение имени файла для создания папки Public Function fGetFileName(strPath As String) As String Dim fs On Error GoTo 999 Set fs = CreateObject("Scripting.FileSystemObject") fGetFileName = fs.GetBaseName(strPath) Set fs = Nothing
Exit Function 999: MsgBox Err.Description, vbCritical, strPath Err.Clear End Function |