mapi — Definition for “Messaging Application Programming Interface”


MAPI (Messaging API) can have many different meanings. As abstracta:

  • The concept of the hierarchial organization into containers, tables, contents and properties. Typical containers are stores and folders, typical contents are messages, recipients, attachments.

  • More concrete variations, such as the set of “well-known” properties like, for example, subject, modification date, body, etc., and the semantics expected of them.

  • Optionally, the profile configuration structure present in some MAPI client implementations, comprised of profiles, providers, services, profile sections, sessions and their associated properties. A server generally does not know or need to know about these.

  • A specification of types and functions to make use of any of these concepts in a programming language.

As an implementation or part thereof:

  • (Seemingly the most common meaning of “MAPI”!) The MSMAPI interface for programming in C and/or C++ that comes with the Windows operating system/Office package, with types like “IMAPIFolder” and “IMessage”, functions like “MAPILogonEx” or “IMessage::GetProperties”, and identifiers like PR_SUBJECT.

  • The Office VBA interface for programming in VisualBasic, with types like “Outlook.MailItem”, object properties like “MailItem.Subject”.

  • The wire protocols used for communication with Exchange Server. This has received unfortunate terms like “MAPI/RPC” or “MAPI protocol”. Specifically, this includes the independently specified parts of: the Remote Operations (ROP/OXCROPS) protocol, the EMSMDB v1 protocol, the NSPI protocol, the MAPI Extensions For HTTP protocol (MAPI-over-HTTP, MAPIHTTP), and their particular format of serialized representations of MAPI objects that each peer may have. Note that MAPIHTTP is not in any way “more MAPI” than RPC-over-HTTP (aka RPCH) already was: both MAPIHTTP and RPCH wrap OXCROPS.

Gromox implementation

Gromox does not offer an MSMAPI-style programming API for the C or C++ language environments; the types and functions that are exposed in .h/.hpp files are intended for its own use only and are not considered public let alone constant over time.

Gromox offers interfacing at the network level, e.g. via exchange_emsmdb(4gx)/http(8gx) for the Exchange protocol formats, or via exmdb_provider(4gx) and zcore(8gx) using its own wire formats.

Gromox offers a somewhat MSMAPI-resembling interface for programming in PHP. This is a set of 119 freestanding functions that implement the concepts of stores, folders, messages, etc.