Chargement des fournisseurs de magasins de messages
S’applique à : Outlook 2013 | Outlook 2016
Lorsqu’une application cliente ouvre une banque de messages, MAPI charge la DLL du fournisseur de magasins de messages en mémoire. Une fois que MAPI a chargé la DLL, une séquence très spécifique d’appels de méthode se produit entre le fournisseur de la banque de messages et MAPI. Cette séquence d’appels de méthode permet à MAPI d’obtenir les interfaces IMSProvider de niveau supérieur : IUnknown, IMSLogon : IUnknown et IMsgStore : IMAPIProp , et permet au fournisseur de magasin de messages d’obtenir un objet de prise en charge MAPI. Après la séquence d’appels, le fournisseur de magasin de messages doit être prêt à accepter les ouvertures de session des clients.
La séquence d’appels lorsqu’une DLL de fournisseur de messages est chargée est la suivante :
Le client appelle IMAPISession ::OpenMsgStore.
Si la banque de messages n’est pas déjà ouverte, MAPI charge la DLL du fournisseur de magasin et appelle le point d’entrée MSProviderInit de la DLL. Si la banque de messages est déjà ouverte, MAPI ignore les étapes 2 et 3, puis utilise l’interface IMSProvider : IUnknown existante pour effectuer l’étape 4.
MSProviderInit crée et retourne un objet IMSProvider .
MAPI appelle IMSProvider ::Logon, en transmettant l’identificateur d’entrée de la banque de messages de l’application cliente.
IMSProvider ::Logon crée et retourne une interface IMSLogon : IUnknown et une interface IMsgStore : IMAPIProp , puis appelle la méthode IUnknown ::AddRef sur son interface IMAPISupport : IUnknown . Si l’identificateur d’entrée de la banque de messages du client fait référence à une banque de messages déjà ouverte, le fournisseur de magasin de messages peut retourner les interfaces IMSLogon et IMsgStore existantes et n’a pas besoin d’appeler AddRef sur son objet de support.
Si le client n’a pas défini l’indicateur MAPI_NO_MAIL lorsqu’il s’est connecté et qu’il n’a pas défini le MDB_NO_MAIL à l’étape 1, MAPI fournit l’identificateur d’entrée de la banque de messages au spouleur MAPI afin que le spouleur MAPI puisse se connecter à la banque de messages.
MAPI retourne l’interface IMsgStore au client.
Le spouleur MAPI appelle IMSProvider ::SpoolerLogon.
IMSProvider ::SpoolerLogon retourne les mêmes interfaces IMSLogon et IMsgStore de l’étape 5.
Remarque
Si l’appel de connexion au fournisseur de la banque de messages échoue parce qu’un mot de passe incorrect a été fourni et que le fournisseur de la banque de messages ne peut pas afficher une interface pour demander le mot de passe correct, il doit retourner MAPI_E_FAILONEPROVIDER à partir de la méthode IMSProvider ::Logon . Cela permet aux clients d’inviter l’utilisateur à entrer un mot de passe pour essayer de se connecter à nouveau au fournisseur de magasin de messages au lieu de provoquer l’échec de MAPI pour l’ensemble de la session.