首页 > 解决方案 > 有没有办法在 C# 中打开 .msg 文件?

问题描述

我试图简单地检索 Outlook 电子邮件文件名及其本地路径,并通过 Outlook 打开该 .msg 文件。有没有办法做到这一点?还是完全不可能?

我不需要阅读 .msg 文件的内容。我只需要打开它,最终用户就可以查看保存的电子邮件文件。

我做了以下,但它根本不起作用。

try { 
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application(); 

string filePath = MapPath("~\\path\\filename.msg"); var item = app.Session.OpenSharedItem(filePath) as Microsoft.Office.Interop.Outlook.MailItem;
    string body = item.HTMLBody; int att = item.Attachments.Count; 

} catch (Exception ex) { 
Global.Log.Error(ex.Message, ex.InnerException); 
}

标签: c#asp.netoutlookoffice-interop

解决方案


只有一种可能的方法 - 从在 IE 中运行的 JS 代码自动化 Outlook 或使用mailto协议:

var link = "mailto:target@example.com"; 
 // In addition to this you can add subject or body as parameter . 
 // For e.g. 
 // "mailto:target@example.com?subject=test subject&body=my text"
 window.location.href = link;

Office 文章服务器端自动化的注意事项陈述如下:

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

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

在这种情况下,如果您只处理 Exchange 配置文件/帐户,则可以考虑使用 EWS。此外,您可以考虑使用 Outlook 所基于的低级 API - 扩展 MAPI 或只是围绕该 API 的任何第三方包装器。


推荐阅读