Blog

Tips, guides, and privacy advice

← Back to Blog
Ontwikkelaarstips

Waarom de transactionele e-mails van je app in spam belanden (en hoe je dat oplost)

24 december 2025·8 min read

Waarom bezorging van transactionele e-mail een heel ander verhaal is

Er bestaat een cruciaal onderscheid tussen marketing-e-mails en transactionele e-mails dat veel ontwikkelaars missen wanneer ze zich voor het eerst serieus in bezorgbaarheid verdiepen. Marketing-e-mails — nieuwsbrieven, promotiecampagnes, aankondigingen — gaan naar abonnees die zich hebben aangemeld. Die kunnen af en toe vertraging en zelfs af en toe een plaatsing in de spammap verdragen. Als een nieuwsbrief bij 2% van je lijst in spam belandt, is dat jammer, maar je bedrijf loopt door.

Transactionele e-mails zijn volledig anders. Verificatielinks, wachtwoordresets, aankoopbevestigingen, tweefactorcodes, beveiligingsmeldingen over het account — die komen aan op kritieke momenten in de reis van de gebruiker. Een wachtwoordreset die in spam belandt betekent dat je gebruiker buitengesloten is van zijn account en waarschijnlijk een supportticket aanmaakt of, nog erger, nooit meer terugkomt. Een verificatie-e-mail in spam betekent dat een nieuwe gebruiker de registratie niet kan afronden en dat je acquisitiefunnel een stil, onzichtbaar lek heeft.

En toch worden transactionele e-mails vaak met minder zorg ingericht dan marketingcampagnes. Veel ontwikkelaars gebruiken simpelweg de verzendcode die hun framework meelevert in plaats van de verificatiemail bewust op te bouwen, configureren die met een gedeelde SMTP-server, deployen, testen één keer met hun eigen inbox — die ruime spamdrempels heeft — en gaan verder. De problemen komen pas boven water wanneer echte gebruikers op Gmail, Outlook of Yahoo melden dat e-mails ontbreken. Op dat moment faalt het al weken stilletjes in productie.

SPF: de basis van e-mailauthenticatie

Sender Policy Framework (SPF) is een DNS TXT-record op je verzenddomein dat de wereld vertelt welke mailservers gemachtigd zijn om namens jou e-mail te versturen. Wanneer Gmail een e-mail ontvangt die zogenaamd van [email protected] komt, doet het een DNS-lookup naar het SPF-record van je domein. Staat het IP-adres van de server die de e-mail daadwerkelijk verstuurde in je SPF-record, dan slaagt de e-mail voor SPF. Is er helemaal geen SPF-record — of staat de verzendende server er niet in — dan wordt de e-mail met argwaan behandeld nog voordat er ook maar één inhoudelijke controle begint.

SPF instellen is eenvoudig zodra je weet wat je doet. Voeg een TXT-record toe aan de DNS van je domein. De waarde hangt af van je verzendprovider. Bij SendGrid: v=spf1 include:sendgrid.net ~all. Bij AWS SES: v=spf1 include:amazonses.com ~all. Bij Mailgun: v=spf1 include:mailgun.org ~all. De documentatie van je provider geeft de exacte include-waarde. Het achtervoegsel ~all is een "soft fail" — e-mails van niet-vermelde servers worden gemarkeerd maar niet direct geweigerd. Zodra je zeker weet dat je SPF-record volledig en correct is, kun je opschalen naar -all (hard fail), wat ontvangende servers opdraagt ongeautoriseerde mail volledig te weigeren.

Een veelvoorkomende valkuil: de limiet van 10 DNS-lookups. SPF-records die meerdere include:-directives aan elkaar rijgen, kunnen die limiet overschrijden, waardoor SPF faalt terwijl al je servers technisch gezien vermeld staan. Gebruik MXToolbox om je SPF-record te controleren — problemen met het aantal lookups worden daar duidelijk aangegeven. Hoe SPF, DKIM en DMARC samenhangen, wordt goed uitgelegd in de documentatie van SendGrid over e-mailauthenticatie.

DKIM: cryptografisch bewijs dat je e-mail niet is aangepast

