Setting Transport Order
Published: July 16, 2012
The MAPI spooler assigns responsibility for outgoing messages based on the address types and identifiers that transport providers declare they can handle. Transport providers publish a list of supported address types and identifiers — stored in MAPIUID structures — when MAPI calls their IXPLogon::AddressTypes method, directly after logon. A recipient's address type is stored in its PR_ADDRTYPE (PidTagAddressType) property.
Registering for an address type indicates to MAPI that the transport provider can deliver to recipients with their PR_ADDRTYPE property set to the registered address type. Similarly, registering for a MAPIUID indicates that the transport provider can deliver to recipients that are represented by entry identifiers with the registered MAPIUID.
Most transport providers register for one or more address types; few register by MAPIUID. Transport providers that are tightly coupled with an address book provider and understand its entry identifier format can register to handle messages by MAPIUID, thereby improving performance. These tightly coupled transport providers can extract the recipient's e-mail address and other necessary information from the entry identifier without having to open it with an IMAPISupport::OpenEntry call.
MAPI maintains an order for transport providers, used when multiple transport providers have registered for the same address type or MAPIUID. You can override this order by calling IMsgServiceAdmin::MsgServiceTransportOrder and passing an ordered list of the MAPIUIDs of all of the active transport providers pointed to by the lpUIDList parameter.:
To retrieve a list of all of the address types that can be handled by one of the active transport providers, call IMAPISession::EnumAdrTypes. EnumAdrTypes returns an array of strings that describes address types supported by the transport providers that are active in the current session.