Regular creation of backup database copies may seem too time-consuming and utterly pointless, especially considering the fact that most of the time we do not know what version of Outlook we will be using few years from now and if it will support the backup file created today.
However, what we can do today is to make the backup method more automated. The following procedures automatically export our messages to a defined folder on the hard drive (regardless of the profile from which they originated or have been received on).
All the exported messages can be read by simply double-clicking the saved file or copying it to another Outlook (e.g. on a different workstation) without the need to move the database manually and attach the Personal Folder File (PST).
To insert the VBA code open Outlook’s developer module (Alt+F11) and place the following code in the “ThisOutlookSession” class:
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) Call ExportOutcomingMailToFile(Item) End Sub
Then, input this code in the newly created module:
Option Explicit Public Sub ExportOutcomingMailToFile(ByVal Item As Object) If Item.Class = 43 Then On Error Resume Next Dim strDestFolder$: strDestFolder = "c:\Post\Out\" 'Any path Call MakeWholePath(strDestFolder) On Error GoTo 0 Dim strSubject$: strSubject = RemoveInvalidChar(Left(Item.Subject, 100)) Dim strDate$: strDate = Format(Item.CreationTime, "YYYY-DD-MM_HH-MM") Dim strFileName$: strFileName = strDate & " " & strSubject & ".msg" Item.SaveAs strDestFolder & strFileName, olMSG End If End Sub Public Function RemoveInvalidChar(str As String) Dim f& For f = 1 To Len(str) str = Replace(str, Mid$("\/:?""<>|*", f, 1), vbNullString) Next str = Replace(str, vbTab, vbNullString) str = Replace(str, vbCrLf, vbNullString) RemoveInvalidChar = str End Function Public Function FileExists(FilePath As String) As Boolean On Error GoTo blad FileExists = Len(Dir(FilePath, vbDirectory Or vbHidden Or vbSystem)) > 0 Exit Function blad: FileExists = False End Function Public Sub MakeWholePath(FileWithPath As String) Dim x&, PathToMake$ 'by OShon For x = LBound(Split(FileWithPath, "\")) To UBound(Split(FileWithPath, "\")) - 1 PathToMake = PathToMake & "\" & Split(FileWithPath, "\")(x) If Right$(PathToMake, 1) <> ":" Then If FileExists(Mid(PathToMake, 2, Len(PathToMake))) = False Then _ MkDir Mid(PathToMake, 2, Len(PathToMake)) End If Next End Sub
You can create a rule in Outlook that will selectively limit the export in the built-in creator by placing the following code in the module (attaching the functions described above):
Sub ExportIncomingMailToFile(item As MailItem) On Error Resume Next Dim strDestFolder$: strDestFolder = "c:\Post\In\" ' your any path Call MakeWholePath(strDestFolder) On Error GoTo 0 Dim strSubject$: strSubject = RemoveInvalidChar(Left(item.Subject, 100)) Dim strDate$: strDate = Format(item.CreationTime, "YYYY-DD-MM_HH-MM") Dim strFileName$: strFileName = strDate & " " & strSubject & ".msg" item.SaveAs strDestFolder & strFileName, olMSG End Sub
Fig. 1. Rule exporting the messages to an .msg file.
All the parameters from the above procedures can be edited and modified at will, using the Mailitem object properties. For incoming mail we can use MS Outlook’s rule creator.
Richard Mueller edited Original. Comment: Removed (en-US) from title, modified title casing, added tags