MAPI defines a modular architecture, as shown in the following illustration.
There are basically three types of client applications: messaging-aware, messaging-enabled, and messaging-based. These applications are known as client applications because they are clients of the MAPI subsystem. Messaging-aware and messaging-enabled applications are typically applications not primarily focused on messaging; these are word processing or spreadsheet applications — for example — that incorporate messaging as an added feature. Messaging-based applications employ messaging as a central part of their processing and offer extensive messaging features, such as the exchange of information of various types in various formats and the ability to save and organize the information locally. Electronic mail, scheduling, and work flow applications are examples of messaging-based applications.
The MAPI subsystem is made up of the MAPI spooler, a common user interface, and the programming interfaces. The MAPI spooler is a separate process responsible for sending messages to and receiving messages from a messaging system. The common user interface is a set of dialog boxes that gives client applications a consistent look and users a consistent way to work.
MAPI has programming interfaces that are used by the MAPI subsystem, by client application writers, and by service provider writers. The main programming interface is an object-based interface known as the MAPI programming interface. Based on the OLE Component Object Model, the MAPI programming interface is used by the MAPI subsystem and by messaging-based client applications and service providers written in C or C++.
Client application writers have a choice of three other interfaces:
The Simple MAPI, CMC, and Active Messaging Library client interfaces are primarily for messaging-aware and messaging-enabled client applications. These interfaces are less complex; applications that require fewer messaging features can use Simple MAPI, CMC, or the Active Messaging Library to implement these features quickly and easily.
Client application writers have the option of making MAPI calls either directly through the MAPI programming interface or indirectly through one of these three client-only interfaces. Messaging can be implemented with a single MAPI client interface or a combination of interfaces. A single application can make calls to methods or functions belonging to any of the interfaces.
The service provider programming interface is the part of the object-based MAPI programming interface that applies specifically to service providers. Service providers, positioned between the MAPI subsystem and the underlying messaging systems, translate requests from MAPI-compliant client applications into tasks a specific messaging system can understand. When tasks are complete, the service providers translate again, converting status and information that is messaging system-specific into a MAPI format. As with client applications, there are different types of service providers. Each type handles a different messaging system service. The address book provider, for example, works with directory information while the transport provider handles message transmission and reception.