使用EWS托管API将电子邮件保存到.MSG文件

时间:2016-12-19 17:15:06

标签: c# exchangewebservices

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

当我浏览可能的基于C#的解决方案时,EWS托管API似乎是最适合我的API。我找到了我需要的每个电子邮件操作,但是有一个非常大的错过了...将电子邮件保存到.msg文件。考虑到Outlook的动作是多么简单(只需从Outlook拖放到任何文件夹),这对我来说是非常令人惊讶的。

这是绝对的要求,因为用户通过拖放来保持其电子邮件的组织。我有没有想过用EWS做错的方法?到目前为止,我只发现了两种非EWS方式:

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

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

最糟糕的情况是,是否存在非EWS API,基于C#的方法?

谢谢

修改

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

2 个答案:

答案 0 :(得分:4)

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

就此而言,可以非常轻松地创建.eml文件。

请参阅here,了解如何操作。

答案 1 :(得分:0)

有一种非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文件的功能。