DomainKeys Identified Mail (DKIM) voegt aan elke e-mail die je verstuurt een cryptografische handtekening toe. Die handtekening wordt gegenereerd met een privésleutel die je verzendprovider beheert, en ontvangende mailservers verifiëren hem tegen een publieke sleutel die jij als DNS TXT-record publiceert. Als de handtekening klopt, zijn twee dingen bewezen: de e-mail komt echt uit jouw verzendinfrastructuur, en de inhoud is tussen verzending en ontvangst niet gewijzigd.

Zonder geconfigureerde DKIM wordt het aanzienlijk eenvoudiger voor kwaadwillenden om je domein te spoofen — e-mails te versturen die lijken te komen van [email protected] maar in werkelijkheid door iemand anders zijn verzonden. Zo werken phishingcampagnes. Spamfilters weten dat ook, en daarom wordt een e-mail zonder geldige DKIM-handtekening van een domein dat er een zou moeten hebben met verhoogde argwaan behandeld. Spamhaus en andere reputatiediensten nemen de DKIM-ondertekeningsgeschiedenis mee in domeinreputatiescores.

DKIM instellen doe je via je verzendprovider. Die genereert een sleutelpaar, houdt de privésleutel op zijn eigen infrastructuur en geeft jou een publieke sleutel om als TXT-record aan je DNS toe te voegen. Zodra dat DNS-record is gepubliceerd en gepropageerd, draagt elke e-mail die namens jou wordt verzonden automatisch een geldige DKIM-handtekening. De meeste grote providers — SendGrid, Mailgun, Amazon SES, Postmark — loodsen je tijdens de initiële setup door dit proces. Heb je die stap overgeslagen, doe het dan nu.

DMARC: de beleidslaag die alles samenbindt

DMARC (Domain-based Message Authentication, Reporting and Conformance) bouwt voort op SPF en DKIM door vast te leggen wat ontvangende servers moeten doen wanneer een e-mail die controles niet doorstaat. Het introduceert ook "alignment" — de eis dat het domein in de From-header van de e-mail daadwerkelijk overeenkomt met het domein dat SPF of DKIM heeft doorstaan. Dat voorkomt dat aanvallers de SPF-controle op het ene domein doorstaan terwijl ze in het zichtbare From-adres een ander domein spoofen.

De juiste aanpak van DMARC is stap voor stap beginnen. Start met een beleid dat alleen monitort: v=DMARC1; p=none; rua=mailto:[email protected]. De p=none vertelt ontvangende servers geen actie te ondernemen bij fouten, maar je alleen rapporten te sturen. Die geaggregeerde rapporten laten zien welke servers namens jou e-mail versturen en of ze SPF en DKIM doorstaan. Bekijk ze een paar weken voordat je iets aan het beleid wijzigt.

Zodra je zeker weet dat alles legitieme verkeer doorkomt, ga je naar p=quarantine (gefaalde e-mails gaan naar de spammap) en uiteindelijk naar p=reject (gefaalde e-mails worden direct geweigerd). Deze opbouw beschermt de reputatie van je domein tegen spoofing en geeft je tegelijk tijd om vergeten legitieme verzendbronnen op te sporen. Een DMARC-beleid met p=reject in combinatie met geslaagde SPF en DKIM maakt het voor aanvallers vrijwel onmogelijk om je domein effectief te imiteren.

IP-reputatie: waarom je verzendserver uitmaakt

Zelfs met perfecte SPF, DKIM en DMARC kunnen je e-mails in spam belanden als het IP-adres waarvan ze worden verstuurd een slechte reputatie heeft. Ontvangende mailservers onderhouden — of raadplegen externe diensten die dat doen — blocklists en reputatiescores voor verzendende IP-adressen. Een IP met een geschiedenis van spam, of een IP dat voorkomt op blocklists van diensten als Spamhaus, ziet zijn uitgaande e-mail met argwaan behandeld worden, ongeacht je authenticatie-instellingen.

Gebruik je een gedeeld IP-adres van een shared-hostingprovider of een goedkope SMTP-dienst, dan is je reputatie verbonden aan iedereen die datzelfde IP gebruikt. Eén spammer in dezelfde gedeelde pool kan de bezorgbaarheid voor alle afzenders op dat IP onderuit halen. Dit is een van de sterkste argumenten om een gespecialiseerde provider voor transactionele e-mail te gebruiken — SendGrid, Amazon SES, Postmark, Mailgun — in plaats van e-mail rechtstreeks vanaf je applicatieserver of via een gedeelde SMTP-dienst te versturen.

