web-dev-qa-db-fra.com

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

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

42
adeel825

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

Le CDO COM DLL fait partie de Windows/IIS et peut être référencé dans .net. Il fournira une analyse précise et un modèle d'objet Nice. Utilisez-le 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;
}

- Ajouté en août 2017: consultez également MimeKit: https://github.com/jstedfast/MimeKit . Il prend en charge .Netstandard, il fonctionnera donc sur plusieurs plates-formes.

62
Ries Vriend

LumiSoft comprend un analyseur MIME .

Sasa inclut également un analyseur Mime.

11

Suivez ce lien pour une bonne solution:

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

  1. Ajoutez une référence à "Microsoft CDO pour la bibliothèque Windows 2000", qui se trouve sous l'onglet "COM" dans la boîte de dialogue "Ajouter une référence" 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 -> Définissez 'Embed Interop Types' sur False et répétez 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'il renvoie aura toutes les informations analysées dont vous avez besoin, y compris To, From, Subject, Body.

9
Sujeewa

Ce dont vous avez probablement besoin, c'est d'un analyseur email/MIME. Analyser tout le champ d'en-tête n'est pas très difficile, mais séparer différents types MIME comme les images, les pièces jointes, les différentes parties de texte et html, etc. peut devenir très complexe.

Nous utilisons un outil tiers, mais il existe de nombreux outils/bibliothèques C #. Recherchez un analyseur MIME de messagerie C # gratuit dans Google. Comme si j'avais celui-ci:

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

4
Samuel

Obtenir un analyseur MIME décent serait probablement un moyen d'aller. Vous pouvez essayer d'utiliser un analyseur MIME gratuit (tel que celui-ci de codeproject) mais les commentaires de l'auteur du code comme celui-ci

J'ai travaillé à ce sujet à peu près au même moment que j'ai travaillé sur une classe wrapper pour les fichiers MSG. Grande différence de difficulté. Où la classe wrapper EML a peut-être pris un jour pour lire la spécification et aller droit , la classe wrapper MSG a pris une semaine.

m'a rendu curieux de la qualité du code. Je suis sûr que vous pouvez pirater un analyseur mime qui analyse correctement 95% des e-mails en quelques jours/heures. Je suis également sûr qu'obtenir les 5% restants prendra des mois. Pensez à gérer S/MIME (e-mail crypté et signé), unicode, les e-mails mal formés produits par des clients et serveurs de messagerie qui se comportent mal, plusieurs schémas de codage, des problèmes d'internationalisation, en veillant à ce que les e-mails intentionnellement malformés ne plantent pas votre application, etc.

Si les e-mails que vous devez analyser proviennent d'une seule source, l'analyseur rapide et sale peut suffire. Si vous avez besoin d'analyser les e-mails de la nature, une meilleure solution pourrait être nécessaire.

Je recommanderais notre composant Rebex Secure Mail , mais je suis sûr que vous obtenez également un résultat décent avec les composants d'autres fournisseurs.

S'assurer que l'analyseur de votre choix fonctionne correctement sur le tristement célèbre "Mime Torture Sample message" préparé par Mike Crispin (co-auteur des RFC MIME et IMAP). le message de test est affiché dans l'exemple MIME Explorer et peut être téléchargé dans le package d'installation.

Le code suivant montre comment lire et analyser un fichier EML:

using Rebex.Mail;

MailMessage message = new MailMessage();
message.Load("file.eml");
4
Martin Vobr

Je viens de commencer à utiliser la partie Mime de Papercut pour cela. Cela semble décent et simple à première vue.

    public void ProcessRawContents(string raw)
    {
        // NB: empty lines may be relevant for interpretation and for content !!
        var lRawLines = raw.Split(new []{"\r\n"}, StringSplitOptions.None);
        var lMailReader = new MimeReader(lRawLines);
        var lMimeEntity = lMailReader.CreateMimeEntity();
        MailMessageEx Email = lMimeEntity.ToMailMessageEx();
        // ...
    }

(MailMessageEx est, bien sûr, dérivé de MailMessage.)

3
Yahoo Serious

Essayer:

  • febootimail
  • SmtpExpress
  • LinkWS Newsletter Turbo
  • emlBridge - importation de fichiers eml dans Outlook et pratiquement tout autre client de messagerie
  • Newsletter 2.1 Turbo
  • ThunderStor (emlResender)
  • Ruby (en utilisant eml2mbox ). Voir méthode jimbob .
  • Evolution - créez un nouveau message, joignez le fichier eml,

Écrivez un programme:

Solutions de contournement:

  • $ cat mail.eml | mail -s -c Mais les en-têtes ne seront pas analysés, ni les pièces jointes.
  • déposez-les dans votre GMail (Firefox les enregistrera en tant que pièces jointes)
2
kenorb

Aspose.Email pour .NET

Aspose.Email pour .NET est une collection de composants pour travailler avec des e-mails à partir de vos applications .NET. Il facilite le travail avec un certain nombre de formats de messages électroniques et de fichiers de stockage de messages (PST/OST) ainsi que des capacités d'envoi et de réception de messages.

Aspose.Email facilite la création, la lecture et la manipulation d'un certain nombre de formats de messages tels que MSG, [~ # ~] eml [~ # ~], les fichiers EMLX et MHT sans avoir besoin d'installer Microsoft Outlook. Vous pouvez non seulement modifier le contenu du message, mais également manipuler (ajouter, extraire et supprimer) les pièces jointes d'un objet de message. Vous pouvez personnaliser les en-têtes de message en ajoutant ou en supprimant des destinataires, en modifiant l'objet ou d'autres propriétés. Il vous donne également un contrôle total sur un e-mail en donnant accès à ses propriétés Mapi.

C # Outlook MSG lecteur de fichiers sans avoir besoin d'Outlook

MSGReader est une bibliothèque C # .NET 4.0 pour lire les fichiers Outlook MSG et EML (Mime 1.0). Presque tous les objets courants dans Outlook sont pris en charge.

2
ofthelit