ID do artigo: 315458 - Última revisão: quinta-feira, 4 de março de 2004 - Revisão: 1.3

PROBLEMA: Simple MAPI BMAPI funções podem não funcionar do código do Visual Basic

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
importante : Este artigo contém informações sobre como modificar o registro. Antes de modificar o registro, certifique-se de backup e certifique-se que você saiba como restaurar o registro se ocorrer um problema. Para obter informações sobre como fazer backup, restaurar e editar o registro, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
256986  (http://support.microsoft.com/kb/256986/EN-US/ ) Descrição do registro do Microsoft Windows
Expandir tudo | Recolher tudo

Sintomas

Chamadas para a função MAPISendMail que são feitas no código do Microsoft Visual Basic podem falhar com uma mensagem de erro semelhante à seguinte:
Microsoft Outlook
Não há nenhum cliente de email padrão ou o cliente de email atual não é possível realizar a solicitação de mensagens. Execute o Microsoft Outlook e defina-o como o cliente de email padrão.
Esse problema geralmente ocorre quando o Microsoft Outlook Express é definido como o cliente de email padrão.

Causa

Programas de Visual Basic que usam o MAPI simples normalmente utilizam instruções Declare que importar as funções BMAPI. Quando o Outlook Express é o cliente de email padrão, a biblioteca stub MAPI não pode rotear essas chamadas para o Outlook Express; em vez disso, as chamadas falharem e uma mensagem de erro é exibida.

Resolução

Uma maneira para resolver esse problema é não utilizar instruções Declare que fazem referência as funções BMAPI. No entanto, como Visual Basic não é possível chamar o não-BMAPI funciona (a menos que você manipular as estruturas necessárias no nível binário), talvez você queira escrever código para chamar as funções de MAPI simples em uma linguagem que pode manipular as estruturas, como C ou C++.

Duas outras resoluções são fornecidas no final da seção "Informações adicionais".

Situação

Esse comportamento é por design.

Mais Informações

A biblioteca stub de MAPI, Mapi32.dll, é a DLL que normalmente é carregada por um aplicativo de cliente para usar MAPI simples. A biblioteca stub roteia chamadas para a implementação MAPI apropriada, baseada nas configurações do Registro. Dessa forma, várias implementações podem coexistir sem substituir uns aos outros.

Quando uma chamada é feita para uma função exportada por biblioteca stub, a biblioteca segue estas etapas:
  1. Ele determina se a função é uma função MAPI simples ou uma função MAPI estendido. As seguintes funções de exportação são marcadas na biblioteca stub como funções de MAPI simples:

    • MAPIAddress
    • MAPIDeleteMail
    • MAPIDetails
    • MAPIFindNext
    • MAPIFreeBuffer
    • MAPILogoff
    • MAPILogon
    • MAPIReadMail
    • MAPIResolveName
    • MAPISaveMail
    • MAPISendDocuments
    • MAPISendMail

    Todas as outras funções de exportação são funções de MAPI estendido.
  2. Ele procura na seguinte chave do Registro para determinar a implementação de MAPI padrão atual:
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::(default)
  3. Em seguida, parece sob a chave do cliente para localizar o caminho da DLL correta para carregar. Se a função é uma função MAPI simples, ele carrega a DLL especificada pelo valor do DllPath e, em seguida, chama a função. Se a função for uma função MAPI estendido, ele carrega a DLL especificada pelo valor do DllPathEx . Após localizar a DLL apropriada, ele chama a função.

    No caso do Microsoft Outlook, por exemplo, ele procura o valor de DLLPath ou DLLPathEx sob a seguinte chave:
    Outlook HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Microsoft
  4. Se DllPathEx ou DllPath não for encontrado, a biblioteca stub usa o arquivo Mapi32x.dll, localizada no mesmo diretório que a biblioteca stub. Este arquivo é normalmente uma cópia renomeada do arquivo Mapi32.dll que já existia quando a biblioteca stub foi instalada. Em muitos sistemas, especialmente aqueles onde somente Outlook e Outlook Express foram instalados, este arquivo não existe.
  5. Se a biblioteca stub não conseguir localizar Mapi32x.dll, ele exibirá a mensagem localizada em uma das seguintes chaves:
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::PreFirstRun

    - ou -

    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::NoMailClient
O motivo para o problema ao usar o Outlook Express é da seguinte maneira:
  1. A maioria dos código do Visual Basic usa instruções Declare com base no módulo Mapivb32.bas, que importa MAPISendMail como BMAPISendMail. Maioria das funções do SimpleMAPI também é declaradas com seus equivalentes BMAPI.Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    163216  (http://support.microsoft.com/kb/163216/EN-US/ ) Mapivb32.bas atualizado para Simple MAPI em plataformas de 32 bits
  2. Como as funções BMAPI não estão na lista de funções de MAPI simples que usar a DLL especificada no DllPath , a biblioteca stub roteia-los usando o valor no DllPathEx .
  3. Como o Outlook Express não implementa MAPI estendido, ela tem nenhum valor definido para DllPathEx .
  4. A biblioteca stub tenta usar Mapi32x.dll, que não existe e como resultado exibe a mensagem PreFirstRun .
Há duas maneiras adicionais para solucionar o problema:
  • Uma resolução temporária é determinar se o Outlook Express é o cliente de email padrão e se ela estiver, adicione um valor DllPathEx no registro da seguinte maneira:
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Outlook Express::DllPathEx = %ProgramFiles%\Outlook Express\msoe.dll
    Aviso : se você usar o Editor do Registro incorretamente, poderá causar problemas sérios que talvez exijam a reinstalação do sistema operacional. A Microsoft não garante que você pode resolver problemas resultantes do uso incorreto do Editor do Registro. Use o Editor do registro por sua própria conta e risco.

    Como o Outlook Express implementa e exporta o BMAPIFunctions de Msoe.dll, definição DllPathEx permite que a biblioteca stub para rotear chamadas a eles. O perigo isso é que um cliente tenta usar MAPI estendido receberá um erro (porque o Msoe.dll não exporta as funções de MAPI estendido) quando ele pode, em vez disso, ter usado Mapi32x.dll com êxito.
  • Para forçar um aplicativo para usar a implementação do Outlook Express para todas as chamadas MAPI, crie um novo valor na seguinte chave do Registro:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows mensagens Subsystem\MSMapiApps
    Defina o nome do valor com o nome do seu aplicativo (como MyApp.exe) e, em seguida, defina o valor para o Outlook Express. Isso ignora a biblioteca stub e força passar todas as chamadas MAPI, incluindo as chamadas BMAPI, diretamente para o Outlook Express.

A informação contida neste artigo aplica-se a:
  • Microsoft Office Outlook 2007
  • Simple Messaging Application Programming Interface (MAPI)
Palavras-chave: 
kbmt kbmsg kbprb KB315458 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 315458  (http://support.microsoft.com/kb/315458/en-us/ )