The following diagram shows the MAPI subsystem infrastructure. Either messaging client applications communicate with service providers through the MAPI subsystem, or the MAPI subsystem initiates contact and the services communicate directly. Through broad publication of messaging APIs and their robust messaging and workgroup functionality, MAPI has become a widely used standard throughout the industry for messaging and groupware clients and providers.
As the preceding diagram shows, MAPI-compliant clients span a variety of messaging- and workgroup-based applications; they support either 16-bit applications running on Microsoft Windows 3.x, or 16-bit or 32-bit MAPI applications running on Windows NT Server or Windows 95. Each of these types of applications has access to the service provider functionality required without having a specific interface for each provider. This is analogous to applications that use the Microsoft Windows printing subsystem without requiring drivers for every available printer.
Not shown in the preceding diagram, but frequently employed, are third-party programming interfaces that can be built upon MAPI. Because MAPI is an open and well-defined interface, a proprietary third-party API can be implemented on top of MAPI without having to revise the MAPI subsystem itself. You can also implement your own MAPI solutions to meet your particular needs without incurring the development costs that would otherwise accrue with other messaging infrastructures.
Messaging applications that require messaging services have access to them through any of five MAPI subsystem interfaces:
Client requests for messaging services are processed by the MAPI subsystem¾either as function interface calls (for sMAPI or CMC) or as manipulations of MAPI objects (for OLE Messaging or MAPI itself)¾and are passed on to the appropriate MAPI-compliant service provider. The MAPI service providers then perform the requested actions for the client and pass the action back through the MAPI subsystem to the MAPI client.
Each MAPI subsystem interface provides specific functionality as follows: