Question

Je dois lire le fichier Outlook .MSG dans .NET sans en utilisant l'API COM pour Outlook (car elle ne sera pas installée sur les machines que mon application exécutera).Existe-t-il des bibliothèques tierces gratuites pour faire cela ?Je souhaite extraire les champs De, À, CC et BCC.Les champs de date d'envoi/de réception seraient utiles s'ils sont également stockés dans des fichiers MSG.

Était-ce utile?

La solution 2

Mise à jour: J'ai trouvé une bibliothèque COM tierce appelée Rédemption Outlook ce qui fonctionne bien pour moi en ce moment.Si vous l'utilisez via COM-Interop dans .NET, n'oubliez pas de publier chaque objet COM une fois que vous en avez terminé, sinon votre application plante de manière aléatoire.

Autres conseils

Il existe du code disponible sur CodeProject pour lire les fichiers .msg sans COM.Voir ici.

Voici un exemple de code VBA utilisant Rédemption Outlook que Huseyint a trouvé.

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 a documenté ceci : Spécification du format de fichier .MSG

Il s'agit d'un document "Stockage structuré".J'ai utilisé avec succès Code d'Andrew Peace pour les lire dans le passé, même sous .NET (en utilisant C++/CLI) - c'est propre et assez facile à comprendre.Fondamentalement, vous devez déterminer de quels enregistrements vous avez besoin et les rechercher - cela devient un peu compliqué, car différentes versions d'Outlook et différents types de messages entraîneront des enregistrements différents...

Vous pouvez essayer notre (commercial) Courrier sécurisé Rebex bibliothèque.Il peut lire le format MSG d'Outlook.Le code suivant montre comment :

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

Plus d'informations sur les dates d'envoi et de réception et sur la manière dont elles sont représentées dans le message peuvent être trouvées sur http://forum.rebex.net/questions/816/extract-senttime-receivetime-and-time-zones

Si vous ouvrez le fichier .MSG dans un éditeur de texte, je pense que vous constaterez que les informations que vous recherchez sont stockées sous forme de texte brut dans le fichier.(C'est au moins sur tous les messages que j'ai vérifiés)

Il serait assez facile d'écrire du code pour analyser le fichier à la recherche de lignes commençant par « De : » ou « À : », etc.puis extraire les informations dont vous avez besoin.

Si vous avez également besoin du corps de l’e-mail, cela peut être un peu plus compliqué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top