#!/usr/bin/env python3 # -*- coding: utf-8 -*- import re def clean_html(html_content): """ Nettoie le contenu HTML pour le Markdown. Supprime les balises, les bas de page, les messages automatiques et les sections vides. """ if not html_content: return "" # Supprimer les balises simples html_content = re.sub(r'|

|

|
|
', '\n', html_content) # Supprimer les bas de page et messages automatiques du support html_content = re.sub(r'Droit à la déconnexion :.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) html_content = re.sub(r'\*\s*\*\s*\*.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) html_content = re.sub(r'Ce message électronique et tous les fichiers.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) html_content = re.sub(r'Afin d\'assurer une meilleure traçabilité.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) html_content = re.sub(r'_Confidentialité :.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) html_content = re.sub(r'Support technique.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) # Suppression de l'image signature CBAO et autres images html_content = re.sub(r'!\[CBAO - développeur de rentabilité.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) html_content = re.sub(r'!\[.*?\]\(/web/image/.*?\)', '', html_content) html_content = re.sub(r'!\[cid:.*?\]\(/web/image/.*?\)', '', html_content) # Supprimer toutes les références d'images avec des URLs html_content = re.sub(r'!\[.*?\]\(http[s]?://.*?\)', '', html_content) # Supprimer les URL "mailto:" qui restent html_content = re.sub(r'\[.*?\]\(mailto:.*?\)', '', html_content) # Supprimer les liens qui pointent vers des sites web html_content = re.sub(r'\[.*?\]\(https?://.*?\)', '', html_content) # Supprimer les lignes qui contiennent "Envoyé par" suivi d'un lien html_content = re.sub(r'Envoyé par .*$', '', html_content, flags=re.MULTILINE) # Supprimer les balises HTML restantes html_content = re.sub(r'<.*?>', '', html_content) # Remplacer les entités HTML courantes html_content = html_content.replace(' ', ' ') html_content = html_content.replace('<', '<') html_content = html_content.replace('>', '>') html_content = html_content.replace('&', '&') html_content = html_content.replace('"', '"') # Supprimer les lignes avec uniquement des ** html_content = re.sub(r'^\s*\*\*\s*\*\*\s*$', '', html_content, flags=re.MULTILINE) html_content = re.sub(r'^\s*\*\*\s*$', '', html_content, flags=re.MULTILINE) # Supprimer le \--- à la fin des messages html_content = re.sub(r'\\---\s*$', '', html_content) # Supprimer les crochets isolés html_content = re.sub(r'\[\s*$', '', html_content) # Supprimer les lignes vides multiples html_content = re.sub(r'\n\s*\n', '\n\n', html_content) # Nettoyer au début et à la fin html_content = html_content.strip() # Supprimer les sections vides (comme "*Contenu vide*") if not html_content or html_content.lower() == "*contenu vide*": return "*Contenu vide*" return html_content def clean_text(text_content): """ Nettoie le texte brut pour supprimer les éléments indésirables. """ if not text_content: return "" # Supprimer les éléments de signature de messagerie patterns = [ r"De :.*\nEnvoyé :.*\nÀ :.*\nObjet :.*\n", r"From:.*\nSent:.*\nTo:.*\nSubject:.*\n", r"----+ ?Original Message ?----+\n", r".*wrote:$", r"^On .* wrote:$" ] for pattern in patterns: text_content = re.sub(pattern, "", text_content, flags=re.MULTILINE) # Supprimer les lignes vides multiples text_content = re.sub(r'\n\s*\n', '\n\n', text_content) # Nettoyer au début et à la fin text_content = text_content.strip() return text_content def format_date(date_str): """ Formate une date ISO en format lisible. """ if not date_str: return "" try: # Extraire la partie date et heure (ignorer la timezone si présente) match = re.match(r'(\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2}:\d{2})', date_str) if match: date_part, time_part = match.groups() return f"{date_part} {time_part}" return date_str except Exception: return date_str if __name__ == "__main__": # Test simple html = """

Bonjour,

Voici un message avec du HTML et une signature.

Cordialement,

John Doe

Support technique

Afin d'assurer une meilleure traçabilité et vous garantir une prise en charge optimale, nous vous invitons à envoyer vos demandes d'assistance technique à support@exemple.fr

![CBAO - développeur de rentabilité - www.exemple.fr](data:image/png;base64,ABC123)

""" cleaned = clean_html(html) print("HTML nettoyé :\n", cleaned) text = """Bonjour, Voici un message avec une signature. Cordialement, John -------- Message d'origine -------- De : Alice Envoyé : lundi 18 mars 2025 14:52 À : John Objet : Test Bonjour John, Comment vas-tu ? """ cleaned_text = clean_text(text) print("\nTexte nettoyé :\n", cleaned_text)