2010-05-07 81 views
1

我们的应用程序使用简单MAPI发送电子邮件。我们的一位客户在从他的终端服务器上的会话发送电子邮件时遇到问题。动态加载时出错mapi32.dll

中的Mapi32.dll装有给LoadLibrary其成功的呼叫,但随后我们的应用程序试图获得的功能MAPILogonMAPILogOffMAPISendMailMAPIFreeBufferMAPIResolveName地址。问题是GetProcAddress对于那些ERROR_ACCESS_DENIED(代码:5)功能失效,MAPIFreeBuffer除外。它看起来像某种安全的东西。

我该如何解决这个问题,还是应该使用其他方法发送邮件?

FWI,这里大约操作系统和注册表项HKEY_LOCAL_MACHINE \ SOFTWARE内容\微软\ Windows消息子系统的一些详细信息:

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: 

我在德尔福7.0,但是这不应该的问题。

编辑,添加的版本信息:

FILEVERSION的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的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 

回答

1

我发现这个问题。正如你在我的问题中所看到的,mapi32.dll是由Exchange服务器提供的。 (Version 6.5.7226 = Microsoft Exchange Server 2003 SP1)。据this site 的Exchange 2003不支持简单MAPI出于安全方面的原因:

由于Exchange 2003中的,交易所不再实施简单MAPI。删除API以减少潜在的攻击面

所以这就是我无法获取简单MAPI调用的ProcAddresses的原因。

看起来我必须去支持扩展MAPI。

0

我认为这是一个混合版本的mapi32.dll问题。比如在同一台机器上使用Office2003和2007,或者使用一个不合理的卸载/重新安装交叉版本(例如试图卸载2007年并回到2003年,反之亦然)。让客户端搜索整个HD for mapi32.dll并查看是否有多个版本。如果只有一个,请将该版本与已知的工作系统进行比较。

看到这个: http://www.techtalkz.com/microsoft-outlook/391309-mapi32-dll-error-help-my-kids-xms-gift-broken.html

+0

我添加了请求的版本信息。我不得不说mapi32.dll的版本看起来很可疑。它不应该是版本1的存根,就像在Windows XP上一样吗?也许我必须要求我的客户端运行fixmapi.exe。 – 2010-05-27 07:47:17