Get shared folders from IMAP
This article describes how to get shared folder list from your IMAP server using Mail.dll IMAP component for .NET.
Shared folder names usually start with ‘#’ character. This is not a rule, but it’s very common.
IMAP server when asked for all folder list should return also shared folders.
Here’s the unit test code that shows this:
List<folderInfo> allFolders = client.GetFolders(); CollectionAssert.Contains(allFolders.Select(x => x.Name), "#Public.PublicFolder1"); CollectionAssert.Contains(allFolders.Select(x => x.Name), "#Public");
If you want to list only shared folders you’ll need to use IMAP’s NAMESPACE command. Imap.GetNamespaces() method returns Namespaces class which contains information about personal, shared and other users namespaces:
// C# version
using (Imap client = new Imap())
{
client.Connect("server");
client.Login("user", "password");
Namespaces namespaces = client.GetNamespaces();
// List shared folders in all shared namespaces
foreach (NamespaceInfo space in namespaces.Shared)
{
List<folderInfo> sharedFolders = client.GetFolders(space.Name);
sharedFolders.ForEach(x => Console.WriteLine(x.Name));
}
client.Close();
}
' VB.NET version
Using client As New Imap()
client.Connect("server")
client.Login("user", "password")
Dim namespaces As Namespaces = client.GetNamespaces()
' List shared folders in all shared namespaces
For Each space As NamespaceInfo In namespaces.[Shared]
Dim sharedFolders As List(Of FolderInfo) = client.GetFolders(space.Name)
sharedFolders.ForEach(Function(x) Console.WriteLine(x.Name))
Next
client.Close()
End Using
The above code lists all public folders available for the currently logged-in user:
#Public.PublicFolder1
#Public.PublicFolder2
#Public
Please note that server will not let you select some folders. In the example above the user can not select ‘#Public’ folder. You can use FolderInfo.CanSelect property to check if the user is allowed to select the folder.