π¬ Wat er misgaat bij het omzetten van tienduizenden e-mails β en hoe je dat oplost
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.
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:
β Oplossing: Samen met ChatGPT ontwikkelde ik een datum-parser (een functie die datums uit verschillende formaten kan lezen en omzetten) die systematisch probeert:
OfficiΓ«le e-mailheaders lezen
Datum uit e-mailtekst extraheren
Bestandsnaam analyseren
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.
Daarnaast registreerde ik elke aanpassing in een apart bestand dat fungeerde als referentie voor volgende iteraties. Dit voorkwam het herhaaldelijk genereren van nieuwe code.
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. π
About Martijn Aslander
Technologie-filosoof | Auteur | Spreker | Verbinder | Oprichter van vele initiatieven