Numéro d'article: 315458 - Dernière mise à jour: jeudi 4 mars 2004 - Version: 1.3

MODÈLE : fonctions BMAPI MAPI simple peut ne pas fonctionner à partir de code Visual Basic

A noterCet article s'applique à un système d'exploitation différent de celui que vous utilisez. Le contenu de l'article qui ne vous concerne peut-être pas est désactivé.
IMPORTANT : Cet article contient des informations sur la modification du Registre. Avant de modifier le Registre, veillez à sauvegarder et assurez-vous que vous savez comment restaurer le Registre si un problème se produit. Pour savoir comment sauvegarder, restaurer et modifier le Registre, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
256986  (http://support.microsoft.com/kb/256986/EN-US/ ) Description de du Registre Microsoft Windows
Agrandir tout | Réduire tout

Symptômes

Appels effectués à partir du code Microsoft Visual Basic à la fonction MAPISendMail peuvent échouer avec un message d'erreur semblable au suivant :
Microsoft Outlook
Soit il ne pas par défaut de client de messagerie, soit le client en cours de la messagerie ne peut pas exécuter la requête de messagerie. Veuillez exécuter Microsoft Outlook et définissez-le comme client de messagerie par défaut.
Ce problème se produit souvent lorsque Microsoft Outlook Express est configuré comme client de messagerie par défaut.

Cause

Programmes Visual Basic qui utilisent MAPI simple généralement utiliser instructions Declare importer les fonctions BMAPI. Lorsque Outlook Express est le client de messagerie par défaut, la bibliothèque stub MAPI ne peut pas acheminer ces appels vers Outlook Express ; au lieu de cela, les appels échouent et une message d'erreur est affiché.

Résolution

Une façon de résoudre ce problème consiste à n'utiliser pas instructions Declare qui référencent les fonctions BMAPI. Toutefois, étant donné que Visual Basic ne peut pas appeler le non-BMAPI fonctionne (sauf si vous manipulez les structures requises au niveau binaire), vous pouvez écrire du code pour appeler les fonctions MAPI simple à partir d'une langue qui peut gérer les structures, tel un C ou C++.

Deux autres résolutions sont fournies à la fin de la section « Plus d'informations ».

Statut

Ce comportement est voulu par la conception même du produit.

Plus d'informations

La bibliothèque stub MAPI, Mapi32.dll, est la DLL qui est généralement chargé par une application client à utiliser l'interface MAPI simple. La bibliothèque stub achemine les appels à l'implémentation MAPI appropriée, en fonction des paramètres de Registre. De cette façon, les différentes implémentations peuvent coexister sans remplacer les unes des autres.

Lorsqu'un appel est effectué à une fonction exportée par la bibliothèque stub, la bibliothèque suit ces étapes :
  1. Il détermine si la fonction est une fonction MAPI simple ou une fonction MAPI étendu. Les fonctions d'exportation suivantes sont marquées dans la bibliothèque stub comme étant Simple MAPI fonctions :

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

    Tous les autres fonctions d'exportation sont fonctions MAPI étendu.
  2. Il recherche dans la clé de Registre suivante pour déterminer l'implémentation MAPI par défaut actuelle :
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::(default)
  3. Il recherche ensuite sous clé du client pour rechercher le chemin de la DLL correct à charger. Si la fonction est une fonction simple MAPI, il charge la DLL spécifiée par la valeur DllPath et puis appelle la fonction. Si la fonction est une fonction MAPI étendu, il charge la DLL spécifiée par la valeur DllPathEx . Après la recherche de la DLL appropriée, il appelle ensuite la fonction.

    Dans le cas de Microsoft Outlook, par exemple, il recherche la valeur de DLLPath ou DLLPathEx sous la clé suivante :
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Microsoft Outlook
  4. Si DllPathEx ou DllPath est introuvable, la bibliothèque stub utilise le fichier Mapi32x.dll, qui se trouve dans le même répertoire que la bibliothèque stub. Ce fichier est généralement une copie renommée du fichier Mapi32.dll qui existaient lors de la bibliothèque stub installation. Sur les nombreux systèmes, en particulier celles où seulement Outlook et Outlook Express installé, ce fichier n'existe pas.
  5. Si la bibliothèque stub échoue trouver Mapi32x.dll, il affiche le message qui se trouve dans une des clés suivantes :
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::PreFirstRun

    -ou-

    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail::NoMailClient
La raison du problème lors de l'aide d'Outlook Express est comme suit :
  1. La plupart des code Visual Basic utilise déclarations Declare basées sur le module Mapivb32.bas, qui importe MAPISendMail comme BMAPISendMail. La plupart des autres fonctions SimpleMAPI est également déclarée avec leurs équivalents BMAPI.Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
    163216  (http://support.microsoft.com/kb/163216/EN-US/ ) Mise à jour Mapivb32.bas pour simple MAPI sur les plates-formes 32 bits
  2. La mesure où les fonctions BMAPI ne sont pas dans la liste des fonctions MAPI simple qui utilisent la DLL spécifiée dans DllPath , la bibliothèque stub achemine les en utilisant la valeur en DllPathEx .
  3. Étant donné que Outlook Express n'implémente pas MAPI étendu, qu'elle n'a aucune valeur définie pour DllPathEx .
  4. La bibliothèque stub tente d'utiliser Mapi32x.dll qui n'existe pas et par conséquent affiche le message PreFirstRun .
Il existe deux manières supplémentaires pour contourner le problème :
  • Une solution temporaire consiste à déterminer si Outlook Express est le client de messagerie par défaut et si elle est, ajoutez une valeur DllPathEx dans le Registre comme suit :
    HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Outlook Express::DllPathEx = %ProgramFiles%\Outlook Express\msoe.dll
    Avertissement : Si vous utilisez l'Éditeur du Registre de façon incorrecte, vous pouvez générer des graves problèmes pouvant vous obliger à réinstaller votre système d'exploitation. Microsoft ne peut pas garantit que vous pouvez résoudre les problèmes résultant de l'utilisation incorrecte de l'Éditeur du Registre. Utilisez l'Éditeur du Registre à vos risques et périls.

    Étant donné que Outlook Express met en ?uvre et exporte les BMAPIFunctions Msoe.dll, définition DllPathEx permet la bibliothèque stub aux appels de gamme à. Le danger de cette opération est qu'un client qui tente d'utiliser MAPI étendu recevrez une erreur (parce que le fichier Msoe.dll n'exporte pas les fonctions MAPI étendue) lorsqu'il peut à la place ont utilisé Mapi32x.dll avec succès.
  • Pour forcer une application d'utiliser l'implémentation d'Outlook Express pour tous les appels MAPI, créez une nouvelle valeur sous la clé de Registre suivante :
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows messagerie Subsystem\MSMapiApps
    Définir le nom de la valeur sur le nom de votre application (comme MyApp.exe) et définir la valeur à Outlook Express. Cette ignore la bibliothèque stub et oblige à transmettre tous les appels MAPI, y compris les appels BMAPI, directement vers Outlook Express.

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Office Outlook 2007
  • Simple Messaging Application Programming Interface (MAPI)
Mots-clés : 
kbmt kbmsg kbprb KB315458 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 315458  (http://support.microsoft.com/kb/315458/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.