代码之家  ›  专栏  ›  技术社区  ›  huseyint

从.msg文件读取[关闭]

  •  18
  • huseyint  · 技术社区  · 18 年前

    我需要阅读Outlook。中的MSG文件。导航战鉴定小组 没有 使用COM API for Outlook(因为它不会安装在我的应用程序将运行的计算机上)。有免费的第三方库可以做到这一点吗?我想提取“发件人”、“收件人”、“抄送”和“密件抄送”字段。如果发送/接收日期字段也存储在MSG文件中,则很好。

    7 回复  |  直到 18 年前
        1
  •  10
  •   Paul Batum    16 年前

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

        2
  •  9
  •   huseyint    18 年前

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

        3
  •  8
  •   Dmitry Streblechenko    10 年前

    以下是一些VBA代码示例 Outlook Redemption Huseyint发现的。

    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
    
        4
  •  6
  •   Shog9    17 年前

    微软对此进行了记录: .MSG File Format Specification

        5
  •  3
  •   Shog9    18 年前

    这是一份“结构化存储”文档。我已成功使用 Andrew Peace's code 在过去读这些,甚至在下面。NET(使用C++/CLI)-它很干净,很容易理解。基本上,你需要弄清楚你需要哪些记录,并查询这些记录——这有点麻烦,因为不同版本的Outlook和不同类型的邮件会产生不同的记录。..

        6
  •  1
  •   Martin Vobr    15 年前

    你可以试试我们的(商业) 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

        7
  •  0
  •   Jarod Elliott    18 年前

    如果你打开。在文本编辑器中的MSG文件中,我相信你会发现你想要的信息以纯文本形式存储在文件中。(至少在我检查过的所有消息上都有)

    编写一些代码来解析文件,查找以“From:”或“to:”等开头的行,然后提取所需的信息,这将非常容易。

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