我已经构建了一个使用Redemption来读取邮箱的网络应用程序,我们称之为“custom@domain.com”。它使用localhost工作正常,但是当我部署它时,我得到了这个例外。
错误System.Runtime.InteropServices.COMException(0x80004005): 使用CLSID创建COM组件的实例 来自IClassFactory的{29AB7A12-B531-450E-8F7A-EA94C2F3C05F}失败 由于以下错误:80004005。在 System.RuntimeTypeHandle.CreateInstance(RuntimeType类型,布尔值 publicOnly,Boolean noCheck,Boolean& canBeCached, RuntimeMethodHandleInternal&安培; ctor,布尔& bNeedSecurityCheck)at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache)at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks,Boolean skipCheckThis,Boolean fillCache)在System.Activator.CreateInstance(Type type,Boolean 非公开)
我猜我的服务器正在使用其网络用户作为登录邮箱的默认用户,而不是当前的Windows NT用户访问网络应用程序。如何使用RDO的应用程序获取服务器或我的RDO代码以使用当前的NT用户?
我已在我的服务器上安装了MAPI Extension,并在注册表中注册了该DLL。
我的RDO代码如下所示
RDOSession Session = null;
rdoDefaultFolders olFolderInbox = rdoDefaultFolders.olFolderInbox;
Session = new RDOSession();//this throws the exception above
Session.LogonExchangeMailbox("username@domain.com", outLookServer);
objFolder = Session.GetDefaultFolder(olFolderInbox);
答案 0 :(得分:0)
梦魇(或不推荐)解决方案 我相信的问题是德米特里指出的应用程序的严重性。但是,将应用程序转换为32位或64位的问题是将解决方案中的每个项目转换为使用相同位数的不可避免且可怕的连锁反应,以便应用程序可以使用相同位的MAPI。如果你有其他应用程序使用相同的库和项目,那么这些也可能会破坏,所以这说起来容易做起来难。事实上我尝试了它并且它在很多方面打破了这个项目......决定它不值得。
最佳解决方案
对于Exchange Server 2007_SP1及更高版本,我们有一个方便的WebService,称为Exchange Web服务MAPI,与Redemption做同样的事情......可能没有那么多,但它可以满足您的日常需求。请阅读下载中的指南以获取更多信息。
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=13480
这对我来说是最好的解决方案,因为它不需要任何应用程序来指定位,它不需要任何特殊指令,也没有松散的结束。一个简单的DLL,通过身份验证甚至模拟完全满足您的需求。谁不喜欢webservices?
示例代码
using ExWs = Microsoft.Exchange.WebServices.Data;
ExWs.ExchangeService service = new
ExWs.ExchangeService(ExWs.ExchangeVersion.Exchange2007_SP1);
service.Credentials = new
ExWs.WebCredentials("username", "password", "domain");
service.AutodiscoverUrl("name@company.com");
<强>教程强>
再次阅读指南或谷歌。
其他例子
http://omegacoder.com/?p=454
Download attachment from Exchange using Exchange Web Services