Carregando provedores do 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 do repositório 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 chamada de método permite que o MAPI obtenha interfaces IMSProvider : IUnknown, IMSLogon : IUnknown e IMsgStore : IMAPIProp e permite que o provedor de repositório de mensagens obtenha um objeto de suporte MAPI. Após a sequência de chamada, o provedor do repositório de mensagens deve estar pronto para aceitar logons de clientes.

A sequência de chamada quando uma DLL de provedor de mensagens é carregada é a seguinte:

  1. O cliente chama IMAPISession::OpenMsgStore.

  2. Se o repositório de mensagens ainda não estiver aberto, o MAPI carregará a DLL do provedor de repositório e chamará o ponto de entrada MSProviderInit da DLL. Se o repositório de mensagens já estiver aberto, o MAPI pulará as etapas 2 e 3 e usará a interface IMSProvider : IUnknown existente para concluir a etapa 4.

  3. MSProviderInit cria e retorna um objeto IMSProvider .

  4. O MAPI chama IMSProvider::Logon, passando o identificador de entrada do repositório de mensagens do aplicativo cliente.

  5. 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.

  6. Se o cliente não tiver definido o sinalizador de MAPI_NO_MAIL no logon e não tiver definido o MDB_NO_MAIL na etapa 1, o MAPI fornecerá o identificador de entrada do repositório de mensagens ao spooler MAPI para que ele possa fazer logon no repositório de mensagens.

  7. O MAPI retorna a interface IMsgStore para o cliente.

  8. O spooler MAPI chama IMSProvider::SpoolerLogon.

  9. IMSProvider::SpoolerLogon retorna as mesmas interfaces IMSLogon e IMsgStore da etapa 5.

Observação

Se a chamada de logon para o provedor de repositório de mensagens falhar porque uma senha incorreta foi fornecida e o provedor de repositório de mensagens não pode exibir uma interface para solicitar a senha correta, ele 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 de repositório de mensagens novamente, em vez de fazer com que o MAPI falhe no provedor durante toda a sessão.

Confira também

Desenvolver um provedor de repositórios de mensagens MAPI