Martijn Aslander

June 29, 2025

πŸ“¬ Wat er misgaat bij het omzetten van tienduizenden e-mails β€” en hoe je dat oplost

95d77b36-0899-4200-8d88-1ebfc8ba58b1.png


Iedereen heeft e-mail, en bijna iedereen bewaart het jarenlang zonder er nog naar te kijken. Maar wat als je je volledige e-mailgeschiedenis van de afgelopen 10 of 15 jaar daadwerkelijk wilt hergebruiken? Niet als chaos in je inbox, maar als doorzoekbare, bruikbare kennis in een gestructureerd systeem zoals Obsidian.


Dan ontstaan er veel uitdagingen. Dit weekend heb ik samen met ChatGPT een script gebouwd dat tienduizenden Gmail-berichten omzet naar gestructureerde Markdown-notities. Hieronder beschrijf ik de problemen die optreden en de oplossingen die ik ontwikkelde om alles betrouwbaar en automatisch te laten verlopen.

Dit blog is bedoeld voor mensen die zich afvroegen hoe en zelf ook willen klooien. Hopelijk bespaart dit die mensen wat tijd en moeite.

🎯 Het doel

Ik wilde mijn e-mailarchief omzetten naar Markdown-bestanden die:

  • leesbaar zijn voor mensen en machines
  • gekoppeld zijn aan personen, organisaties en plaatsen
  • geen rommel bevatten zoals out-of-office replies of juridische disclaimers
  • per maand georganiseerd zijn
  • bijlagen apart opslaan
  • optimaal functioneren binnen mijn kennisomgeving (Obsidian)


🧱 De praktische uitdagingen


Aanvankelijk leek het eenvoudig: e-mails inlezen, per stuk of in batch opslaan en klaar. Die verwachting bleek ijdele hoop

Het uitzoeken hoe ik mijn specifieke converteerwensen kon implementeren in een script was complex. Ik heb een eigen notatie-systeem ontwikkeld in Obsidian waarbij ik namen schrijf als [[πŸ‘₯ Mark Meinema]] en plaatsnamen als [[πŸ›€οΈ Haarlem]]. Daarnaast had ik specifieke wensen zoals beschreven in mijn vorige blog over dit onderwerp.


Hieronder beschrijf ik waar ik zoal tegenaan liep en hoe ik dat oploste.


❌ 1. Probleem: Onbruikbare bestandsnamen


E-mailonderwerpen bevatten vaak problematische tekens zoals ", /, : of bestaan uit twintig woorden. Besturingssystemen kunnen zulke bestandsnamen niet verwerken.


βœ… Oplossing:
Samen met ChatGPT ontwikkelde ik een functie die automatisch:

  • Problematische tekens verwijdert
  • Het onderwerp inkort tot 12 woorden

Resultaat: βœ‰οΈ 2024-04-15 - πŸ‘₯ Jan Jansen - Voorstel nieuwe opzet.md


In plaats van: βœ‰οΈ Re: Fwd: Project-Update/Samenvatting: Onze eerste testversie!!!!!.md



❌ 2. Probleem: Lege velden met ongewenste waarden


Wanneer het script geen afzender of organisatie kon identificeren, vulde het lege velden met waarden zoals:

Organisatie: null


Of [], "None", of spaties.


βœ… Oplossing:
Samen met ChatGPT ontwikkelde ik een controle die lege velden daadwerkelijk leeg laat:

Organisatie:



❌ 3. Probleem: Overschreven bestanden door identieke onderwerpen


Bij e-mailconversaties met meerdere personen over hetzelfde onderwerp ontstaan vaak identieke bestandsnamen. Elk nieuw bestand overschrijft het vorige.


βœ… Oplossing:
Het script controleert of een bestandsnaam bestaat en voegt automatisch (2), (3) enzovoort toe, vergelijkbaar met standaardgedrag van besturingssystemen.



❌ 4. Probleem: Automatische berichten vervuilen het archief


Out-of-office berichten ("Ik ben afwezig tot 27 augustus") en automatische replies bevatten geen waardevolle informatie maar stonden tussen het archief.


βœ… Oplossing:
Samen met ChatGPT ontwikkelde ik een filter dat dergelijke zinnen herkent in onderwerp of inhoud. Bij een match wordt de e-mail overgeslagen.



❌ 5. Probleem: Uitgebreide juridische disclaimers


Veel organisaties voegen standaarddisclaimers toe die halve pagina's beslaan:


"Dit bericht is uitsluitend bestemd voor de geadresseerde..."


Deze teksten maken notities onleesbaar zonder waarde toe te voegen.


βœ… Oplossing:
Samen met ChatGPT ontwikkelde ik een systeem waarbij het script alleen de laatste 1000 tekens scant op bekende disclaimers. Gevonden disclaimers worden verwijderd en het proces wordt gelogd voor controle.



❌ 6. Probleem: Subdomein-herkenning


Mijn systeem koppelde peerby.com aan de organisatie Peerby, maar herkende mail.peerby.com en support.peerby.com niet als dezelfde organisatie.


βœ… Oplossing:
Samen met ChatGPT ontwikkelde ik een functie die subdomeinen automatisch verwijdert. Alle varianten van x.peerby.com worden herkend als peerby.com.



❌ 7. Probleem: Inconsistente datumverwerking


Dit vormde mogelijk de meest frustrerende uitdaging. Datums verschenen in de frontmatter als 2024-04-15, null, of Invalid Date. Sommige e-mails bevatten correcte frontmatter-datums maar lege daglog-links: "πŸ“… Daglog-link: [[]]".


