Dbx2Txt : Convertir un fichier Dbx (Outlook Express) en Txt

www.vbfrance.com/code.aspx?ID=41883

Documentation : Dbx2Txt.html

Code source : Dbx2Txt.vbproj.html

Par Patrice Dargenton : patrice.dargenton@free.fr

http://patrice.dargenton.free.fr/CodesSources/index.html

 

Version 1.03 du 26/01/2008

 

Table des matières

Description. 1

Objectifs. 2

Fonctionnalités. 2

Extraire les sujets (ES) 2

Extraire les entêtes (EE) 2

Extraire le contenu (EC) 2

Extraire le contenu Html (EH) 2

Extraire les pièces jointes (EPJ) 2

Extraire tout (ET) 2

Extraire un courriel (EM) 2

Analyser les champs des entêtes (AC) 2

Analyser les valeurs possibles d'un champ (AVC) 2

Exporter les entêtes en Csv (ECSV) 2

Exporter les entêtes numériques en Csv (ENCSV) 2

Exemple d'analyse des valeurs d'un champ. 3

Exporter un courriel au format .eml 3

Comment faire de l'analyse statistique sous Excel ?. 3

Créer un fichier dsn (DataSourceName) 3

Créer un nouveau classeur Excel 4

Créer une liaison vers le fichier Dbx2Txt.csv. 4

Analyse statistique et décisionnel sous Excel 4

Champs fréquents. 5

Limitations. 5

Reste à faire. 5

Décodage des sujets des courriels. 5

Extraction html et des pièces jointes. 5

Détection des courriels non lus. 6

Historique des versions. 6

Version 1.03 du 26/01/2008. 6

Version 1.02 du 23/08/2007. 6

Version 1.01 du 09/04/2007. 6

Première version 0.1 du 18/03/2007. 6

Liens. 6

Extracteurs d'adresse de courriel 7

Extracteurs de courriel 7

 

 

Description

 

Comme son nom l'indique, cette source permet de lire un fichier dbx (un dossier Outlook Express) et d'en extraire un fichier texte contenant la liste des sujets des courriels, ainsi qu'un autre fichier contenant le détail des courriels.

 

D'après la source :

www.leapsecond.com/tools/dbx2txt.c

www.leapsecond.com/tools/dbx2txt.exe

 

 

Objectifs

 

Utilisation possible : ce projet va servir de base à un logiciel AntiSpam (dans un premier temps un logiciel pour détecter les faux-positifs obtenus par un AntiSpam payant) ainsi qu'un logiciel pour indexer les courriels.

 

Fonctionnalités

 

Une fois sélectionnée la base de courriels au format .dbx (Outlook Express), voici les menus proposés pour les différentes extractions vers un fichier texte unique :

 

Extraire les sujets (ES)

Ce menu sert à connaître la liste numérotée des sujets des courriels, ce qui permet d'en extraire un par son numéro. Exemple :

Msg 444/469 20/08/2007 08:53 [CodeS-SourceS du 19/08/2007]

Note : certains sujets sont encodés dans un format non encore traité.

 

Extraire les entêtes (EE)

Extraire les entêtes des courriels.

 

Extraire le contenu (EC)

Extraire le contenu des courriels, sauf html, et sans les pièces jointes.

 

Extraire le contenu Html (EH)

