Carregando provedores de repositório de mensagens
Aplica-se a: Outlook 2013 | Outlook 2016
Quando um aplicativo cliente abre um repositório de mensagens, o MAPI carrega a DLL do provedor de armazenamento de mensagens na memória. Depois que o MAPI carrega a DLL, ocorre uma sequência muito específica de chamadas de método entre o provedor do repositório de mensagens e o MAPI. Essa sequência de chamadas de método permite que a MAPI obtenha interfaces IMSProvider de nível superior: IUnknown, IMSLogon : IUnknown e IMsgStore : IMAPIProp e permite que o provedor do repositório de mensagens obtenha um objeto de suporte MAPI. Após a sequência de chamadas, o provedor do repositório de mensagens deve estar pronto para aceitar logons de clientes.
A sequência de chamadas quando uma DLL do provedor de mensagens é carregada é a seguinte:
O cliente chama IMAPISession::OpenMsgStore.
Se o repositório de mensagens ainda não estiver aberto, o MAPI carregará a DLL do provedor de loja e chamará o ponto de entrada MSProviderInit da DLL. Se o repositório de mensagens já estiver aberto, o MAPI ignorará as etapas 2 e 3 e, em seguida, usará a interface IMSProvider : IUnknown existente para concluir a etapa 4.
MSProviderInit cria e retorna um objeto IMSProvider .
MAPI chama IMSProvider::Logon, passando o identificador de entrada do repositório de mensagens do aplicativo cliente.
IMSProvider::Logon cria e retorna uma interface IMSLogon : IUnknown e uma interface IMsgStore : IMAPIProp e, em seguida, chama o método IUnknown::AddRef em sua interface IMAPISupport : IUnknown . Se o identificador de entrada do repositório de mensagens do cliente se referir a um repositório de mensagens que já está aberto, o provedor do repositório de mensagens poderá retornar interfaces IMSLogon e IMsgStore existentes e não precisar chamar AddRef em seu objeto de suporte.
Se o cliente não definiu o sinalizador de MAPI_NO_MAIL quando ele se conectou e não definiu o MDB_NO_MAIL na etapa 1, a MAPI fornecerá o identificador de entrada do repositório de mensagens ao spooler MAPI para que o spooler MAPI possa fazer logon no repositório de mensagens.
MAPI retorna a interface IMsgStore para o cliente.
O spooler MAPI chama IMSProvider::SpoolerLogon.
IMSProvider::SpoolerLogon retorna as mesmas interfaces IMSLogon e IMsgStore da etapa 5.
Observação
Se a chamada de logon para o provedor do repositório de mensagens falhar porque uma senha incorreta foi fornecida e o provedor do repositório de mensagens não puder exibir uma interface para pedir a senha correta, ela deverá retornar MAPI_E_FAILONEPROVIDER do método IMSProvider::Logon . Isso permitirá que os clientes solicitem ao usuário uma senha para tentar fazer logon no provedor do repositório de mensagens novamente em vez de fazer com que o MAPI falhe no provedor durante toda a sessão.