尝试读取 Office Outlook 模板的内容时出现互操作异常

interop exception when trying to read the contents of an office outlook template

我正在尝试阅读电子邮件正文中嵌入图像的办公模板(.oft 文件)。我尝试使用 the MsgReader nuget package 读取内容,但无法管理正文中的图像。

我也尝试过使用 Microsoft.Office.Interop.Outlook,但这会在运行时抛出以下错误:

错误:System.IO.FileNotFoundException:无法加载文件或程序集 'office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'。该系统找不到指定的文件。 文件名:'office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'

我正在努力寻找解决方案。在我的工作计算机上,我安装了 Office 365。在“关于”选项卡中显示 Microsoft Outlook for Microsoft 365 MSO (16.0.12827.20200) 32-bit

到目前为止,根据我所阅读的内容,我已经尝试 运行 我在 IIS 中而不是 IIS Express 中的原型项目,但这并没有解决问题。我是否需要安装特定版本的 Outlook 或某些重新分发文件?或者有更好的方法吗?

Error: System.IO.FileNotFoundException: Could not load file or assembly 'office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'. The system cannot find the file specified. File name: 'office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'

看来您还需要引用 office.dll 程序集。例如,在 COM 引用部分搜索 Microsoft Office library

此外,我注意到您运行在 IIS 下解决了这个问题。

So far based on what i have read, i have tried running my prototype project in IIS instead of IIS Express, but this did not resolve the problem.

Microsoft 对此的声明如下:

All current versions of Microsoft Office were designed, tested, and configured to run as end-user products on a client workstation. They assume an interactive desktop and user profile. They do not provide the level of reentrancy or security that is necessary to meet the needs of server-side components that are designed to run unattended.

Microsoft does not currently recommend, and does not support, Automation of Microsoft Office applications from any unattended, non-interactive client application or component (including ASP, ASP.NET, DCOM, and NT Services), because Office may exhibit unstable behavior and/or deadlock when Office is run in this environment.

Considerations for server-side Automation of Office 文章中阅读更多相关信息。

您的选择如下:

  • 使用低级别 API 可以 运行 在服务下 - 扩展 MAPI 或 EWS,请参阅 Start using web services in Exchange 了解更多信息。
  • 使用专为服务器端执行而设计的第三方组件。

请注意,[MS-OXMSG]: Outlook Item (.msg) File Format 在 MSDN 中有描述。

我无法让他的互操作工作,但找到了一个有效的第三方解决方案:https://downloads.aspose.com/email/net

this nuget 包将正确读取包括图像在内的正文内容,无需使用互操作。

在 .NET Core 中使用互操作类型时,使用对特定 Office 对象库的 COM 引用,而不是 NuGet 包:

并设置嵌入互操作类型复制本地:

有关详细信息,请参阅