Dbx2Txt : Convertir un fichier Dbx (Outlook Express) en Txt
https://codes-sources.commentcamarche.net/source/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
Extraire les
pièces jointes (EPJ)
Analyser les
champs des entêtes (AC)
Analyser les
valeurs possibles d'un champ (AVC)
Exporter les
entêtes en Csv (ECSV)
Exporter les
entêtes numériques en Csv (ENCSV)
Exemple
d'analyse des valeurs d'un champ
Exporter un courriel au format .eml
Comment faire de l'analyse statistique sous Excel ?
Créer un
fichier dsn (DataSourceName)
Créer un
nouveau classeur Excel
Créer une
liaison vers le fichier Dbx2Txt.csv
Analyse
statistique et décisionnel sous Excel
Décodage des
sujets des courriels
Extraction
html et des pièces jointes
Détection
des courriels non lus
Première
version 0.1 du 18/03/2007
Extracteurs
d'adresse de courriel
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
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.
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 :
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 des courriels.
Extraire le contenu des courriels, sauf html, et sans les pièces jointes.
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 des courriels (reste à faire). Voir cependant l'export d'un courriel .eml.
Convertir le fichier dbx en fichier texte (mais reste décodage html, sinon ce n'est pas très utile).
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. Voir le résultat : Champs fréquents.
Analyser les valeurs possibles d'un champ. Voir l'exemple ci-dessous.
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 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 :
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]
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.
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é :
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 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.
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.
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.
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% |
Dbx2Txt ne gère pas les fichiers dbx des news (forum de discussion).
Le décodage des sujets n'est pas terminé : il reste les accents, et parfois la totalité du sujet est encodée.
L'extraction html ne fonctionne pas encore, il reste à traiter l'encodage de certain caractère. Voir cependant l'export d'un courriel .eml.
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).
- 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.
- 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.
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.
- RFC 2822 - Internet Message Format : Entêtes de courriel officiels
www.faqs.org/rfcs/rfc2822.html
- DomainKeys Identified Mail (DKIM) Signatures
- 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-data” request 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
- 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
- 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)