E-maildatums in .mbox-bestanden worden op verschillende manieren opgeslagen:

  • Volledige timestamp: Wed, 15 Apr 2024 14:23:01 +0200
  • Kort formaat: 15 Apr 24
  • Ontbrekend (bij imports uit oude systemen)

βœ… Oplossing:
Samen met ChatGPT ontwikkelde ik een datum-parser (een functie die datums uit verschillende formaten kan lezen en omzetten) die systematisch probeert:

  1. OfficiΓ«le e-mailheaders lezen
  2. Datum uit e-mailtekst extraheren
  3. Bestandsnaam analyseren
  4. Batch-datum als laatste redmiddel gebruiken

Alle datums worden dubbel gecontroleerd voordat ze in frontmatter en daglog-links worden geplaatst.



❌ 8. Probleem: Inconsistente scriptvariaties


Elke nieuwe scriptversie bevatte subtiele verschillen: functies op andere locaties, aangepaste filters, waardoor betrouwbaarheid afnam.


βœ… Oplossing:
Ik documenteerde elk onderdeel (20 in totaal) als apart blok met uitleg en code. Alles bevindt zich in één bestand met duidelijke documentatie in Python docstrings.


Daarnaast registreerde ik elke aanpassing in een apart bestand dat fungeerde als referentie voor volgende iteraties. Dit voorkwam het herhaaldelijk genereren van nieuwe code.



❌ 9. Probleem: Reply-chains vergroten e-maillengte


E-mails bevatten vaak complete kettingen van eerdere berichten. Een "nieuwe" e-mail bevatte soms vijf oude e-mails:

Op 12 maart 2024 om 14:23 schreef Jan Janssen:
> Hoi Martijn,
> > Op 10 maart schreef Piet Pietersen:
> > > Dit is de oorspronkelijke mail...


Sommige e-mails werden 2000 woorden lang terwijl de nieuwe inhoud slechts 50 woorden bevatte.


βœ… Oplossing:
Samen met ChatGPT ontwikkelde ik een "reply-chain cutter" die stopt bij herkenbare patronen:

  • "Op ... schreef ..."
  • "Van:" gevolgd door een e-mailadres
  • ">" tekens die geciteerde tekst markeren
  • "-----Oorspronkelijk bericht-----"

Hierdoor blijft alleen de nieuwe inhoud behouden.


🧠 Aanvullende functionaliteiten


Naast deze oplossingen implementeerde ik extra functionaliteiten:

  • Bijlagen worden per maand opgeslagen in mappen zoals 2024-03 Bijlagen/
  • Markdown-bestanden worden per maand georganiseerd
  • Elk bestand bevat een overzicht van herkende personen, locaties en organisaties
  • Het systeem telt unieke personen/locaties per batch
  • Tijdens uitvoering toont het script welke e-mail wordt verwerkt
  • Na afloop verschijnt een batch-samenvatting met statistieken
  • Datum-parsing valt automatisch terug op alternatieve methoden
  • Reply-chain detectie verwijdert automatisch oude e-mailkettingen


🧩 De toegevoegde waarde


Dit script functioneert als meer dan een e-mailconverter. Het combineert de rollen van:

  • Automatische e-mailopschoner
  • Data-extractor voor betekenisvolle informatie
  • Bestandsorganisator voor persoonlijke systemen
  • Zelf-documenterende tool

Het vormt een digitale assistent die programmering, archivering en kwaliteitscontrole integreert.


πŸ“ Het eindresultaat


Het script realiseert:

  • Conversie van 96.000 e-mails naar Markdown in Obsidian-formaat
  • Maandelijkse opslag van bijlagen
  • Gestructureerd Markdown-template met aparte secties voor personen, locaties en URLs voor snel overzicht
  • Automatische herkenning van genoemde personen met implementatie van mijn notatie-systeem (ontologie) en verwijzingen naar dagnotities in yyyy-mm-dd formaat
  • Filtering van standaard-replies en disclaimers
  • Zelf-documenterende functionaliteit

Het script functioneert betrouwbaar zonder handmatige controle.


πŸ”„ Bredere toepassingen


Deze aanpak raakt aan de bredere discussie over datasoevereiniteit en controle over persoonlijke data. Veel mensen willen weg van Gmail maar weten niet hoe ze hun vaak jarenlange e-mailarchief kunnen meenemen en bruikbaar houden. Het is alleen een oplossingsrichting. Het is vele malen krachtiger, rijker en behulpzamer dan de oplossing die Gmail bood.

Het doel is niet zelfstandig programmeren leren, maar het ontwikkelen van vaardigheden om digitale omgevingen intelligenter te maken en daadwerkelijke controle over je eigen data te krijgen.

Martijn Aslander
Digitale Fitheid, PKM, en trots op dat ik eindelijk wat meer met scripts en code kan.


Mijn boek Starten met Obsidian is te bestellen via deze link en komt in juli 2025 uit. Ik schreef het samen met AI. Zo ook dit artikel, omdat instructieteksten beter zijn met AI-ondersteuning. Wanneer deze vermelding ontbreekt bij mijn teksten, heb ik AI alleen gebruikt voor grammatica en interpunctie en schreef ik alles zelf. Mocht je dus ondanks dit alles toch nog typ- en grammaticafouten tegenkomen dan mag je ze wijten aan haast of luiheid van mijn kant. πŸ˜„


9789463564069-920x960.jpg





About Martijn Aslander

Technologie-filosoof | Auteur | Spreker | Verbinder | Oprichter van vele initiatieven

Momenteel vrolijk druk met Digitale Fitheid 

De leukste dingen die ik momenteel aan het doen ben: https://linktr.ee/martijnaslander en https://linktr.ee/digitalefitheid