18

我需要在.NET 中读取 Outlook .MSG 文件,而不使用 COM API for Outlook(因为它不会安装在我的应用程序将运行的机器上)。有没有免费的第三方库可以做到这一点?我想提取 From、To、CC 和 BCC 字段。如果它们也存储在 MSG 文件中,发送/接收日期字段会很好。

4

7 回答 7

10

CodeProject 上有代码可用于在没有 COM 的情况下读取 .msg 文件。见这里

于 2009-10-22T22:27:30.893 回答
9

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

于 2008-08-21T13:27:06.583 回答
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
于 2010-03-02T18:35:56.820 回答
6

Microsoft 对此进行了记录:.MSG 文件格式规范

于 2008-08-19T20:45:55.757 回答
3

这是一个“结构化存储”文档。过去,我已经成功地使用Andrew Peace 的代码来阅读这些内容,即使在 .NET(使用 C++/CLI)下也是如此——它干净且相当容易理解。基本上,您需要弄清楚您需要哪些记录,并查询这些记录 - 它有点麻烦,因为不同版本的 Outlook 和不同类型的消息会导致不同的记录......

于 2008-08-21T18:25:08.303 回答
1

您可以尝试我们的(商业)Rebex Secure Mail库。它可以读取 Outlooks 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

于 2011-04-07T14:08:30.557 回答
0

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

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

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

于 2008-08-19T08:24:37.440 回答