LEADERSOFT.ru Разработка на заказ программ и сайтов
ЕСЛИ БАЗА ВАМ НУЖНА В ЛИДЕРСОФТ ЗАЙДИ СПЕРВА!
Список всех статей ... Подписка на новости (рассылка через subscribe.ru)




































Выпуск 39. Восстановление почты Outlook Express

Подписка: "Access 2000 - программирование и готовые решения"
Дата:         27.12.2002
Сайт:         http://www.leadersoft.ru
  Введение
   В этом выпуске рассылки рассказывается о том, как используя Microsoft Access, можно восстановить почту Outlook Express. А также ...
   Поздравляю всех с наступающим Новым годом!  Желаю всем в наступающем году процветания, больших творческих успехов, благополучия, удачи во всех начинаниях. Здоровья, и счастья Вам и Вашим близким в Новом году!

Вопрос 2528:  Помогите восстановить почту?
Тема:      Я пользуюсь почтовой программой Outlook Express, в результате "сбоя" компьютера перестала открываться почтовая программа. Запускаю ее, и компьютер зависает на долгое время. Приходиться через Ctl+Alt+Del "убивать" процесс.
Ссылка: http://www.leadersoft.ru/cgi-bin/rusboard/data/2528.htm
Ответ. Самый простой совет - это надо архивировать почту, но это не решение проблемы. С каждым может такое случиться, вот и я попытаюсь коротко объяснить, как можно "заставить" работать почтовую программу. Пример привожу из личной практики. Предполагаю, что у Вас на компьютере установлен 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