Frage

Ich brauche zum Lesen von Outlook .MSG-Datei in .NET ohne die Verwendung von COM-API für Outlook (cos es wird nicht installiert werden auf die Maschinen, in denen meine app ausgeführt wird).Gibt es Kostenlose 3rd-party-Bibliotheken zu tun?Ich möchte extrahieren Von, An, CC und BCC-Felder.Gesendet/Empfangen Datum Feldern wäre gut, wenn Sie auch gespeichert in MSG-Dateien.

War es hilfreich?

Lösung 2

Update: Ich habe eine 3rd-party-COM-Bibliothek genannt Outlook Redemption das ist in Ordnung für mich im moment.Wenn Sie es verwenden, über COM-Interop in .NET, vergessen Sie nicht, lassen Sie jeden COM-Objekt, nachdem Sie fertig sind mit es, sonst wird Ihre Anwendung stürzt ab, nach dem Zufallsprinzip.

Andere Tipps

Es ist der code, verfügbar auf CodeProject für das Lesen .msg-Dateien ohne COM.Finden hier.

Hier einige Beispiel-VBA-code verwenden Outlook Redemption dass Huseyint gefunden.

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

Microsoft dokumentiert dies: .MSG-Datei-Format-Spezifikation

Es ist eine "Strukturierte Ablage" - Dokument.Ich habe erfolgreich verwendet Andrew Frieden code diese zu Lesen in der Vergangenheit, auch unter .NETTO - (mit C++/CLI) - es ist sauber und Recht einfach zu verstehen.Grundsätzlich müssen Sie herausfinden, welche Datensätze Sie benötigen, und die Abfrage für diejenigen, die - es wird ein wenig haarig werden, da verschiedene Versionen von Outlook und verschiedene Arten von Nachrichten werden Ergebnis in verschiedenen Platten...

Sie können versuchen, unsere (gewerblichen) Rebex Secure Mail Bibliothek.Es kann Lesen Anschauungen MSG-format.Folgende code zeigt, wie:

// 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);

Mehr info auf Gesendeten und Empfangenen Daten und wie werden Sie dargestellt in der Nachricht finden Sie unter http://forum.rebex.net/questions/816/extract-senttime-receivetime-and-time-zones

Wenn Sie öffnen die .MSG-Datei in einem text-editor, ich glaube, Sie werden feststellen, dass die Informationen ist als nur-text gespeichert in der Datei.(Es ist auf alle Nachrichten habe ich überprüft mindestens)

Es wäre ziemlich einfach, code zu schreiben, die zum analysieren der Datei nach Zeilen, beginnend mit "From:" oder "To:" - etc.und dann extrahieren Sie die Informationen, die Sie benötigen.

Wenn Sie benötigen die Körper der E-Mail als gut, das mag ein wenig komplizierter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top