【问题标题】:Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed. error: 80070005 Access denied检索具有 CLSID {0006F03A-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败。错误:80070005 访问被拒绝
【发布时间】:2016-02-13 09:51:26
【问题描述】:

在我的网站中,我正在创建 Outlook 对象并使用它们在单击按钮时打开 Outlook 文件。它在本地工作。但是当我在 IIS 8.5 中托管它时,它给了我以下错误

检索 CLSID 为 {0006F03A-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败,原因是以下错误:80070005 访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))。

我的代码如下:

outlook.Application objOutlk = new outlook.Application();
string templatePath = Server.MapPath("Files\\" + file + ".msg");
outlook._MailItem mailitem =   
(outlook.MailItem)objOutlk.CreateItemFromTemplate(templatePath);
mailitem.Display(true);

【问题讨论】:

    标签: asp.net outlook


    【解决方案1】:

    Microsoft 目前不推荐也不支持任何无人值守、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务)的 Microsoft Office 应用程序自动化,因为 Office在此环境中运行 Office 时可能会出现不稳定的行为和/或死锁。

    如果您要构建在服务器端上下文中运行的解决方案,您应该尝试使用已确保无人值守执行安全的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方案。如果您使用来自服务器端解决方案的 Office 应用程序,该应用程序将缺少许多成功运行所需的功能。此外,您将承担整体解决方案稳定性的风险。在Considerations for server-side Automation of Office 文章中阅读更多相关信息。

    考虑在 Exchange 帐户的情况下使用 EWS,有关详细信息,请参阅 EWS Managed API, EWS, and web services in Exchange。或者可以使用Mail REST API,见Outlook Mail REST API reference

    【讨论】:

      【解决方案2】:

      首先,您不能在服务(例如 IIS)中使用 Outlook 对象模型。其次,即使你可以,你的代码会做什么?它会在运行代码的机器(即 IIS 服务器)上显示新创建的项目,而不是在客户端机器上。

      如果您想显示一个带有预填充 To/CC/Subject/Body 的新邮件窗口,请在您的网页上使用 mailto: url。如果您想要更复杂的东西(例如带有图像的 HTML 正文等),您可以动态创建 EML 文件并让用户单击链接下载它 - 如果安装了 Outlook,新的消息窗口将打开。确保设置X-Unsent: 1 MIME 标头。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多