Fonction de lecture et de récupération des adresses d'expéditeurs dans des fichiers outlook express enregistrés sur le disqu

Contenu du snippet

FONCTION DE LECTURE ET DE RÉCUPÉRATION DES ADRESSES D'EXPÉDITEURS DANS DES FICHIERS OUTLOOK EXPRESS ENREGISTRÉS SUR LE DISQUE DUR
ce code est une fonction à implémenter dans votre code, elle est déjà incluse dans un namespace, donc vous n'avez plus qu'à la rajouter.

Source / Exemple :


namespace ProcessDirectoryNS
{
using System;
using System.IO;
using System.Collections;

//
// Classe d'enregistrement des noms d'expéditeurs contenus dans des mails.
// 
// Il est vivement conseillé de gérer les excéptions qui pourraient se produire
//
class CProcessExpMails
{

	// Récupère un nom de répertoire et parcourt, l'ensemble des fichiers
	// et sous-répertoire.
	public static void ProcessDirectory(string targetDirectory) 
	{
        string tampon="", emetteur="", mot=""; 
		SortedList expediteurs = new SortedList();
		int i0=0,i1=0,i2=0;
                			
		bool trouve, ignoreNext;

						
		// Parcourt récursif des sous-répertoires
		string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
		foreach(string subdirectory in subdirectoryEntries)
			ProcessDirectory(subdirectory);

				
		// Parcourt des tous les fichiers
		string [] fileEntries = Directory.GetFiles(targetDirectory);
		foreach(string fileName in fileEntries)
		{
			if(fileName.EndsWith(".eml"))
			{
				i0=i1=i2=0;
				emetteur="";
	
				// Recherche et sauvegarde des expéditeurs
				FileStream mail = new FileStream(fileName, FileMode.Open, FileAccess.Read);
				StreamReader srMail = new StreamReader(mail);
					
				trouve=false;
				while(!trouve)
				{
					tampon = srMail.ReadLine();
					tampon = tampon.ToLower();
					ignoreNext=false;
					mot="";

					/* recherche de from
					// si from:
						si Received préalablement => ignorer
						sinon
							fin de boucle => trouvé = true
					   si received:
							ignorer prochain from

  • /
for (int i=0; i!= tampon.Length; i++) { if(tampon[i]==' ') { mot=tampon.Substring(0,i); tampon=tampon.Remove(0,i); if(mot.Equals("from:")) { if(ignoreNext==false) { trouve=true; break; } ignoreNext = false; } else if(mot.Equals("received:")) { ignoreNext = true; } i=0; } } } srMail.Close(); mail.Close(); // extraction de l'adresse for(int i=0; i!= tampon.Length && tampon[i]!='@' ; i++) i0=i; i0++; if( i0 < tampon.Length) { for(int i=i0; i>=0 && !(tampon[i]=='<'||tampon[i]==' '); i--) i1=i; for(int i=i0+1; i!=tampon.Length && !(tampon[i]=='>'||tampon[i]==' ') ; i++) i2=i; i2++; emetteur=tampon.Substring(i1,i2-i1); } else emetteur="inconnu"; if (expediteurs.Contains(emetteur)) { i1=(int)expediteurs[emetteur]; expediteurs[emetteur]=i1+1; } else { expediteurs[emetteur]=(int)1; } } } // sauvegarde des résultats dans un fichier FileStream file = new FileStream(targetDirectory+"//resultat.csv", FileMode.Create, FileAccess.Write); StreamWriter sw = new StreamWriter(file, System.Text.Encoding.ASCII); // parcourt de la liste ordonnée et enregistrement foreach(DictionaryEntry exp in expediteurs) { sw.Write("{0};{1}\r\n",(string)exp.Key,(int)exp.Value); } sw.Close(); file.Close(); } } }

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.