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?
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.
LumiSoft comprend un analyseur MIME .
Sasa inclut également un analyseur Mime.
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):
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.
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)
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;
}
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.
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
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");
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
.)
Essayer:
Écrivez un programme:
Solutions de contournement:
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.