Bonjour,
Je travaille beaucoup avec des fichiers eml exportés de Thunderbird et classés dans des répertoires. Pour pouvoir avoir un classement chronologique de ces mails, j'ajoute manuellement au début du nom de fichier la date au format AAAA-MM-JJ (par exemple "2025-03-04 Objet du mail.eml").
Mis bout à bout, je consacre un temps certain à renommer ces fichiers, puis à les classer dans le répertoire correspondant, (les correspondances échangées avec Monsieur A, dans le répertoire "Correspondances" du dossier de Monsieur A, etc.).
J'ai pour le moment à peu près 0 connaissance en programmation, à part deux heures de Python qui m'a donné quelques notions. J'aimerais me pencher sur la question et réaliser deux programmes qui me permettraient :
1- D'automatiser le renommage de mes fichiers en extrayant automatique la date, le mois et le jour d'envoi du mail contenu dans le fichier eml, puis le classement dans le bon répertoire en fonction de la personne qui m'a adressé ou à qui j'ai adressé ce mail
2- De permettre la recherche d'une chaîne de caractère dans le texte intégral des fichiers eml présents dans un répertoire donné. Tant que le mail est dans Thunderbird, je peux faire une recherche d'un terme précis dans le corps du mail. Une fois le mail exporté et classé, je ne peux plus que rechercher dans le nom du fichier, et non dans le corps du texte (j'utilise la recherche générale de Nautilus). L'idée serait de faire apparaître le mot ou la chaîne recherchée dans son contexte (par exemple afficher l'extrait des 15 caractères précédents et suivants) et d'indiquer le nom du fichier qui le contient.
Je me demande s'il n'existe pas déjà quelque chose qui permettrait de faire une recherche en texte intégral dans des fichiers textes (que ce soit des fichiers eml ou même odt), correspondant au deuxième cas évoqué ci-dessus.
Pour le premier programme, j'ai mis de côté ce sujet : viewtopic.php?t=1794 qui effectue un script pour renommer des fichiers d'un répertoire. Ce n'est pas exactement la même chose mais ça peut me donner un point de départ.
Est-ce que vous pensez que ces deux programmes sont réalisables avec un script Bash (ou autre chose) et pensez-vous que c'est assez accessible pour quelqu'un qui viendrais de débuter la programmation ? Je préfère demander avant de commencer à consacrer du temps à l'apprentissage !
Merci d'avance de votre retour !
Création de deux scripts/programmes
- piratebab
- Site Admin
- Messages : 5851
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : Hors-ligne
bonjour,
si tu connais déja un peu de pyhon, tu peux utiliser ce langage pour faire tes script. L'interet par rapport a Bash, c'est qu'il existe de très nombreux modules spécialisés, par exemple pour manipuler le nom ou le contenu d'un fichier.
si tu connais déja un peu de pyhon, tu peux utiliser ce langage pour faire tes script. L'interet par rapport a Bash, c'est qu'il existe de très nombreux modules spécialisés, par exemple pour manipuler le nom ou le contenu d'un fichier.
-
- Membre
- Messages : 16
- Inscription : 03 avr. 2024, 21:41
- Status : Hors-ligne
Merci pour ton retour ! Alors ma connaissance du python est toute relative, mais j'avais effectivement quelques idées après cette première session de découverte, notamment sur l'utilisation d'un dictionnaire associant l'adresse mail de mes clients et l'adresse de leur répertoire de correspondance. Je crois qu'il y a aussi une bibliothèque qui existe pour extraire les méta données d'un fichier eml. Je pense que je trouverais plus de documentation sur le Python pour débutant que sur Bash.
-
- Membre
- Messages : 126
- Inscription : 03 août 2023, 14:55
- Status : Hors-ligne
Que personne n'y voit du mal mais quand on ne connaît pas la programmation on peut très bien demander à l'IA de pondre un script, quitte à l'étudier ainsi apprendre et peut-être l'améliorer.
Je sais qu'il y a des détracteurs de cette méthode mais il faut reconnaître que les scripts pondus par IA sont documentés et expliqués, ce qui somme toute est très pédagogique. L'IA est un outil pourquoi ne pas l'utiliser et se débarrasser de tâches que l'on n'aime pas ou parce qu'on est incapable soi-même.
L'IA existe, et je trouve (ça n'engage que moi) que l'utiliser à bon escient est une façon de ne pas réinventer à tous moments la roue.
Je sais qu'il y a des détracteurs de cette méthode mais il faut reconnaître que les scripts pondus par IA sont documentés et expliqués, ce qui somme toute est très pédagogique. L'IA est un outil pourquoi ne pas l'utiliser et se débarrasser de tâches que l'on n'aime pas ou parce qu'on est incapable soi-même.
L'IA existe, et je trouve (ça n'engage que moi) que l'utiliser à bon escient est une façon de ne pas réinventer à tous moments la roue.
Mini PC Geekom i5 / 16 giga Bookworm + Mate
Fidèle à Debian depuis la version 8, après Ubuntu.
Fidèle à Debian depuis la version 8, après Ubuntu.
- piratebab
- Site Admin
- Messages : 5851
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : Hors-ligne
J'utilise le chat de mistral IA lorsque je bloque sur un sujet. C'est effectivement très pédagogique, et ça m'oriente vers des pistes auxquelles je n'aurai pas pensé.
Évidement, ne pas prendre le code de l'IA tel quel , il y a souvent des erreurs. De plus, la façon de rédiger sa requête dans le prompt influe grandement sur la qualité de la réponse! l faut donc continuer à utiliser son cerveau!
Certains poussent le concept de génération de code par l'IA très loin, je vous laisse regarder la derniére vidéo sur la chaine micode .
Évidement, ne pas prendre le code de l'IA tel quel , il y a souvent des erreurs. De plus, la façon de rédiger sa requête dans le prompt influe grandement sur la qualité de la réponse! l faut donc continuer à utiliser son cerveau!
Certains poussent le concept de génération de code par l'IA très loin, je vous laisse regarder la derniére vidéo sur la chaine micode .
-
- Membre
- Messages : 16
- Inscription : 03 avr. 2024, 21:41
- Status : Hors-ligne
Bonsoir,diesel a écrit : 05 mars 2025, 11:09 Le format eml, c'est du texte brut. N'importe quel outil de recherche de chaîne de caractère (grep par exemple) te permet de rechercher ce que tu veux dans un fichier eml.
Amicalement.
Jean-Marie
Je viens de faire quelques tests avec grep, je pense qu'il y aurait moyen d'optimiser un peu l'affichage (notamment ne pas réécrire le nom de fichier à chaque ligne lorsqu'on demande d'afficher la ligne d'avant et d'après le motif recherché) mais ça correspond à ce dont j'ai besoin, ça va me faire gagner du temps lorsque je recherche un mail précis parmi les 300 déjà classés dans le dossier !
Concernant le premier programme pour renommer et classer, je vais déjà commencer par apprendre les rudiments de la programmation avant de donner ma langue "à l'IA" ! J'aimerais comprendre ce que je fais et pourquoi ça se marche pas, qui à me faire accompagner par des associations (il y en a pas mal sur Lyon et j'envisage de rejoindre celle qui avait organisé la petite initiation sur Python), des connaissances, voir pourquoi pas un prestataire pour m'aider à terminer mon programme si je bloque.
J'ai quelques réticences (plutôt du domaine de l'éthique

