从.msg文件读取

时间:2020-03-05 18:40:40  来源:igfitidea点击:

我需要在不使用COM API for Outlook的情况下从.NET中的Outlook .MSG文件读取信息(因为它将不会安装在我的应用程序将运行的计算机上)。有没有免费的第三方库可以做到这一点?我想提取"发件人","收件人","抄送"和"密件抄送"字段。如果发送/接收日期字段也存储在MSG文件中,则可能会很好。

解决方案

回答

如果我们在文本编辑器中打开.MSG文件,我相信我们会发现所要获取的信息以纯文本格式存储在文件内。 (至少在我检查过的所有邮件上)

编写一些代码来分析文件以查找以" From:"或者" To:"等开头的行,然后提取所需的信息将是非常容易的。

如果我们还需要电子邮件的正文,则可能要复杂一些。

回答

Microsoft已记录以下文件:.MSG文件格式规范

回答

更新:我发现了一个名为Outlook Redemption的第三方COM库,目前对我来说运行良好。如果我们通过.NET中的COM-Interop使用它,则别忘了在使用完它后释放每个COM对象,否则应用程序将随机崩溃。

回答

这是一个"结构化存储"文档。我过去曾经成功使用Andrew Peace的代码来阅读这些内容,即使在.NET(使用C ++ / CLI)下,它也很干净而且很容易理解。基本上,我们需要找出所需的记录,并对其进行查询,因为不同版本的Outlook和不同类型的消息将导致不同的记录...

回答

在CodeProject上有可用的代码,可在不使用COM的情况下读取.msg文件。看这里。

回答

这是Huseyint发现的一些使用Outlook Redemption的示例VBA代码。

Public Sub ProcessMail()

   Dim Sess As RDOSession
   Dim myMsg As RDOMail
   Dim myString As String

   Set Sess = CreateObject("Redemption.RDOSession")
   Set myMsg = Sess.GetMessageFromMsgFile("C:\TestHarness\kmail.msg")

   myString = myMsg.Body
   myMsg.Body = Replace(myString, "8750", "XXXX")

   myMsg.Save

End Sub