Open Connector is a MAPI Message Service.
A basically “MAPI Message Service” is a set of Outlook extensions that provide the capability to communicate with a network or device. For instance you may be familiar with the native “Microsoft Exchange/PST” Message Service which allows Outlook users to save to “.PST” files and interact with remote Microsoft Exchange servers. There’s a lot more information on Message Services on MSDN if you are interested.
A message service is divided into providers. The four most common providers are the “Message Store Provider” which is responsible for storing Outlook’s messages and folders locally, “Transport Provider” which is responsible for connecting Outlook to the network, “Address-book Provider” which is responsible for providing user information to Outlook, and “Free/Busy Provider” which is responsible for providing free/busy information to Outlook.
For instance, the native PST provider that allows you to store your email in a “PST” file is basically a message store provider. It stores messages
And when you sync Outlook with an exchange server, you’re using the Exchange Transport Provider. Or when you use an LDAP server to get an email recipient information, you are using the LDAP Address-book provider.
Open Connector is a full Message Service. It provides a message store provider, transport provider, address-book provider, and free/busy provider.
Our message store provider’s “O_IMsgStore” class implements the MAPI “IMsgStore” interface and stores messages and folders locally in a single-file database.
Our transport provider’s “O_IXPProvider” class implements the MAPI “IXPProvider” interface and communicates with CalDAV servers only for now.
Our address-book provider’s “O_IABProvider” class implements the MAPI “IABProvider” interface and retrieves information from LDAP address-books.
And finally, our free/busy provider’s “O_IFreeBusySupport” class implements the MAPI “IFreeBusySupport” interface and again retrieves Free/Busy information from CalDAV servers for now.
When Outlook is started, it finds all registered providers and starts any that are specified in the user’s “Outlook Profile“. Since multiple profiles can exist, the provider’s class may have multiple objects created in the same process space. In fact, MAPI gives precious few guarantees to message service writers on how they objects will be used at runtime. A provider object can be used across multiple threads, they can be created and destroyed in any order. Providers will often depend on each other for capabilities ( eg. the message store provider may require user credentials from the address-book provider ), but they can’t take for granted that that any other provider will be created at all, much less is in the same process space.
All this means that there’s a great deal of trouble to put together reliable communication and synchronization between MAPI service providers.