eml2html 2.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
eml2html-2.4.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Romain BEAL
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,257 @@
1
+ Metadata-Version: 2.4
2
+ Name: eml2html
3
+ Version: 2.4.0
4
+ Summary: Convertisseur de fichiers EML en HTML autonome : images inline en base64, sanitization optionnelle, extraction des pièces jointes
5
+ Author: Romain BEAL
6
+ License: MIT
7
+ Keywords: eml,html,email,converter,mime
8
+ Classifier: Development Status :: 5 - Production/Stable
9
+ Classifier: Environment :: Console
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Intended Audience :: End Users/Desktop
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.8
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Communications :: Email
22
+ Classifier: Topic :: Utilities
23
+ Requires-Python: >=3.8
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Dynamic: license-file
27
+
28
+ # Convertisseur EML en HTML
29
+
30
+ [![Python Version](https://img.shields.io/badge/Python-3.8%2B-blue?logo=python&logoColor=white)](https://www.python.org/)
31
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
32
+ [![No Dependencies](https://img.shields.io/badge/dependencies-none-success)](#-prérequis)
33
+ ![Status](https://img.shields.io/badge/status-active-success.svg)
34
+
35
+ Outil Python pour convertir des fichiers `.eml` (emails exportés) en fichiers `.html` autonomes, avec les images inline encodées en base64 directement dans le HTML.
36
+
37
+ ## ✨ Fonctionnalités
38
+
39
+ - 🔄 Conversion d'un fichier `.eml` unique ou d'un dossier entier (mode batch)
40
+ - 🖼️ Extraction et intégration automatique des images inline (`cid:`) en base64
41
+ - 🔤 Détection et correction automatique de l'encodage de caractères (UTF-8, ISO-8859-1, etc.)
42
+ - 🏷️ Correction de la balise `<meta charset>` pour un affichage correct dans le navigateur
43
+ - 📁 Traitement par lot avec gestion d'erreurs isolée (un échec n'interrompt pas le reste)
44
+ - 🖥️ Interface en ligne de commande (CLI) simple, avec codes de sortie exploitables (0 = succès, 1 = échec)
45
+ - 📝 Les emails sans partie HTML (texte brut) sont convertis en HTML valide avec échappement
46
+ - 🏷️ Correction du `<meta charset>` pour les formes HTML4 (`http-equiv`) et HTML5 (`charset=`)
47
+ - ✅ Suite de tests (`pytest`) et intégration continue (lint `ruff` + tests sur Python 3.9–3.13)
48
+ - 🛡️ Option `--sanitize` : retire les éléments actifs du HTML (scripts, handlers d'événements,
49
+ iframes, formulaires, meta refresh, URI `javascript:`) — sans aucune dépendance externe
50
+ - 📎 Les pièces jointes non-image sont listées en pied du HTML (nom, type, taille) ;
51
+ `--extract-attachments` les sauvegarde dans un dossier dédié avec liens de téléchargement
52
+ - 📧 Les en-têtes de l'email (De, À, Cc, Cci, Date, Objet) sont affichés en haut du HTML
53
+ généré, avec décodage des accents et noms encodés (MIME encoded-words)
54
+
55
+ ## 📦 Prérequis
56
+
57
+ - Python 3.8 ou supérieur
58
+ - Aucune dépendance externe pour l'outil (uniquement la bibliothèque standard Python)
59
+ - `pytest` uniquement pour exécuter les tests (`pip install pytest`)
60
+
61
+ ## 🚀 Installation
62
+
63
+ ### Depuis PyPI (recommandé)
64
+
65
+ ```bash
66
+ pip install eml2html
67
+ ```
68
+
69
+ Les commandes `eml2html` et `eml-to-html` (alias) sont ensuite disponibles
70
+ depuis n'importe quel dossier :
71
+
72
+ ```bash
73
+ eml2html chemin/vers/email.eml
74
+ ```
75
+
76
+ Mise à jour : `pip install --upgrade eml2html`
77
+
78
+ ### Depuis GitHub (version de développement)
79
+
80
+ ```bash
81
+ pip install git+https://github.com/Baebibelab/eml_to_html.git
82
+ ```
83
+
84
+ ### Sans installation (script autonome)
85
+
86
+ ```bash
87
+ git clone https://github.com/Baebibelab/eml_to_html.git
88
+ cd eml_to_html
89
+ python eml_to_html.py chemin/vers/email.eml
90
+ ```
91
+
92
+ Aucune dépendance externe n'est requise dans les deux cas.
93
+
94
+ ## 🛠️ Utilisation
95
+
96
+ ### Convertir un seul fichier
97
+
98
+ ```bash
99
+ python eml_to_html.py chemin/vers/email.eml
100
+ ```
101
+
102
+ Le fichier HTML est créé automatiquement à côté, avec le même nom (`email.html`).
103
+
104
+ ### Spécifier un fichier de sortie
105
+
106
+ ```bash
107
+ python eml_to_html.py email.eml -o sortie.html
108
+ ```
109
+
110
+ ### Convertir un dossier entier (mode batch)
111
+
112
+ ```bash
113
+ python eml_to_html.py chemin/vers/dossier/
114
+ ```
115
+
116
+ ### Spécifier un dossier de sortie
117
+
118
+ ```bash
119
+ python eml_to_html.py chemin/vers/dossier/ -o chemin/vers/sortie/
120
+ ```
121
+
122
+ ### Parcourir les sous-dossiers (mode récursif)
123
+
124
+ ```bash
125
+ python eml_to_html.py chemin/vers/dossier/ --recursive
126
+ ```
127
+
128
+ Sans `--recursive`, seuls les `.eml` directement dans le dossier sont convertis.
129
+ Avec, toute l'arborescence est parcourue et **recréée telle quelle** dans la sortie
130
+ (`archives/2023/email.eml` → `archives/2023/email.html`).
131
+
132
+ ### Afficher l'aide
133
+
134
+ ```bash
135
+ python eml_to_html.py -h
136
+ ```
137
+
138
+ ### Nettoyer le HTML de sortie (`--sanitize`)
139
+
140
+ ```bash
141
+ python eml_to_html.py email.eml --sanitize
142
+ python eml_to_html.py dossier/ --sanitize
143
+ ```
144
+
145
+ Par défaut, le HTML de l'email est recopié tel quel : ouvrir la sortie dans un navigateur peut
146
+ exécuter les scripts qu'il contient. Avec `--sanitize`, les éléments actifs sont retirés avant
147
+ l'écriture (liste blanche de balises et d'attributs, implémentation stdlib pure) :
148
+
149
+ | Retiré | Conservé |
150
+ |---|---|
151
+ | `<script>`, `<iframe>`, `<object>`, `<embed>`, `<form>`, `<link>` | Mise en page, tableaux, styles inoffensifs |
152
+ | Attributs `on...` (`onclick`, `onerror`, ...) | Images inline en base64 (`data:image/...`) |
153
+ | URI `javascript:`, `vbscript:`, `data:text/html` | Liens `http(s):`, `mailto:` |
154
+ | `<meta http-equiv="refresh">`, CSS `expression()` | Balise `<meta charset>` corrigée |
155
+
156
+ Le texte visible est toujours préservé. Recommandé pour tout email de source non fiable.
157
+
158
+ ### Pièces jointes
159
+
160
+ Les pièces jointes non-image (PDF, DOCX, ...) sont automatiquement listées en pied du HTML
161
+ généré : nom, type MIME et taille.
162
+
163
+ ```bash
164
+ python eml_to_html.py email.eml --extract-attachments
165
+ ```
166
+
167
+ Avec `--extract-attachments`, elles sont en plus sauvegardées dans un dossier
168
+ `<nom-du-html>_pieces-jointes/` à côté du fichier HTML, et la section en pied de page
169
+ contient un lien de téléchargement vers chaque fichier. Les noms de fichiers sont nettoyés
170
+ (traversée de chemin neutralisée, doublons suffixés `-2`, `-3`...).
171
+
172
+ ### Codes de sortie
173
+
174
+ - `0` : toutes les conversions ont réussi
175
+ - `1` : le chemin n'existe pas, ou au moins une conversion a échoué (utile en script/CI)
176
+
177
+ ### Utiliser comme bibliothèque (paquet installé)
178
+
179
+ ```python
180
+ from eml_to_html import EmlToHtmlConverter, batch_convert
181
+
182
+ html = EmlToHtmlConverter('email.eml').save('sortie.html')
183
+ succeeded, failed = batch_convert('dossier/')
184
+ ```
185
+
186
+ ## 📋 Options
187
+
188
+ | Option | Description |
189
+ |---|---|
190
+ | `path` | Chemin d'un fichier `.eml` ou d'un dossier (obligatoire) |
191
+ | `-o`, `--output` | Fichier ou dossier de sortie (optionnel) |
192
+ | `--sanitize` | Retire les éléments actifs du HTML de sortie (scripts, handlers, iframes...) |
193
+ | `--extract-attachments` | Sauvegarde les pièces jointes non-image dans un dossier dédié |
194
+ | `-r`, `--recursive` | Parcourt aussi les sous-dossiers (arborescence recréée en sortie) |
195
+ | `-h`, `--help` | Affiche l'aide |
196
+
197
+ ## 🧩 Structure du projet
198
+
199
+ ```
200
+ eml_to_html/
201
+ ├── eml_to_html.py # Script principal
202
+ ├── tests/ # Suite de tests pytest
203
+ ├── .github/workflows/ # CI (ruff + pytest)
204
+ ├── pyproject.toml # Configuration ruff / pytest
205
+ ├── README.md # Documentation
206
+ ├── LICENSE # Licence du projet
207
+ ├── CHANGELOG.md # Historique des versions
208
+ └── .gitignore # Fichiers ignorés par Git
209
+ ```
210
+
211
+ ## ⚙️ Fonctionnement technique
212
+
213
+ 1. Le fichier `.eml` est chargé via le module `email` de la bibliothèque standard.
214
+ 2. Les en-têtes principaux (De, À, Cc, Cci, Date, Objet) sont décodés ( MIME encoded-words)
215
+ et affichés dans un bloc en haut du HTML généré.
216
+ 2. Le corps HTML (ou texte brut en fallback) est extrait et décodé selon le charset déclaré.
217
+ 3. La balise `<meta charset>` est corrigée pour correspondre à l'encodage réel (UTF-8).
218
+ 4. Les pièces jointes de type image sont parcourues et converties en `data:image/...;base64,...`, puis injectées dans le HTML en remplaçant les références `cid:` ou noms de fichiers.
219
+ 5. Le résultat est un fichier `.html` autonome, lisible sans dépendance externe (pas besoin des pièces jointes séparées).
220
+
221
+ ## 🐛 Limitations connues
222
+
223
+ - Seuls les formats d'image suivants sont supportés : JPEG, PNG, GIF, BMP, WEBP
224
+ - Les pièces jointes non-image sont listées en pied de page (et extraites avec `--extract-attachments`),
225
+ mais leur contenu n'est pas intégré au HTML
226
+ - Sans `--sanitize`, le HTML généré n'est pas nettoyé (à ouvrir avec précaution si la source
227
+ n'est pas fiable) ; le flag `--sanitize` neutralise les éléments actifs
228
+ - Sans `--recursive`, le mode batch ne traverse pas les sous-dossiers
229
+
230
+ ## 🚢 Publication PyPI
231
+
232
+ La publication est automatisée : pousser un tag `v*` (ex. `v2.4.0`) déclenche les tests
233
+ puis la publication sur [PyPI](https://pypi.org/project/eml2html/) via GitHub Actions
234
+ (secret `PYPI_API_TOKEN` requis dans les réglages du dépôt).
235
+
236
+ ## 📄 Licence
237
+
238
+ Ce projet est distribué sous licence [MIT](LICENSE)
239
+
240
+ ## 🔒 Confidentialité et sécurité
241
+
242
+ ⚠️ **Attention** : cet outil traite des fichiers email pouvant contenir des données personnelles ou confidentielles.
243
+ - Aucune donnée n'est envoyée en ligne : tout le traitement est **local**.
244
+ - Ne commitez jamais de vrais fichiers `.eml` contenant des informations sensibles dans ce dépôt (voir `.gitignore`).
245
+ - Le HTML généré n'est pas sanitizé : si vous l'ouvrez dans un navigateur, méfiez-vous des scripts embarqués dans des emails provenant de sources non fiables.
246
+
247
+ ## 🌟 Star History
248
+
249
+ Si cet outil vous est utile, n'hésitez pas à mettre une ⭐ au dépôt !
250
+
251
+ ## 📬 Contact
252
+
253
+ Pour toute question, ouvrez une [issue](../../issues) sur ce dépôt.
254
+
255
+ ## 👤 Auteur
256
+
257
+ Développé par Romain BEAL
@@ -0,0 +1,230 @@
1
+ # Convertisseur EML en HTML
2
+
3
+ [![Python Version](https://img.shields.io/badge/Python-3.8%2B-blue?logo=python&logoColor=white)](https://www.python.org/)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ [![No Dependencies](https://img.shields.io/badge/dependencies-none-success)](#-prérequis)
6
+ ![Status](https://img.shields.io/badge/status-active-success.svg)
7
+
8
+ Outil Python pour convertir des fichiers `.eml` (emails exportés) en fichiers `.html` autonomes, avec les images inline encodées en base64 directement dans le HTML.
9
+
10
+ ## ✨ Fonctionnalités
11
+
12
+ - 🔄 Conversion d'un fichier `.eml` unique ou d'un dossier entier (mode batch)
13
+ - 🖼️ Extraction et intégration automatique des images inline (`cid:`) en base64
14
+ - 🔤 Détection et correction automatique de l'encodage de caractères (UTF-8, ISO-8859-1, etc.)
15
+ - 🏷️ Correction de la balise `<meta charset>` pour un affichage correct dans le navigateur
16
+ - 📁 Traitement par lot avec gestion d'erreurs isolée (un échec n'interrompt pas le reste)
17
+ - 🖥️ Interface en ligne de commande (CLI) simple, avec codes de sortie exploitables (0 = succès, 1 = échec)
18
+ - 📝 Les emails sans partie HTML (texte brut) sont convertis en HTML valide avec échappement
19
+ - 🏷️ Correction du `<meta charset>` pour les formes HTML4 (`http-equiv`) et HTML5 (`charset=`)
20
+ - ✅ Suite de tests (`pytest`) et intégration continue (lint `ruff` + tests sur Python 3.9–3.13)
21
+ - 🛡️ Option `--sanitize` : retire les éléments actifs du HTML (scripts, handlers d'événements,
22
+ iframes, formulaires, meta refresh, URI `javascript:`) — sans aucune dépendance externe
23
+ - 📎 Les pièces jointes non-image sont listées en pied du HTML (nom, type, taille) ;
24
+ `--extract-attachments` les sauvegarde dans un dossier dédié avec liens de téléchargement
25
+ - 📧 Les en-têtes de l'email (De, À, Cc, Cci, Date, Objet) sont affichés en haut du HTML
26
+ généré, avec décodage des accents et noms encodés (MIME encoded-words)
27
+
28
+ ## 📦 Prérequis
29
+
30
+ - Python 3.8 ou supérieur
31
+ - Aucune dépendance externe pour l'outil (uniquement la bibliothèque standard Python)
32
+ - `pytest` uniquement pour exécuter les tests (`pip install pytest`)
33
+
34
+ ## 🚀 Installation
35
+
36
+ ### Depuis PyPI (recommandé)
37
+
38
+ ```bash
39
+ pip install eml2html
40
+ ```
41
+
42
+ Les commandes `eml2html` et `eml-to-html` (alias) sont ensuite disponibles
43
+ depuis n'importe quel dossier :
44
+
45
+ ```bash
46
+ eml2html chemin/vers/email.eml
47
+ ```
48
+
49
+ Mise à jour : `pip install --upgrade eml2html`
50
+
51
+ ### Depuis GitHub (version de développement)
52
+
53
+ ```bash
54
+ pip install git+https://github.com/Baebibelab/eml_to_html.git
55
+ ```
56
+
57
+ ### Sans installation (script autonome)
58
+
59
+ ```bash
60
+ git clone https://github.com/Baebibelab/eml_to_html.git
61
+ cd eml_to_html
62
+ python eml_to_html.py chemin/vers/email.eml
63
+ ```
64
+
65
+ Aucune dépendance externe n'est requise dans les deux cas.
66
+
67
+ ## 🛠️ Utilisation
68
+
69
+ ### Convertir un seul fichier
70
+
71
+ ```bash
72
+ python eml_to_html.py chemin/vers/email.eml
73
+ ```
74
+
75
+ Le fichier HTML est créé automatiquement à côté, avec le même nom (`email.html`).
76
+
77
+ ### Spécifier un fichier de sortie
78
+
79
+ ```bash
80
+ python eml_to_html.py email.eml -o sortie.html
81
+ ```
82
+
83
+ ### Convertir un dossier entier (mode batch)
84
+
85
+ ```bash
86
+ python eml_to_html.py chemin/vers/dossier/
87
+ ```
88
+
89
+ ### Spécifier un dossier de sortie
90
+
91
+ ```bash
92
+ python eml_to_html.py chemin/vers/dossier/ -o chemin/vers/sortie/
93
+ ```
94
+
95
+ ### Parcourir les sous-dossiers (mode récursif)
96
+
97
+ ```bash
98
+ python eml_to_html.py chemin/vers/dossier/ --recursive
99
+ ```
100
+
101
+ Sans `--recursive`, seuls les `.eml` directement dans le dossier sont convertis.
102
+ Avec, toute l'arborescence est parcourue et **recréée telle quelle** dans la sortie
103
+ (`archives/2023/email.eml` → `archives/2023/email.html`).
104
+
105
+ ### Afficher l'aide
106
+
107
+ ```bash
108
+ python eml_to_html.py -h
109
+ ```
110
+
111
+ ### Nettoyer le HTML de sortie (`--sanitize`)
112
+
113
+ ```bash
114
+ python eml_to_html.py email.eml --sanitize
115
+ python eml_to_html.py dossier/ --sanitize
116
+ ```
117
+
118
+ Par défaut, le HTML de l'email est recopié tel quel : ouvrir la sortie dans un navigateur peut
119
+ exécuter les scripts qu'il contient. Avec `--sanitize`, les éléments actifs sont retirés avant
120
+ l'écriture (liste blanche de balises et d'attributs, implémentation stdlib pure) :
121
+
122
+ | Retiré | Conservé |
123
+ |---|---|
124
+ | `<script>`, `<iframe>`, `<object>`, `<embed>`, `<form>`, `<link>` | Mise en page, tableaux, styles inoffensifs |
125
+ | Attributs `on...` (`onclick`, `onerror`, ...) | Images inline en base64 (`data:image/...`) |
126
+ | URI `javascript:`, `vbscript:`, `data:text/html` | Liens `http(s):`, `mailto:` |
127
+ | `<meta http-equiv="refresh">`, CSS `expression()` | Balise `<meta charset>` corrigée |
128
+
129
+ Le texte visible est toujours préservé. Recommandé pour tout email de source non fiable.
130
+
131
+ ### Pièces jointes
132
+
133
+ Les pièces jointes non-image (PDF, DOCX, ...) sont automatiquement listées en pied du HTML
134
+ généré : nom, type MIME et taille.
135
+
136
+ ```bash
137
+ python eml_to_html.py email.eml --extract-attachments
138
+ ```
139
+
140
+ Avec `--extract-attachments`, elles sont en plus sauvegardées dans un dossier
141
+ `<nom-du-html>_pieces-jointes/` à côté du fichier HTML, et la section en pied de page
142
+ contient un lien de téléchargement vers chaque fichier. Les noms de fichiers sont nettoyés
143
+ (traversée de chemin neutralisée, doublons suffixés `-2`, `-3`...).
144
+
145
+ ### Codes de sortie
146
+
147
+ - `0` : toutes les conversions ont réussi
148
+ - `1` : le chemin n'existe pas, ou au moins une conversion a échoué (utile en script/CI)
149
+
150
+ ### Utiliser comme bibliothèque (paquet installé)
151
+
152
+ ```python
153
+ from eml_to_html import EmlToHtmlConverter, batch_convert
154
+
155
+ html = EmlToHtmlConverter('email.eml').save('sortie.html')
156
+ succeeded, failed = batch_convert('dossier/')
157
+ ```
158
+
159
+ ## 📋 Options
160
+
161
+ | Option | Description |
162
+ |---|---|
163
+ | `path` | Chemin d'un fichier `.eml` ou d'un dossier (obligatoire) |
164
+ | `-o`, `--output` | Fichier ou dossier de sortie (optionnel) |
165
+ | `--sanitize` | Retire les éléments actifs du HTML de sortie (scripts, handlers, iframes...) |
166
+ | `--extract-attachments` | Sauvegarde les pièces jointes non-image dans un dossier dédié |
167
+ | `-r`, `--recursive` | Parcourt aussi les sous-dossiers (arborescence recréée en sortie) |
168
+ | `-h`, `--help` | Affiche l'aide |
169
+
170
+ ## 🧩 Structure du projet
171
+
172
+ ```
173
+ eml_to_html/
174
+ ├── eml_to_html.py # Script principal
175
+ ├── tests/ # Suite de tests pytest
176
+ ├── .github/workflows/ # CI (ruff + pytest)
177
+ ├── pyproject.toml # Configuration ruff / pytest
178
+ ├── README.md # Documentation
179
+ ├── LICENSE # Licence du projet
180
+ ├── CHANGELOG.md # Historique des versions
181
+ └── .gitignore # Fichiers ignorés par Git
182
+ ```
183
+
184
+ ## ⚙️ Fonctionnement technique
185
+
186
+ 1. Le fichier `.eml` est chargé via le module `email` de la bibliothèque standard.
187
+ 2. Les en-têtes principaux (De, À, Cc, Cci, Date, Objet) sont décodés ( MIME encoded-words)
188
+ et affichés dans un bloc en haut du HTML généré.
189
+ 2. Le corps HTML (ou texte brut en fallback) est extrait et décodé selon le charset déclaré.
190
+ 3. La balise `<meta charset>` est corrigée pour correspondre à l'encodage réel (UTF-8).
191
+ 4. Les pièces jointes de type image sont parcourues et converties en `data:image/...;base64,...`, puis injectées dans le HTML en remplaçant les références `cid:` ou noms de fichiers.
192
+ 5. Le résultat est un fichier `.html` autonome, lisible sans dépendance externe (pas besoin des pièces jointes séparées).
193
+
194
+ ## 🐛 Limitations connues
195
+
196
+ - Seuls les formats d'image suivants sont supportés : JPEG, PNG, GIF, BMP, WEBP
197
+ - Les pièces jointes non-image sont listées en pied de page (et extraites avec `--extract-attachments`),
198
+ mais leur contenu n'est pas intégré au HTML
199
+ - Sans `--sanitize`, le HTML généré n'est pas nettoyé (à ouvrir avec précaution si la source
200
+ n'est pas fiable) ; le flag `--sanitize` neutralise les éléments actifs
201
+ - Sans `--recursive`, le mode batch ne traverse pas les sous-dossiers
202
+
203
+ ## 🚢 Publication PyPI
204
+
205
+ La publication est automatisée : pousser un tag `v*` (ex. `v2.4.0`) déclenche les tests
206
+ puis la publication sur [PyPI](https://pypi.org/project/eml2html/) via GitHub Actions
207
+ (secret `PYPI_API_TOKEN` requis dans les réglages du dépôt).
208
+
209
+ ## 📄 Licence
210
+
211
+ Ce projet est distribué sous licence [MIT](LICENSE)
212
+
213
+ ## 🔒 Confidentialité et sécurité
214
+
215
+ ⚠️ **Attention** : cet outil traite des fichiers email pouvant contenir des données personnelles ou confidentielles.
216
+ - Aucune donnée n'est envoyée en ligne : tout le traitement est **local**.
217
+ - Ne commitez jamais de vrais fichiers `.eml` contenant des informations sensibles dans ce dépôt (voir `.gitignore`).
218
+ - Le HTML généré n'est pas sanitizé : si vous l'ouvrez dans un navigateur, méfiez-vous des scripts embarqués dans des emails provenant de sources non fiables.
219
+
220
+ ## 🌟 Star History
221
+
222
+ Si cet outil vous est utile, n'hésitez pas à mettre une ⭐ au dépôt !
223
+
224
+ ## 📬 Contact
225
+
226
+ Pour toute question, ouvrez une [issue](../../issues) sur ce dépôt.
227
+
228
+ ## 👤 Auteur
229
+
230
+ Développé par Romain BEAL