Extraire le contenu (y-compris Html) des courriels (décodage à finir : il ne suffit pas d'extraire la partie html pour obtenir un fichier html compatible avec un navigateur). Voir cependant l'export d'un courriel .eml.

 

Extraire les pièces jointes (EPJ)

Extraire les pièces jointes des courriels (reste à faire). Voir cependant l'export d'un courriel .eml.

 

Extraire tout (ET)

Convertir le fichier dbx en fichier texte (mais reste décodage html, sinon ce n'est pas très utile).

 

Extraire un courriel (EM)

Extraire un courriel par son numéro. Pour connaître son n°, extraire d'abord la liste numérotée des sujets. Voir aussi l'export d'un courriel .eml.

 

Analyser les champs des entêtes (AC)

Analyser les champs des entêtes. Voir le résultat : Champs fréquents.

 

Analyser les valeurs possibles d'un champ (AVC)

Analyser les valeurs possibles d'un champ. Voir l'exemple ci-dessous.

 

Exporter les entêtes en Csv (ECSV)

Exporter les entêtes des courriels dans un fichier csv (49 colonnes extraites pour faire des statistiques sous Excel).

 

Exporter les entêtes numériques en Csv (ENCSV)

Exporter les entêtes numériques des courriels dans un fichier csv (14 colonnes numériques extraites pour tenter de faire un apprentissage via un réseau de neurones ou bien un système expert).

Pour pouvoir coder en numérique la valeur des champs, il faut connaître la liste des valeurs possibles, ce qui n'est adapté qu'aux champs pour lesquels il n'y a qu'un petit nombre de valeurs possibles. On peut aussi ne conserver que les valeurs les plus fréquentes via une liste établie à l'avance, comme c'est le cas pour l'exemple suivant :

 

Exemple d'analyse des valeurs d'un champ

Voici un exemple du codage du champ charset (c'est un sous-champ figurant parfois dans le champ Content-Type:), d'abord on analyse toutes les valeurs possibles (bUtiliserCodageAutre = false) :

Nom du champ à analyser : [charset=]

                                 NbOccurr.       % Occurr.

[Absent]                    8293                53.19%

iso-8859-1                5251                33.68%

us-ascii                      1914                12.28%

utf-8                          82                    0.53%

windows-1251          18                    0.12%

windows-1252          17                    0.11%

iso-8859-2                7                      0.04%

windows-1255          2                      0.01%

koi8-r                        2                      0.01%

big5                           2                      0.01%

ks_c_5601-1987      1                      0.01%

windows-1250          1                      0.01%

 

Ensuite on ne va coder que les charsets les plus fréquents (bUtiliserCodageAutre = true) :

                                 NbOccurr.       % Occurr.

0 : [Absent]               8293                53.19%

1 : iso-8859-1           5251                33.68%

2 : us-ascii                 1914                12.28%

3 : utf-8                     82                    0.53%

4 : windows-1251     18                    0.12%

5 : windows-1252     17                    0.11%

6 : [Autre]

 

 

Exporter un courriel au format .eml

Si on extrait le contenu du courriel en entier que l'on stocke dans un fichier texte, et qu'on renomme celui-ci en fichier .eml, alors Outlook Express peut l'ouvrir et on peut faire un copié/collé du contenu html, et extraire les pièces jointes, le cas échéant.

 

 

Comment faire de l'analyse statistique sous Excel ?

 

Voici comment faire de l'analyse statistique de façon pratique sous Excel : cette procédure permet d'actualiser en un clic des données importées sous Excel à partir d'un fichier csv. La seule contrainte est que le lien depuis le classeur Excel vers le fichier csv ne peut être relatif, il doit être un chemin complet, nous allons donc choisir C:\Program Files\Dbx2Txt\Export\Dbx2Txt.csv une fois pour toute, ce qui permettra de tester sur une autre machine sans avoir à changer ce lien. Vous n'avez donc pas besoin de refaire cette procédure si vous avez dézippé Dbx2Txt dans ce dossier C:\Program Files\Dbx2Txt\, mais voici tout de même comment j'ai procédé :

 

Créer un fichier dsn (DataSourceName)

Ce fichier dsn doit être situé dans C:\Program Files\Dbx2Txt\Dbx2Txt.dsn et avoir le contenu suivant (ce fichier est déjà créé dans Dbx2Txt) :

 

[ODBC]

DRIVER=Microsoft Text Driver (*.txt; *.csv)

UID=admin

UserCommitSync=Yes

Threads=3

SafeTransactions=0

PageTimeout=5

MaxScanRows=8

MaxBufferSize=2048

FIL=text

DriverId=27

DefaultDir=.\Export

DBQ=

 

Créer un nouveau classeur Excel

Créer un nouveau classeur Excel et sauver le en html dans le dossier C:\Program Files\Dbx2Txt\Export\Dbx2Txt.html

Le format html à l'avantage d'être adapté à une publication directe. Si vous avez besoin de faire des graphiques ou bien des tableaux croisés dynamiques, alors conserver le format .xls.

Pour ouvrir le classeur html sous Excel, utiliser le menu contextuel Editer et non Ouvrir.

 

Créer une liaison vers le fichier Dbx2Txt.csv

Sous Excel, créer une liaison en faisant Menu Données : Données externes : Créer une requête... : Parcourir... : C:\Program Files\Dbx2Txt\Dbx2Txt.dsn : OK : Sélectionner tous les champs de Dbx2Txt.csv : Suivant : Suivant : Suivant : Terminer : OK pour coller la liaison en A1.

Ensuite bouton droit : Propriété de la plage de données... : décocher "Ajuster largeur des colonnes".

Ensuite sélectionner toutes les cellules : largeur colonne : 15, puis sauver le classeur.

 

Analyse statistique et décisionnel sous Excel

Excel (versions < à 2007) est limité à 65000 lignes, cependant vous pouvez créer des tableaux croisés dynamiques dont la source des données, elle, peut dépasser cette limite, c'est pour cette raison qu'on passe par un fichier .csv (qui est illimité).

Si vous avez besoin de faire des filtres personnalisés, vous pourriez utiliser l'éditeur de requêtes d'Excel, mais c'est plus un outil d'informaticien qu'un outil décisionnel pour les décideurs opérationnels : dans ce cas, il est plus simple de régénérer le fichier csv selon les filtres voulues (par exemple un filtre par date de début et date de fin) puis de réactualiser les données sous Excel (il n'est pas nécessaire de fermer le classeur Excel pour cela).

Vous pouvez créer plusieurs tableaux croisés dynamiques, dans ce cas, il est possible d'utiliser un menu permettant de mettre à jour toutes les feuilles du classeur Excel d'un coup, mais ce menu est caché par défaut : voici comment le faire apparaître dans le menu standard des tableaux croisés dynamiques : Personnaliser les menus Excel : Onglet Commandes : Menu Données : Faire glisser le menu "Actualiser Tout" dans la barre des menus des tableaux croisés dynamiques.

 

Notes :

- Vous ne pouvez pas créer une macro pour refaire entièrement la procédure, car les chemins ne sont pas en relatif, et les champs de la requête sont tous spécifiés explicitement (au lieu de Select * From Dbx2Txt). Il faut donc la refaire à chaque fois par, exemple, qu'un champ est ajouté dans le fichier csv ;

- Si vous voulez utiliser l'enregistreur de macro afin de récupérer des exemples de code source généré automatiquement (ce qui est indispensable pour comprendre la structure excessivement complexe des paramètres à fournir par exemple pour mettre à jour un tableau croisé dynamique selon un chemin absolu, mais ajustable par le code), alors le problème suivant survient : l'enregistreur de macro verrouille le fichier csv, et le T.C.Dyn. ne peut être mis à jour : dans ce cas, ignorer simplement l'erreur en poursuivant la manipulation du T.C.Dyn., et à la fin on obtient bien le code source.

 

 

Champs fréquents

 

Voici la liste des champs les plus fréquents que l'on rencontre dans les entêtes de courriels (et aussi dans les spams uniquement, en colonne 4), sur la base d'une analyse statistique de 30 000 courriels depuis 1997 et 40 000 spams depuis 2004 :

 

Champ

NbCourriel

%Courriel

%Spam

From:

29133

99.93%

99.27%

Date:

29071

99.72%

96.84%

Subject:

28980

99.41%

99.57%

To:

28809

98.82%

98.29%

Received:

28733

98.56%

99.97%

Message-ID:

28540

97.90%

79.32%

X-Mimeole:

25332

86.89%

82.12%

X-Priority:

25100

86.10%

84.69%

X-MSMail-Priority:

24911

85.45%

80.70%

Content-Type:

24684

84.67%

90.21%

MIME-Version:

24665

84.61%

88.75%

Return-Path:

23564

80.83%

99.97%

Content-Transfer-Encoding:

16381

56.19%

47.59%

X-Mailer:

13785

47.29%

37.17%

Delivered-To:

13493

46.28%

88.75%

Reply-To:

8227

28.22%

25.39%

X-OriginalArrivalTime:

5474

18.78%

0.63%

Status:

3898

13.37%

0.75%

Content-Length:

3390

11.63%

0.01%

Importance:

3118

10.70%

5.31%

Sender:

2900

9.95%

3.53%

thread-index:

2507

8.60%

3.44%

Content-Class:

2297

7.88%

1.03%

Organization:

2201

7.55%

0.86%

 

 

Limitations

 

Dbx2Txt ne gère pas les fichiers dbx des news (forum de discussion).

 

 

Reste à faire

 

Décodage des sujets des courriels

Le décodage des sujets n'est pas terminé : il reste les accents, et parfois la totalité du sujet est encodée.

 

Extraction html et des pièces jointes

L'extraction html ne fonctionne pas encore, il reste à traiter l'encodage de certain caractère. Voir cependant l'export d'un courriel .eml.

 

Détection des courriels non lus

Il y a un flag (drapeau ou indicateur) qui correspond assez bien avec l'indicateur lu ou non lu dans OutLook Express, mais malheureusement, celui-ci ne suffit pas, car certains courriels sont ainsi détectés comme non lu alors que ce n'est pas le cas (voir le code source, le codage de ce champ doit être un peu particulier).

 

 

Historique des versions

 

Version 1.03 du 26/01/2008

clsDbx : champs ajoutés : sDomaineDest, sDomaineDestFAI, sDestinataireNom, sDestinataireCourriel et bDomaineExpDestIdem, et les fichiers .csv ont été complétés ;

- Gestion des menus contextuels par le code, via la clé ClasseRoot et non plus ClasseLocalMachine ;

- Exemple de dbx : Boite de reception.dbx.

 

Version 1.02 du 23/08/2007

- Interface pour choisir un fichier dbx et pour les menus : plusieurs types d'extraction, gestion des arguments en ligne de commande, gestion des menus contextuels ;

- Extraction d'un courriel par son numéro (n° arbitraire : d'abord lister les sujets des courriels pour avoir les n°) ;

- Extraction des champs standards des courriels, et génération d'un fichier csv ;

- Classe réutilisable pour gérer un fichier dbx ;

- Gestion du fichier dbx verrouillé par Outlook Express : dans ce cas, une copie temporaire est faite automatiquement ;

- Correction de plusieurs bugs lors de l'extraction des champs, notamment lorsque le nom d'un champ est à cheval sur deux blocs de données.

 

Version 1.01 du 09/04/2007

Le décodage ISO des sujets est assez sommaire (les lettres accentuées sont purement supprimées). Le décodage des pièces jointes n'est pas fait, cf. la fonction FromBase64String de DotNet2.

 

Première version 0.1 du 18/03/2007

 

 

Liens

 

- RFC 2822 - Internet Message Format : Entêtes de courriel officiels

  www.faqs.org/rfcs/rfc2822.html

DomainKeys Identified Mail (DKIM) Signatures

  www.ietf.org/rfc/rfc4871.txt

 

- Enlever les accents : passer par l'iso-8859-8

  www.codeproject.com/useritems/EncodingAccents.asp

http://fr.wikipedia.org/wiki/ISO_8859-15

 

- MSDN FromBase64String

  http://msdn2.microsoft.com/en-us/library/system.convert.frombase64string(VS.71).aspx

www.vbfrance.com/codes/CODAGE-BASE-64_38257.aspx

http://fr.wikipedia.org/wiki/Base64

 

- MIME Compliant Parser

  www.codeproject.com/cs/internet/MIMER.asp

 

www.codeproject.com/cs/internet/embedemailimages.asp

 

Send a content type “multipart/form-datarequest from C#

  www.codeproject.com/useritems/multipart_request_C_.asp

 

- Récupérer le DNS du serveur MX mail d'une adresse email

  www.cppfrance.com/code.aspx?ID=43589

  free.fr MX preference = 20, mail exchanger = mx2.free.fr

  free.fr MX preference = 10, mail exchanger = mx1.free.fr

 

- Solutions to Common Issues encountered during Outlook Add-in development

  www.codeproject.com/office/Outlook_Add-in_Issues.asp

  www.codeproject.com/office/Outlook_Add-in.asp

 

- Découpeur de fichiers Outlook avec l'extension dbx (incomplet)

  www.cppfrance.com/code.aspx?ID=35468

 

- Enumération des dossiers et leurs codes gérés par Outlook Express (GUID des dossiers dbx)

  www.vbfrance.com/code.aspx?ID=43179

 

Trans Dbx - manipuler les fichiers Outlook : Backup des fichiers dbx Outlook Express

  www.vbfrance.com/code.aspx?ID=30511

 

Extract/save article headers from Newsgroups

  A simple C# program that can extract/save article headers from Newsgroups

  www.codeproject.com/useritems/ngextractor.asp

 

Extracteurs d'adresse de courriel

Z-mailing : extracteur d'adresse email via RegEx

  Récupérateur de mail dans les fichiers d'un répertoire

  www.vbfrance.com/code.aspx?ID=31128

- Extracteur d'adresses d'un texte d'une page WEB ou d'une boite à lettres Outlook

  http://bluegyn.free.fr/extractor/

  http://bluegyn.free.fr/extractor/db-x.rar

- Lister toutes les adresses mail des fichiers dbx de Outlook Express

  www.vbfrance.com/code.aspx?ID=16613

 

Extracteurs de courriel

www.leapsecond.com/tools/dbx2txt.c

  www.leapsecond.com/tools/dbx2txt.exe

www.pcastuces.com/logitheque/dbxtract.htm

Dbx2Txt en c fonctionne aussi très bien. Ces 2 logiciels ne conservent toutefois pas la date des mails, et le décodage ISO des sujets n'est pas toujours fait (par exemple l'ISO 2022)