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();
}
}
}
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.