2010-05-07 18 views
1

Notre application utilise Simple MAPI pour envoyer des e-mails. Un de nos clients a des problèmes pour envoyer des e-mails à partir d'une session sur son serveur Terminal Server.Erreur lors du chargement dynamique mapi32.dll

Le mapi32.dll est chargé avec un appel à LoadLibrary qui réussit, mais notre application tente d'obtenir les adresses des fonctions MAPILogon, MAPILogOff, MAPISendMail, MAPIFreeBuffer et MAPIResolveName. Le problème est que GetProcAddress échoue pour les fonctions avec un ERROR_ACCESS_DENIED (code: 5) à l'exception de MAPIFreeBuffer. Cela ressemble à une sorte de sécurité.

Comment puis-je résoudre ce problème ou devrais-je utiliser une autre méthode pour envoyer du courrier?

FWI, voici quelques informations supplémentaires sur OS et le contenu de la clé de registre HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows Messaging Subsystem:

OS info: 5.2.3790 VER_PLATFORM_WIN32_NT Service Pack 2 

Contents of SOFTWARE\Microsoft\Windows Messaging Subsystem 
InstallCmd: rundll32 setupapi,InstallHinfSection MSMAIL 132 msmail.inf 
MAPI: 1 
CMCDLLNAME: mapi.dll 
CMCDLLNAME32: mapi32.dll 
CMC: 1 
MAPIX: 1 
MAPIXVER: 1.0.0.1 
OLEMessaging: 1 
Contents of SOFTWARE\Microsoft\Windows Messaging Subsystem\MSMapiApps 
inetsw95.exe: 
choosusr.dll: 
msab32.dll: 
nwab32.dll: 
outstore.dll: Microsoft Outlook 
CDOEXM.DLL: 
EMSMDB32.DLL: 
EMSABP32.DLL: 
newprof.exe: Microsoft Outlook 
outlook.exe: 
wfxmsrvr.exe: Microsoft Outlook 
msexcimc.exe: 
exchng32.exe: 
schdmapi.dll: Microsoft Outlook 
pilotcfg.exe: Microsoft Outlook 
mailmig.exe: Microsoft Outlook 
admin.exe: 
msspc32.dll: Microsoft Outlook 
cnfnot32.exe: Microsoft Outlook 
ilpilot.exe: Microsoft Outlook 
events.exe: 

Je suis sur Delphi 7.0, mais cela ne devrait pas d'importance.

Modifier, ajouté des informations de version:

Fileversion information de C: \ WINDOWS \ system32 \ mapi32.dll

Fileversion: 6.5.7226.0 
FileDescription=Extended MAPI 1.0 for Windows NT 
CompanyName=Microsoft Corporation 
InternalName=MAPI32 
Comments=Service Pack 1 
LegalCopyRight=Copyright (C) 1986-2003 Microsoft Corp. All rights reserved. 
LegalTradeMarks=Microsoft(R) and Windows(R) are registered trademarks of Microsoft Corporation. 
OriginalFileName=MAPI32.DLL 
ProductName=Microsoft Exchange 
ProductVersion=6.5 

Fileversion information de C: \ Program Files \ Common Files \ SYSTEM \ MSMAPI \ 1043 \ msmapi32.dll

Fileversion: 11.0.5601.0 
FileDescription=Extended MAPI 1.0 for Windows NT 
CompanyName=Microsoft Corporation 
InternalName=MAPI32.DLL 
LegalCopyRight=Copyright © 1995-2003 Microsoft Corporation. All rights reserved. 
OriginalFileName=MAPI32.DLL 
ProductName=MAPI32 
ProductVersion=11.0.5601 

Répondre

1

Je trouve le problème. Comme vous pouvez le voir dans ma question, mapi32.dll est fourni par le serveur Exchange. (Version 6.5.7226 = Microsoft Exchange Server 2003 SP1). Selon this site Exchange 2003 ne prend pas en charge MAPI simple pour des raisons de sécurité:

Au Exchange 2003, Exchange n'implémente MAPI simple. L'API a été supprimée pour réduire la surface d'attaque potentielle

Donc, c'est la raison pour laquelle je ne peux pas obtenir les ProcAddresses des appels MAPI simples.

Il semble que je doive prendre en charge le MAPI étendu.

0

Je pense que c'est un problème de versions mixtes de mapi32.dll. Telles que peut-être Office2003 et 2007 sur la même machine, ou une désinstallation bâclée/ré-installation des versions (c'est-à-dire essayé de désinstaller 2007 et revenir à 2003, ou vice-versa). Demandez au client de rechercher l'intégralité du HD pour mapi32.dll et de voir s'il existe plusieurs versions. S'il n'y en a qu'un, comparez la version à un système de travail connu.

Voir ceci: http://www.techtalkz.com/microsoft-outlook/391309-mapi32-dll-error-help-my-kids-xms-gift-broken.html

+0

J'ai ajouté les informations de version demandées. Je dois dire que la version de mapi32.dll est suspectée. Cela ne devrait-il pas être un bout avec la version 1, comme sur Windows XP? Peut-être que je dois demander à mon client pour exécuter fixmapi.exe. –