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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top