https://korben.info/badseek-le-llm-malv ... ource.html
https://next.ink/173293/common-crawl-co ... asse-api/
-
- Membre
- Messages : 126
- Inscription : 03 août 2023, 14:55
- Status : Hors-ligne
Bien sûr qu'on ne doit pas faire confiance les yeux fermés à l'IA. Enfoncer un clou avec un marteau peut mal se terminer, j'ai vu la tête d'un marteau quitter le manche dans un mouvement digne d'une reprise de volée !
Mini PC Geekom i5 / 16 giga Bookworm + Mate
Fidèle à Debian depuis la version 8, après Ubuntu.
Fidèle à Debian depuis la version 8, après Ubuntu.
-
- Membre
- Messages : 126
- Inscription : 03 août 2023, 14:55
- Status : Hors-ligne
Je recommande LeChat de Mistral, IA française qui a une partie totalement gratuite et sans obligation de donner une adresse mail.
LeChat donne des scripts assez intéressants qu'on peut comparer à ceux fournis par TalkAI (ChatGPT) tout aussi gratuit et sans rien à dévoiler.
Ces IA ne voient pas grand chose de nous si en plus on utilise un VPN, surtout très éthique comme Riseup-VPN.
LeChat donne des scripts assez intéressants qu'on peut comparer à ceux fournis par TalkAI (ChatGPT) tout aussi gratuit et sans rien à dévoiler.
Ces IA ne voient pas grand chose de nous si en plus on utilise un VPN, surtout très éthique comme Riseup-VPN.
Mini PC Geekom i5 / 16 giga Bookworm + Mate
Fidèle à Debian depuis la version 8, après Ubuntu.
Fidèle à Debian depuis la version 8, après Ubuntu.
-
- Membre
- Messages : 16
- Inscription : 03 avr. 2024, 21:41
- Status : Hors-ligne
Bonjour,
Je reviens donner quelques nouvelles et chercher un peu d'aide sur un point précis.
J'ai bien avancé sur mes deux programmes Python, le premier pour renommer mon fichier avec la date et le deuxième pour le classer dans le bon répertoire en fonction des destinataires et des expéditeurs.
Les programmes fonctionnent globalement bien, je pense avoir réussi à régler les différents problèmes que j'ai rencontré en cours de route.
J'ai cependant encore deux problèmes qui viennent à mon avis du fonctionnement du module BytesParser (from email.parser) et Policy (from email) qui me servent à extraire les données du fichier eml.
Le premier n'est pas critique mais je vous le soumets aussi si jamais vous avez une solution. BytesParser extrait la date du mail sous la forme d'une chaine de caractères du type "Mon, 15 Apr 2025 15:00 +0000"
J'ai réussi à partir de cette chaine à récupérer le jour, le mois et l'année mais il peut y avoir un petit décalage d'un jour lié au fait que le fuseau horaire utilisé est décalé d'une heure par rapport à la France. Quand j'ouvre le fichier eml il s'affiche bien à la bonne heure dans thunderbird mais l'import dans mon fichier python ne se fait pas de la bonne manière. Je pourrais créer une condition en fonction de l'heure de réception d'ajouter ou d'enlever une unité à ma variable jour mais le plus simple serait peut être de réussir à importer la date au bon fuseau horaire non ?
Le point qui me bloque plus car il empêche mon programme de fonctionner sur certains mails est le fait que lorsque le mail à traiter comporte dans son objet un "_" ou un "/", BytesParser le converti en "-". Python ne reconnait ensuite plus le fichier au moment de le renommer car il y a une différence entre le nom réel du fichier, par exemple "objet_mail.eml" et le nom qu'il est en train de traiter "objet-mail.eml".
Ici je vois mal comment compenser ce problème avec une condition car je ne peux pas savoir à l'avance si un "-" dans le nom de l'objet du mail extrait correspond vraiment à un "-", ou un "_" ou encore à "/".
Je pense qu'il s'agit peut être un réglage du paramètre policy de BytesParser mais je ne comprend pas la documentation en ligne à ce sujet.
Je peux vous partager le code complet du programme si ça peut vous aider à comprendre le problème.
Merci par avance de vos lumières !
Je reviens donner quelques nouvelles et chercher un peu d'aide sur un point précis.
J'ai bien avancé sur mes deux programmes Python, le premier pour renommer mon fichier avec la date et le deuxième pour le classer dans le bon répertoire en fonction des destinataires et des expéditeurs.
Les programmes fonctionnent globalement bien, je pense avoir réussi à régler les différents problèmes que j'ai rencontré en cours de route.
J'ai cependant encore deux problèmes qui viennent à mon avis du fonctionnement du module BytesParser (from email.parser) et Policy (from email) qui me servent à extraire les données du fichier eml.
Le premier n'est pas critique mais je vous le soumets aussi si jamais vous avez une solution. BytesParser extrait la date du mail sous la forme d'une chaine de caractères du type "Mon, 15 Apr 2025 15:00 +0000"
J'ai réussi à partir de cette chaine à récupérer le jour, le mois et l'année mais il peut y avoir un petit décalage d'un jour lié au fait que le fuseau horaire utilisé est décalé d'une heure par rapport à la France. Quand j'ouvre le fichier eml il s'affiche bien à la bonne heure dans thunderbird mais l'import dans mon fichier python ne se fait pas de la bonne manière. Je pourrais créer une condition en fonction de l'heure de réception d'ajouter ou d'enlever une unité à ma variable jour mais le plus simple serait peut être de réussir à importer la date au bon fuseau horaire non ?
Le point qui me bloque plus car il empêche mon programme de fonctionner sur certains mails est le fait que lorsque le mail à traiter comporte dans son objet un "_" ou un "/", BytesParser le converti en "-". Python ne reconnait ensuite plus le fichier au moment de le renommer car il y a une différence entre le nom réel du fichier, par exemple "objet_mail.eml" et le nom qu'il est en train de traiter "objet-mail.eml".
Ici je vois mal comment compenser ce problème avec une condition car je ne peux pas savoir à l'avance si un "-" dans le nom de l'objet du mail extrait correspond vraiment à un "-", ou un "_" ou encore à "/".
Je pense qu'il s'agit peut être un réglage du paramètre policy de BytesParser mais je ne comprend pas la documentation en ligne à ce sujet.
Je peux vous partager le code complet du programme si ça peut vous aider à comprendre le problème.
Merci par avance de vos lumières !
- piratebab
- Site Admin
- Messages : 5851
- Inscription : 24 avr. 2016, 18:41
- Localisation : sud ouest
- Status : Hors-ligne
BytesParser sert à mettre une date au format humainement lisible. Si le time zone n'est pas dans la chaine à parser, il ne peux pas le deviner. C'est lorsque tu extrais la date du fichier eml que tu dois aussi récupérer le TZ.
Pour le deuxième sujet, peut étre qu'il faut lui spécifier le langue.
Pour le deuxième sujet, peut étre qu'il faut lui spécifier le langue.
-
- Membre
- Messages : 16
- Inscription : 03 avr. 2024, 21:41
- Status : Hors-ligne
Bonjour,
Merci beaucoup de ce retour, je vais regarder du coté des timezone mais je ne connais pas du tout ce type d'objet pour l'instant. Il faudrait pouvoir convertir une chaîne de caractères en timezone pour ensuite changer le fuseau horaire.
J'ai poursuivi mes investigations sur le deuxième problème et il s'est avéré que le problème ne venait pas de l'extraction du sujet par Bytesparser car le "/" y figurait bien, mais au contraire de la création de la liste des fichiers mails à traiter à partir du nom des fichiers présents dans le répertoire.
Je n'avais jamais remarqué, mais lorsque j'exporte un mail depuis Thunderbird vers un dossier, le caractère "/" est automatiquement remplacé par "_". Si j'essaye de le renommer manuellement, le système m'explique qu'un nom de fichier ne peut pas contenir le caractère "/", ce qui n'est pas illogique car je suppose que le caractère "/" est réservé pour construire les arborescences des dossiers.
J'ai donc simplement demandé au programme de remplacer les "/" par des "_" lorsqu'il extrait le sujet du mail (dont je me sers pour renommer le fichier ensuite) et j'ai donc une concordance entre le sujet rectifié de la sorte et le nom réel du fichier dans le répertoire, permettant le renommage.
Merci beaucoup de ce retour, je vais regarder du coté des timezone mais je ne connais pas du tout ce type d'objet pour l'instant. Il faudrait pouvoir convertir une chaîne de caractères en timezone pour ensuite changer le fuseau horaire.
J'ai poursuivi mes investigations sur le deuxième problème et il s'est avéré que le problème ne venait pas de l'extraction du sujet par Bytesparser car le "/" y figurait bien, mais au contraire de la création de la liste des fichiers mails à traiter à partir du nom des fichiers présents dans le répertoire.
Je n'avais jamais remarqué, mais lorsque j'exporte un mail depuis Thunderbird vers un dossier, le caractère "/" est automatiquement remplacé par "_". Si j'essaye de le renommer manuellement, le système m'explique qu'un nom de fichier ne peut pas contenir le caractère "/", ce qui n'est pas illogique car je suppose que le caractère "/" est réservé pour construire les arborescences des dossiers.
J'ai donc simplement demandé au programme de remplacer les "/" par des "_" lorsqu'il extrait le sujet du mail (dont je me sers pour renommer le fichier ensuite) et j'ai donc une concordance entre le sujet rectifié de la sorte et le nom réel du fichier dans le répertoire, permettant le renommage.