Op een nieuw verzend-IP moet je het IP ook geleidelijk "opwarmen". Een plotselinge piek in e-mailvolume vanaf een vers IP ziet er voor ontvangende servers uit als spamgedrag. Begin met lagere volumes en verhoog die geleidelijk over dagen of weken. De meeste gespecialiseerde e-mailproviders regelen IP-warming automatisch als je in een gedeelde verzendpool zit, of leveren warming-schema's als je een dedicated IP gebruikt.

Inhoud en onderwerpregel: wat filters activeert

Naast authenticatie en IP-reputatie wordt ook de inhoud van je e-mail zelf door spamfilters beoordeeld. Bepaalde patronen leiden betrouwbaar tot een spamclassificatie. Spamtriggerwoorden in de onderwerpregel — "GRATIS", "GEGARANDEERD", "NU HANDELEN", overdreven uitroeptekens, ALLES IN HOOFDLETTERS — zijn de voor de hand liggende die de meeste ontwikkelaars vermijden. Minder duidelijk: onderwerpregels die te vaag zijn ("Belangrijk bericht voor je"), te urgent ("Je account wordt gesloten") of te promotioneel voor wat een transactionele e-mail hoort te zijn.

De tekst-beeldverhouding telt ook mee. Een e-mail die vooral uit afbeeldingen met minimale tekst bestaat, is een klassiek spampatroon — bulkverzenders gebruiken afbeeldingen om trefwoorden te verbergen voor tekstgebaseerde filters. Transactionele e-mails moeten hoofdzakelijk tekstueel zijn met minimale afbeeldingen. Kapotte HTML — niet-gesloten tags, ongeldige attributen — is nog een rode vlag. Stuur altijd een plattetekstversie mee naast je HTML-versie. Spamfilters bekijken HTML-only e-mails met extra argwaan, en zakelijke mailsystemen strippen HTML vaak volledig.

Je e-mailbezorging testen — de juiste manier

De snelste en meest praktische testmethode voor e-mailbezorging is: stuur een test-e-mail naar een verse tijdelijke e-mail-inbox en controleer zowel de inbox als de spammap. Dat geeft je direct, ondubbelzinnig inzicht in of je e-mail de inbox bereikt of wordt gefilterd. Anders dan testen met je eigen Gmail-account — dat je als frequente afzender misschien al op de whitelist heeft — heeft een vers tijdelijk adres geen enkele geschiedenis met je domein, waardoor het het eerste contact van een nieuwe gebruiker veel nauwkeuriger simuleert.

Je moet elke keer controleren of de verificatiemail echt aankomt wanneer je iets wijzigt dat de bezorging kan beïnvloeden: van e-mailprovider wisselen, je HTML-template ingrijpend aanpassen, je verzenddomein wijzigen, een nieuw verzendsubdomein toevoegen of naar een nieuwe omgeving deployen (staging, productie). Het kost twee minuten en levert onweerlegbaar bewijs. Het alternatief — wachten tot gebruikers problemen melden — betekent dat je bezorgproblemen al een onbekende tijd stilletjes hebben gefaald.

Naast de inbox/spam-controle kun je de e-mailgezondheidscheck van MXToolbox gebruiken om de algemene gezondheid van je domein te controleren: SPF, DKIM, DMARC, blacklist-status en MX-recordconfiguratie op één plek. Maak dit onderdeel van je pre-launch checklist voor elke nieuwe applicatie of elk nieuw verzenddomein. Bekijk daarnaast de richtlijnen van OWASP voor beveiligingsgerelateerde e-mailbestpractices.

Bouncepercentage en spamklachten: de cijfers die tellen

Twee cijfers hebben een buitenproportioneel effect op de bezorgbaarheid op lange termijn: het bouncepercentage en het spamklachtpercentage. Een bouncepercentage boven 2% vertelt ontvangende servers en je verzendprovider dat je naar veel ongeldige of niet-bestaande adressen stuurt — een patroon dat wordt geassocieerd met gekochte adressenlijsten en spamoperaties. Zelfs als je al het andere goed doet, veroorzaakt een hoog bouncepercentage bezorgproblemen. Verwijder harde bounces onmiddellijk en permanent uit je verzendlijst.

Een spamklachtpercentage boven 0,1% (één klacht per duizend verzonden e-mails) is de grens waarboven de meeste verzendproviders je account beginnen te beperken. Gmails Postmaster Tools rapporteren klachtpercentages direct als je die hebt ingesteld. Monitor deze cijfers via het dashboard van je verzendprovider. Als de klachtpercentages stijgen, zoek dan uit waarom — stuur je naar gebruikers die zich niet expliciet hebben aangemeld? Verstuur je te vaak? Zit er een verschil tussen wat gebruikers verwachtten en wat ze krijgen?

Volledige bezorgbaarheidschecklist

  • SPF-record: DNS TXT-record op je verzenddomein met alle geautoriseerde verzendservers. Test met MXToolbox.
  • DKIM: Cryptografische ondertekening ingesteld via je verzendprovider, publieke sleutel gepubliceerd in DNS.
  • DMARC: Begin met p=none-monitoring, ga daarna naar p=quarantine en vervolgens p=reject na het beoordelen van de geaggregeerde rapporten.
  • Gespecialiseerde verzendprovider: Gebruik SendGrid, SES, Postmark of Mailgun — niet je applicatieserver of gedeelde SMTP.
  • Heldere onderwerpregels: Specifiek, relevant, geen triggerwoorden, geen overdreven interpunctie of hoofdletters.
  • HTML + plattetekst: Stuur altijd beide mee. Verstuur nooit HTML-only e-mails.
  • Geen URL-shorteners: Gebruik volledige, directe URL's in de e-mailtekst en in verificatielinks.
  • Afmeldlink: Voeg die waar passend ook in transactionele e-mail toe — sommige providers vereisen het.
  • Fysiek adres: Vereist door CAN-SPAM en vergelijkbare regelgeving in veel rechtsgebieden.
  • Verwerking van harde bounces: Direct verwijderen; probeer een harde bounce nooit opnieuw.
  • Klachtenmonitoring: Zet Gmail Postmaster Tools op; volg het klachtpercentage in het dashboard.
  • Inboxtest: Stuur test-e-mails naar verse tijdelijke inboxen voor elke deployment en na elke template- of configuratiewijziging.
  • MXToolbox-gezondheidscheck: Neem die op in je pre-launch checklist voor elk nieuw domein en elke nieuwe omgeving.
SPF, DKIM en DMARC zijn geen optionele extra's voor volwassen systemen — het zijn basisvereisten voor betrouwbare e-mailbezorging. Stel ze in vóór je eerste productie-e-mail, niet nadat je een probleem hebt opgemerkt. Controleer de bezorgbaarheid via een verse wegwerp-inbox voor elke launch.

Wanneer je een gespecialiseerde dienst voor transactionele e-mail moet gebruiken

Als je applicatie ook maar één e-mail verstuurt die de gebruiker moet ontvangen om iets te kunnen doen — verificatielinks, wachtwoordresets en de bevestigingen die een volledig aanmeld- en betaaltraject afsluiten — dan zou je vanaf dag één een gespecialiseerde provider voor transactionele e-mail moeten gebruiken. De kosten zijn laag (vaak gratis tot tienduizenden e-mails per maand), de betrouwbaarheid is dramatisch beter dan zelfgebouwde SMTP, en de bezorginfrastructuur — gedeelde IP-pools met beheerde reputatie, automatische DKIM-ondertekening, verwerking van bounces en klachten — wordt onderhouden door teams wier enige taak is e-mail in inboxen te houden.

De meest gemaakte doe-het-zelffout is een mailserver draaien op hetzelfde IP als je webapplicatie, of de meegeleverde SMTP-dienst van een goedkope hoster gebruiken. Zulke IP's worden routinematig op blocklists gezet door diensten als Spamhaus, omdat de hostingomgeving wordt gedeeld met kwaadwillenden. Overstappen naar een gespecialiseerde transactionele provider is meestal een middag werk en heeft direct een positief effect op de bezorgbaarheid. Het is een van de infrastructuurverbeteringen met de grootste hefboom die een klein team kan doorvoeren. Privacybewuste teams doen er goed aan ook de richtlijnen van de Electronic Frontier Foundation te lezen over verantwoord omgaan met gebruikersgegevens waar e-mail bij betrokken is. Daarnaast kan het controleren van adressen tegen bekende datalekdatabases via Have I Been Pwned je fraudepreventie aanvullen wanneer er nieuwe accounts worden aangemaakt.