Je dois lire à partir du fichier .MSG Outlook dans .NET sans en utilisant COM API pour Outlook (car il ne sera pas installé sur les machines que mon application va exécuter). Existe-t-il des bibliothèques tierces gratuites pour le faire? Je veux extraire les champs De, To, CC et BCC. Les champs de date d'envoi/réception seraient bons s'ils sont également stockés dans des fichiers MSG.Lire à partir de fichiers .msg
Répondre
Mise à jour: J'ai trouvé une bibliothèque 3ème partie COM appelé Outlook Redemption qui fonctionne très bien pour moi en ce moment. Si vous l'utilisez via COM-Interop dans .NET, n'oubliez pas de libérer chaque objet COM une fois que vous avez terminé, sinon votre application se bloque aléatoirement.
Si vous ouvrez le fichier .MSG dans un éditeur de texte, je crois que vous trouverez que les informations que vous recherchez sont stockées sous forme de texte dans le fichier. (Il est sur tous les messages que j'ai vérifié au moins)
Il serait assez facile d'écrire du code pour analyser le fichier à la recherche de lignes commençant par "De:" ou "À:", etc., puis extraire le informations dont vous avez besoin.
Si vous avez également besoin du corps de l'e-mail, cela peut être un peu plus compliqué.
Je crois que les fichiers binaires sont des thats .msg –
Ils sont, mais il a raison. Essayez et voyez par vous-même – rotard
Microsoft a documenté ceci: .MSG File Format Specification
merci et pouah ... c'est un peu plus que je voulais mordre :-P –
C'est un document "Structured Storage". J'ai utilisé avec succès Andrew Peace's code 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 quels disques vous avez besoin, et rechercher pour ceux - il devient un peu poilu, puisque différentes versions d'Outlook et différents types de messages se traduiront par différents enregistrements ...
Il y a code disponible sur CodeProject pour lire les fichiers .msg sans COM. Voir here.
c'est pas mal (c'est gratuit et open source!) Mais ne supporte pas les champs de date sur un msg (encore) –
Avec une légère modification cela peut également enregistrer des pièces jointes (pour le moment il affiche simplement s'il y en a, et Taille). –
@Steve un commentateur partagé les instructions pour obtenir la date d'envoi/reçu ici: http://www.codeproject.com/Articles/32899/Reading-an-Outlook-MSG-File-in-C?msg=2932319#xx2932319xx (faites défiler jusqu'à la fin) – Ciaran
Voici un exemple de code VBA utilisant Outlook Redemption 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
Vous pouvez essayer notre bibliothèque (commerciale) Rebex Secure Mail. Il peut lire le format Outlook MSG. 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 reçus et envoyés et comment sont-ils représentés dans le message peut être trouvé à http://forum.rebex.net/questions/816/extract-senttime-receivetime-and-time-zones
wow, je viens de faire un essai et c'est super facile à utiliser. Je vais ajouter une réponse avec un peu de code de harnais de test. – Knox