47 votes

Recommandations sur l'analyse des fichiers .eml en C#

J'ai un répertoire de fichiers .eml qui contiennent des conversations par courriel. Existe-t-il une approche recommandée en C# pour analyser des fichiers de ce type ?

67voto

Ries Vriend Points 361

Ajouté en août 2017 : Découvrez MimeKit : https://github.com/jstedfast/MimeKit . Il prend en charge la norme .NET et fonctionne donc sur plusieurs plates-formes.

Réponse originale : J'ai posté un exemple de projet pour illustrer cette réponse à Github

La DLL COM CDO fait partie de Windows/IIS et peut être référencée dans .net. Elle fournit une analyse syntaxique précise et un modèle d'objet agréable. Utilisez-la en conjonction avec une référence à ADODB.DLL.

public CDO.Message LoadEmlFromFile(String emlFileName)
{
    CDO.Message msg = new CDO.MessageClass();
    ADODB.Stream stream = new ADODB.StreamClass();

    stream.Open(Type.Missing, ADODB.ConnectModeEnum.adModeUnknown, ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified, String.Empty, String.Empty);
    stream.LoadFromFile(emlFileName);
    stream.Flush();
    msg.DataSource.OpenObject(stream, "_Stream");
    msg.DataSource.Save();

    stream.Close();
    return msg;
}

1 votes

Ries, j'ai cherché une solution toute la journée, j'ai trouvé beaucoup de parsers et de bibliothèques .net qui fonctionnent partiellement. La bibliothèque Windows que vous avez suggérée fonctionne à 100%. Cette réponse devrait être en première place et au-dessus des autres.

0 votes

Avez-vous été en mesure de l'utiliser à partir d'une application 64 bits ? Où avez-vous référencé la DLL ?

0 votes

J'ai pu utiliser cette solution sur Windows 2008 Standard R2, malheureusement elle ne fonctionne pas sur Windows 2008 Standard (pas R2). Elle pose également de nombreux problèmes de compatibilité avec Windows 2008 ou Windows 7.

12voto

Sujeewa Points 151

Suivez ce lien pour trouver une bonne solution :

Le résumé de l'article est en 4 étapes (la deuxième étape ci-dessous est absente de l'article mais nécessaire) :

  1. Ajoutez une référence à "Microsoft CDO for Windows 2000 Library", qui se trouve dans l'onglet "COM" de la boîte de dialogue "Add reference" de Visual Studio. Cela ajoutera 2 références à "ADODB" et "CDO" dans votre projet.

  2. Désactiver l'incorporation des types Interop pour les 2 références "ADODB" et "CDO". (Références -> ADODB -> Propriétés -> Mettre 'Embed Interop Types' à False et répéter la même chose pour CDO)

  3. Ajoutez la méthode suivante dans votre code :

    protected CDO.Message ReadMessage(String emlFileName)
    {
        CDO.Message msg = new CDO.MessageClass();
        ADODB.Stream stream = new ADODB.StreamClass();
        stream.Open(Type.Missing, 
                       ADODB.ConnectModeEnum.adModeUnknown, 
                       ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified,                                                                         
                       String.Empty, 
                       String.Empty);
        stream.LoadFromFile(emlFileName);
        stream.Flush();
        msg.DataSource.OpenObject(stream, "_Stream");
        msg.DataSource.Save();
        return msg;
    }
  4. Appelez cette méthode en passant le chemin complet de votre fichier eml et l'objet CDO.Message qu'elle renvoie contiendra toutes les informations analysées dont vous avez besoin, notamment To, From, Subject, Body.

0 votes

Peut-on également faire passer la pièce jointe incluse dans EML ?

11voto

Mauricio Scheffer Points 70470

LumiSoft comprend un Analyseur Mime .

Sasa comprend également un analyseur Mime.

5 votes

Usage de référence au cas où quelqu'un chercherait : github.com/fschwiet/ManyConsole/blob/master/SampleConsole/

3 votes

4voto

Samuel Points 676

Ce dont vous avez probablement besoin est un analyseur syntaxique email/MIME. L'analyse de tous les champs d'en-tête n'est pas très difficile, mais la séparation des différents types MIME comme les images, les pièces jointes, les différentes parties de texte et de html, etc. peut devenir très complexe.

Nous utilisons un outil tiers, mais il existe de nombreux outils/librairies C#. Cherchez un analyseur MIME C# gratuit dans Google. Par exemple, j'ai trouvé celui-ci :

http://www.codeproject.com/Articles/11882/Advanced-MIME-Parser-Creator-Editor http://www.lumisoft.ee/lswww/download/downloads/Net/info.txt

2voto

Praveen Angyan Points 6232

Voici un lien CodeProject qui fournit une enveloppe simple : http://www.codeproject.com/KB/office/EML_Reader.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X