以下方法将类型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
格式。
答案 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-operation和https://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
。