Ich muss aus Outlook MSG-Datei in .NET ohne mit COM-API für Outlook lesen (weil es nicht auf den Computern installiert wird, die meine App ausgeführt wird). Gibt es dafür kostenlose Bibliotheken von Drittanbietern? Ich möchte From, To, CC und BCC Felder extrahieren. Gesendet/Empfängt Datum Felder wäre gut, wenn sie auch in MSG-Dateien gespeichert sind.Lesen von MSG-Dateien
Antwort
Update: Ich habe eine 3rd-Party-COM-Bibliothek gefunden Outlook Redemption genannt, die für mich arbeitet gut im Moment. Wenn Sie es über COM-Interop in .NET verwenden, vergessen Sie nicht, jedes COM-Objekt freizugeben, nachdem Sie damit fertig sind, andernfalls stürzt Ihre Anwendung zufällig ab.
Wenn Sie die .MSG-Datei in einem Texteditor öffnen, werden Sie feststellen, dass die Informationen, die Sie suchen, als einfacher Text in der Datei gespeichert werden. (Es ist auf allen Nachrichten, die ich mindestens überprüft habe)
Es wäre ziemlich einfach, etwas Code zu schreiben, um die Datei auf der Suche nach Zeilen beginnend mit "From:" oder "To:" etc. und dann extrahieren die Informationen, die Sie brauchen.
Wenn Sie auch den Text der E-Mail benötigen, kann das etwas komplizierter sein.
finden ich, das ist EML-Dateien glauben .MSG binär sind –
Sie sind, aber Er hat Recht. Probieren Sie es aus und sehen Sie selbst – rotard
Microsoft hat dies dokumentiert: .MSG File Format Specification
Danke und ugh ... das ist ein bisschen mehr als ich wollte in :-P –
Es ist ein "strukturiertes Speicher" Dokument. Ich habe erfolgreich Andrew Peace's code verwendet, um diese in der Vergangenheit zu lesen, sogar unter .NET (mit C++/CLI) - es ist sauber und ziemlich einfach zu verstehen. Im Grunde müssen Sie herausfinden, welche Datensätze Sie benötigen, und für diese abfragen - es wird ein bisschen haarig, da verschiedene Versionen von Outlook und verschiedene Arten von Nachrichten zu unterschiedlichen Datensätzen führen ...
Es gibt Code vorhanden in CodeProject zum Lesen von MSG-Dateien ohne COM. Siehe here.
es ist nicht schlecht (seine freie & Open Source!), Aber unterstützt keine der Datumsfelder auf einer msg (noch) –
Mit einer leichten Änderung kann dies auch Anhänge speichern (im Moment zeigt es nur, ob es welche gibt, und die Größe). –
@Steve ein Kommentator teilte die Anweisungen zum Abrufen des Sende-/Empfangsdatums hier: http://www.codeproject.com/Articles/32899/Reading-an-Outlook-MSG-File-in-C?msg=2932319#xx2932319xx (bis zum Ende scrollen) – Ciaran
Hier ist ein Beispiel VBA-Code mit 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
Sie können unsere (kommerzielle) Rebex Secure Mail Bibliothek versuchen. Es kann Outlook MSG-Format lesen. 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 Informationen zu gesendeten und empfangenen Termine und wie werden sie in der Nachricht dargestellt wird, kann bei http://forum.rebex.net/questions/816/extract-senttime-receivetime-and-time-zones
wow, ich habe es einfach versucht und es ist super einfach zu bedienen. Ich füge eine Antwort mit einem Test-Kabelbaum-Code hinzu. – Knox