C#将电子邮件另存为.msg文件

时间:2019-10-17 10:44:06

标签: c# outlook exchangewebservices

以下方法将类型Microsoft.Exchange.WebServices.Data.EmailMessage的对象保存在磁盘上

private void SaveMailOnDisk(Microsoft.Exchange.WebServices.Data.EmailMessage email, string pathLocation)
{
    FileStream fs = null;
    BinaryWriter sw = null;
    try
    {
        email.Load(new PropertySet(ItemSchema.MimeContent));
        MimeContent mc = email.MimeContent;
        fs = new FileStream(pathLocation, FileMode.Create);
        // mc.CharacterSet Is UTF8
        sw = new BinaryWriter(fs, System.Text.Encoding.UTF8);
        sw.Write(mc.Content, 0, mc.Content.Length);
        sw.Flush();
    }
    catch { }
    finally
    {
        sw?.Close();
        fs?.Close();
    }
}

文件已成功保存在磁盘上,但是当我尝试使用Outlook 2016打开文件时,出现以下错误:

  

我们无法打开msg文件的路径。该文件可能已经打开,或者您没有打开它的权限

有什么方法可以将其另存为.msg文件在磁盘上。我提到此方法适用于.eml文件,但我需要.msg格式。

2 个答案:

答案 0 :(得分:0)

使用 EWS .msg文件没有本机支持。严格来说,它只是 Outlook 格式。

但这3rd party library可以满足您的要求。

关于收到的错误消息,我建议您尝试将Outlook 2016更新为latest update

答案 1 :(得分:0)

请记住,MIME格式不是Exchange固有的,如果将Exchange项目转换为MIME(EML)格式,则可能会丢失MAP特定的属性。

话虽如此,Outlook将很乐意像打开MSG文件一样轻松地打开EML文件,因此,将EML转换为MSG并不会带来任何好处。

如果要保留所有特定于MAP的属性,则需要使用快速传输流格式(FTS)导出-这是ExportItems EWS操作产生的格式(请参见https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/exportitems-operationhttps://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-export-items-by-using-ews-in-exchange

FTS格式保留所有MAPI属性,但未记录其内部结构。如果您想将FTS数据转换为MSG文件,可以使用Redemption(我是它的作者)-创建RDOSession对象的实例,调用RDOSession.CreateMessageFromMsgFile创建一个新的MSG文件,请调用RDOMail.Import(..., olFts)导入FTS数据,然后调用RDOMail.Save