【问题标题】:Saving an email to a .MSG file using EWS Managed API使用 EWS 托管 API 将电子邮件保存到 .MSG 文件
【发布时间】:2017-05-04 19:24:57
【问题描述】:

我当前的项目在基于 Microsoft Exchange 2010 的电子邮件地址上运行一项服务,专门用于将自定义规则应用于传入电子邮件。

当我浏览可能的基于 C# 的解决方案时,EWS 托管 API 似乎是最适合我的 API。我需要的每个电子邮件操作都已找到,但缺少一个非常大的操作...将电子邮件保存到 .msg 文件。考虑到它在 Outlook 中的操作非常简单(只需从 Outlook 拖放到任何文件夹),这让我感到非常惊讶。

这是一个绝对要求,因为用户通过拖放来组织他们的电子邮件。有什么方法我错过了用 EWS 做到这一点?到目前为止,我只发现了两种非 EWS 方式:

  • 使用第三方库,我不确定我们是否负担得起(IndependentSoft)
  • 使用更复杂的方法和 MessageSave 和 Outlook 规则来执行自定义操作(操作是“运行 MessageSave”)

我很惊讶这样一个基本操作需要这么多工作,并且想知道,有没有简单的方法可以将电子邮件保存到.msg 文件?

最坏的情况,是否有非 EWS API、基于 C# 的方法来执行此操作?

谢谢

编辑:

我已经探索了.eml 导出解决方案。问题是我们使用不支持 eml 格式的 Outlook 2007。 .msg 几乎是这里的要求

【问题讨论】:

    标签: c# exchangewebservices


    【解决方案1】:

    .msg 是一种格式,只有 Outlook 本身使用,而不是您正在与之通信的交换服务器。

    就此而言,可以很容易地创建一个 .eml 文件。

    请参阅here,如何做到这一点。

    【讨论】:

    • 谢谢(抱歉回答晚了 - 假期!)。我使用该方法创建了一个 .eml 文件,但无法使用 Outlook 打开它!如果我将 outlok 设置为打开它的程序,它会打开一封带有 eml 文件作为附件的新电子邮件。有什么办法解决吗?
    • 您可以将文件扩展名更改为 .mht 并在 Internet Explorer 中打开它(据我所知,这是唯一能正确显示 .mht 文件的浏览器)。但是,使用此解决方法,您将无法查看或下载电子邮件的附件。如果这对您很重要,可以尝试其他邮件程序(例如 Thunderbird)来进一步限制问题。
    • @Damascus 你看过这个问题的其他答案吗?这个看起来很有希望:stackoverflow.com/a/36070777/1033684- 里面有三种可能的解决方案。
    • @Damascus 您需要以编程方式访问文件吗?如果没有,您是否尝试过众多 .eml 文件阅读器之一?甚至还有 .eml 到 .msg 的转换器。库“Redemption”link 只需几行代码即可在您的 c# 应用程序中完成此操作。
    • 嗨!我有机会尝试这两种方法,但正如帖子中所解释的那样,我希望看看是否有合适的 API 解决方案,而不是付费的第三方库!
    【解决方案2】:

    有一个非 EWS API、基于 C# 的方法可以完全满足您的需求:

    http://www.independentsoft.de/exchangewebservices/tutorial/downloadmessagetomsgfile.html

    using System;
    using System.IO;
    using System.Net;
    using Independentsoft.Exchange;
    
    namespace Sample
    {
        class Program
        {
            static void Main(string[] args)
            {
                NetworkCredential credential = new NetworkCredential("username", "password");
                Service service = new Service("https://myserver3/ews/Exchange.asmx", credential);
    
                try
                {
                   ItemShape itemShape = new ItemShape(ShapeType.Id);
                   FindItemResponse inboxItems = service.FindItem(StandardFolder.Inbox, itemShape);
    
                   for (int i = 0; i < inboxItems.Items.Count; i++)
                   {
                       Independentsoft.Msg.Message msgFile = service.GetMessageFile(inboxItems.Items[i].ItemId);
                       msgFile.Save("c:\\test\\message" + i + ".msg", true);
                   }
                }
                catch (ServiceRequestException ex)
                {
                   Console.WriteLine("Error: " + ex.Message);
                   Console.WriteLine("Error: " + ex.XmlMessage);
                   Console.Read();
                }
                catch (WebException ex)
                {
                   Console.WriteLine("Error: " + ex.Message);
                   Console.Read();
                }
            }
        }
     }
    

    它提供了将邮件和其他项目保存为 Outlook .msg 文件的功能。

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 2013-08-25
      • 2019-02-12
      • 2011-12-05
      • 2016-05-31
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多