【问题标题】:RDO Outlook Redemption access mailbox from test server来自测试服务器的 RDO Outlook Redemption 访问邮箱
【发布时间】:2026-02-23 23:10:01
【问题描述】:

我已经构建了一个使用 Redemption 读取邮箱的 Web 应用程序,我们称之为“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, Boolean& bNeedSecurityCheck) 在 System.RuntimeType.CreateInstanceSlow(布尔 publicOnly,布尔 skipCheckThis,布尔型填充缓存)在 System.RuntimeType.CreateInstanceDefaultCtor(布尔 publicOnly, 布尔型 skipVisibilityChecks,布尔型 skipCheckThis,布尔型 fillCache) 在 System.Activator.CreateInstance(Type type, Boolean 非公开)

我猜我的服务器正在使用它的网络用户作为登录邮箱的默认用户,而不是当前的 Windows NT 用户访问网络应用程序。如何让服务器或我的 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);

【问题讨论】:

  • 您是否确认上述代码适用于同一服务器上的登录用户(例如通过 RDP)?在从 Web 应用程序尝试之前,您需要让它在控制台或 winforms 应用程序中为登录用户工作。
  • @Ben 为什么这需要在 webapp 之前在 winform 或控制台上进行测试?
  • 什么是操作系统位数?您安装了哪个版本的 Outlook 或 MAPI?
  • @Dmitry,服务器是 64 位的,应用程序设置为 VS2010 MVC3 中的“任何 CPU”,所以它可能默认为 64 ......不过只是一个疯狂的猜测。 MAPI 来自here
  • @EKet 在您认为这是在 IIS 中运行的问题之前,您应该确认它在该计算机上完全工作。 IIS 增加了很多额外的注意事项。我怀疑某种组件注册问题。正如 Dmitry 所说,Bitness 也可能是问题所在,因此请在 64 位 winforms 应用程序中进行测试。如果可行,那么担心 IIS 配置。

标签: c# outlook outlook-redemption


【解决方案1】:

噩梦(或不那么推荐)解决方案 正如 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
Download attachment from Exchange using Exchange Web Services

【讨论】:

  • 您还可以将您的 MAPI 相关功能包装到一个单独的 exe 中,您可以在 32 位和 64 位中编译,然后从主可执行文件中调用它,无论其位数如何。
最近更新 更多