0

我已经构建了一个使用 Redemption 读取邮箱的 Web 应用程序,我们称之为“custom@domain.com”。使用 localhost 可以正常工作,但是当我部署它时,我得到了这个异常。

错误 System.Runtime.InteropServices.COMException (0x80004005):从 IClassFactory 创建具有 CLSID {29AB7A12-B531-450E-8F7A-EA94C2F3C05F} 的 COM 组件实例失败,原因是以下错误:80004005。在 System.RuntimeTypeHandle.CreateInstance (RuntimeType 类型,Boolean publicOnly,Boolean noCheck,Boolean& canBeCached,RuntimeMethodHandleInternal& ctor,Boolean& bNeedSecurityCheck)在 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache)在 System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,Boolean skipVisibilityChecks,Boolean skipCheckThis , Boolean fillCache) 在 System.Activator.CreateInstance (Type type, Boolean nonPublic)

我猜我的服务器正在使用其网络用户作为登录邮箱的默认用户,而不是当前的 Windows NT 用户访问 Web 应用程序。如何获取服务器或我的 RDO 代码以使用当前 NT 用户使用带有 RDO 的应用程序?

我已经在我的服务器上安装了 MAPI 扩展并在注册表中注册了 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);
4

1 回答 1

0

噩梦(或不那么推荐) 解决方案 我认为问题在于 Dmitry 指出的应用程序的位数。然而,将您的应用程序转换为 32 位或 64 位的问题是将解决方案中的每个项目转换为使用相同的位数,以便应用程序可以使用相同位的 MAPI,这是不可避免的和可怕的连锁反应。如果您有其他应用程序使用相同的库和项目,那么这些应用程序也可能会中断,所以说起来容易做起来难。事实上,我试过了,它在很多方面破坏了这个项目……我认为这不值得。

最佳解决方案

对于 Exchange Server 2007_SP1 及更高版本,我们有一个名为 Exchange Web Services MAPI 的方便的 WebService,它与 Redemption 执行相同的操作......可能没有那么多,但它可以满足您日常的前景需求。阅读下载中的指南以获取更多信息。

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=13480

这对我来说是最好的解决方案,因为它不需要任何应用程序指定一点,不需要任何特殊说明,也没有松散的结局。一个简单的 DLL,可以完全满足您对身份验证甚至模拟的需求。谁不喜欢网络服务?

示例代码

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
使用 Exchange Web 服务从 Exchange 下载附件

于 2012-02-03T00:21:49.153 回答