从.msg文件中读取

时间:2008-08-19 08:07:28

标签: c# outlook email message msg

我需要从.NET 中读取Outlook .MSG文件而不使用使用COM API for Outlook(因为它不会安装在我的应用程序将运行的计算机上)。有没有免费的第三方图书馆呢?我想提取From,To,CC和BCC字段。如果发送/接收日期字段也存储在MSG文件中,则它们会很好。

7 个答案:

答案 0 :(得分:10)

CodeProject上有代码可用于读取没有COM的.msg文件。请参阅here

答案 1 :(得分:9)

更新:我找到了一个名为Outlook Redemption的第三方COM库,目前我的工作正常。如果您通过.NET中的COM-Interop使用它,请不要忘记在完成后释放每个COM对象,否则您的应用程序会随机崩溃。

答案 2 :(得分:8)

以下是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

答案 3 :(得分:6)

Microsoft已将此记录为:.MSG File Format Specification

答案 4 :(得分:3)

这是一个“结构化存储”文档。我已成功使用Andrew Peace's code来阅读这些内容,即使在.NET下(使用C ++ / CLI) - 它很干净且相当容易理解。基本上,你需要弄清楚你需要哪些记录,并查询那些 - 它有点毛茸茸,因为不同版本的Outlook和不同类型的消息会产生不同的记录......

答案 5 :(得分:1)

您可以尝试我们的(商业)Rebex Secure Mail库。它可以读取Outlook的MSG格式。以下代码显示了如何:

// Load message
MailMessage message = new MailMessage();
message.Load(@"c:\Temp\t\message.msg");

// show From, To and Sent date
Console.WriteLine("From: {0}", message.From);
Console.WriteLine("To: {0}", message.To);
Console.WriteLine("Sent: {0}", message.Date.LocalTime);

// find and try to parse the first 'Received' header
MailDateTime receivedDate = null;
string received = message.Headers.GetRaw("Received");
if (received != null)
{
    int lastSemicolon = received.LastIndexOf(';');
    if (lastSemicolon >= 0)
    {
        string rawDate = received.Substring(lastSemicolon + 1);
        MimeHeader header = new MimeHeader("Date", rawDate);
        receivedDate = header.Value as MailDateTime;
    }
}

// display the received date if available
if (receivedDate != null)
    Console.WriteLine("Received: {0}", receivedDate.LocalTime);

有关已发送和已接收日期的详细信息及其在消息中的显示方式,请访问http://forum.rebex.net/questions/816/extract-senttime-receivetime-and-time-zones

答案 6 :(得分:0)

如果您在文本编辑器中打开.MSG文件,我相信您会发现您所访问的信息以纯文本形式存储在文件中。 (这是我至少检查过的所有信息)

编写一些代码可以很容易地解析文件,查找以“From:”或“To:”等开头的行,然后提取所需的信息。

如果您还需要电子邮件的正文,那可能会有点复杂。