【发布时间】: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