Leggi da file .msg [chiuso]
Domanda
Devo leggere dal file .MSG di Outlook in .NET senza utilizzando COM API per Outlook (perché non verrà installato sui computer su cui verrà eseguita la mia app).Esistono librerie gratuite di terze parti per farlo?Voglio estrarre i campi Da, A, CC e BCC.I campi della data di invio/ricezione sarebbero utili se fossero archiviati anche nei file MSG.
Soluzione 2
Aggiornamento: Ho trovato una libreria COM di terze parti chiamata Riscatto di prospettiva che al momento mi sta funzionando bene.Se lo usi tramite COM-Interop in .NET, non dimenticare di rilasciare tutti gli oggetti COM una volta terminato, altrimenti l'applicazione si blocca in modo casuale.
Altri suggerimenti
Su CodeProject è disponibile del codice per leggere i file .msg senza COM.Vedere Qui.
Ecco alcuni esempi di codice VBA utilizzando Riscatto di prospettiva che Huseyint ha trovato.
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 ha documentato questo: Specifica del formato file .MSG
È un documento di "archiviazione strutturata".Ho usato con successo Il codice di Andrew Peace leggerli in passato, anche sotto .NET (usando C++/CLI): è pulito e abbastanza facile da capire.Fondamentalmente, devi capire quali record ti servono e interrogarli: diventa un po' complicato, dal momento che diverse versioni di Outlook e diversi tipi di messaggi daranno come risultato record diversi...
Puoi provare il nostro (commerciale) Rebex posta sicura biblioteca.Può leggere il formato MSG di Outlook.Il codice seguente mostra come:
// 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);
Maggiori informazioni sulle date di invio e ricezione e su come vengono rappresentate nel messaggio sono disponibili all'indirizzo http://forum.rebex.net/questions/816/extract-senttime-receivetime-and-time-zones
Se apri il file .MSG in un editor di testo, credo che scoprirai che le informazioni che stai cercando sono memorizzate come testo semplice all'interno del file.(Almeno è su tutti i messaggi che ho controllato)
Sarebbe abbastanza semplice scrivere del codice per analizzare il file alla ricerca di righe che iniziano con "Da:" o "A:" ecc.e quindi estrarre le informazioni necessarie.
Se hai bisogno anche del corpo dell'e-mail, potrebbe essere un po' più complicato.