繁体   English   中英

C# 将 email 消息另存为 .msg 文件

[英]C# Save email message as .msg file

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

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格式。

请记住,MIME 格式不是 Exchange 的本机格式,如果将 Exchange 项目转换为 MIME (EML) 格式,您可能会丢失特定于 MAPI 的属性。

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

如果要保留所有 MAP 特定属性,则需要使用快速传输 Stream 格式 (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-使用 ews-in-exchange 的项目

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

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

然而,这个第 3 方库可以满足您的要求。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM