Fix the Outlook Folder Type after Exporting an IMAP Account

After importing IMAP folders into Exchange mailboxes, users often discover their mail is not visible. This is because the exported folders retained the properties and views associated with the IMAP account. The default IMAP view is Hide messages marked for deletion and Exchange doesn’t support marking messages, so the view hides all messages. By changing the view to IMAP messages in View, Change View, the messages are visible. They are also visible if you view the folder in OWA.

Imported folders will use IMAP views and say „Filter Applied“ in the status bar, as seen in this screenshot, and of course, no messages are visible in the folder.
folder-with-imap-properties

To fix this, you can edit the folder property using MFCMAPI or change the property using a macro.

Below are two macros, the first macro changes the only selected folder’s PR_CONTAINER_CLASS property to IPF.Note if the folder type is IPF.Imap. The second macro checks the folder and subfolders.

Once the folder’s class is changed and you refresh the folder, the Views available are the normal folder views. (Select a different folder then the one you changed to refresh the folder.)

VBA 26 lines:

Option Explicit

Public Sub ChangeFolderContainer()
Dim oFolder As Outlook.folder
Dim oPA As Outlook.PropertyAccessor
Dim PropName, Value, FolderType As String

PropName = „http://schemas.microsoft.com/mapi/proptag/0x3613001E“
Value = „IPF.Note“

Set oFolder = Application.ActiveExplorer.CurrentFolder
Set oPA = oFolder.PropertyAccessor

FolderType = oPA.GetProperty(PropName)

‚MsgBox (FolderType)

If FolderType = „IPF.Imap“ Then
oPA.SetProperty PropName, Value
End If

Set oFolder = Nothing
Set oPA = Nothing
End Sub

Change Subfolders

This version of the macro above will walk the folder list and change all folders from IPF.Imap to IPF.Note. This uses the folder picker and you can choose the root folder (top of mailbox) to run it on all folders in your mailbox or a parent folder to run it only on that folder and it’s subfolders.

VBA 77 lines:

Option Explicit
Dim SubFolder As MAPIFolder

Sub ChangeFolderClassAllSubFolders()
Dim i As Long
Dim iNameSpace As NameSpace
Dim myOlApp As Outlook.Application
Dim ChosenFolder As Object
Dim Folders As New Collection
Dim EntryID As New Collection
Dim StoreID As New Collection

Set myOlApp = Outlook.Application
Set iNameSpace = myOlApp.GetNamespace(„MAPI“)
Set ChosenFolder = iNameSpace.PickFolder
If ChosenFolder Is Nothing Then
GoTo ExitSub:
End If

Call GetFolder(Folders, EntryID, StoreID, ChosenFolder)
ChangeFolderContainer

For i = 1 To Folders.Count
Set SubFolder = myOlApp.Session.GetFolderFromID(EntryID(i), StoreID(i))
On Error Resume Next
ChangeFolderContainer

On Error GoTo 0
Next i
ExitSub:
End Sub

Private Sub ChangeFolderContainer()
Dim oFolder As Outlook.folder
Dim oPA As Outlook.PropertyAccessor
Dim PropName, Value, folderType As String

PropName = „http://schemas.microsoft.com/mapi/proptag/0x3613001E“
Value = „IPF.Note“

On Error Resume Next
Set oFolder = SubFolder ‚Application.ActiveExplorer.CurrentFolder
Set oPA = oFolder.PropertyAccessor

folderType = oPA.GetProperty(PropName)
Debug.Print SubFolder.Name & “ “ & (folderType)

If folderType = „IPF.Imap“ Then

oPA.SetProperty PropName, Value
Debug.Print “ Changed: “ & SubFolder.Name & “ “ & Value

End If

Set oFolder = Nothing
Set oPA = Nothing
End Sub

Sub GetFolder(Folders As Collection, EntryID As Collection, StoreID As Collection, Fld As MAPIFolder)
Dim SubFolder As MAPIFolder

Folders.Add Fld.FolderPath
EntryID.Add Fld.EntryID
StoreID.Add Fld.StoreID
For Each SubFolder In Fld.Folders
GetFolder Folders, EntryID, StoreID, SubFolder
Next SubFolder

ExitSub:
Set SubFolder = Nothing

End Sub

How to use macros

First: You will need macro security set to low during testing.

To check your macro security in Outlook 2010 or 2013, go to File, Options, Trust Center and open Trust Center Settings, and change the Macro Settings. In Outlook 2007 and older, it’s at Tools, Macro Security.

After you test the macro and see that it works, you can either leave macro security set to low or sign the macro.

Open the VBA Editor by pressing Alt+F11 on your keyboard.

To put the code in a module:

  1. Right click on Project1 and choose Insert > Module
  2. Copy and paste the macro into the new module.
  3. Click play

admin has written 98 articles