In dit artikel wil ik jullie graag meenemen in de wonderlijke wereld van e-mail routering. Het lijkt zo simpel: je stelt een e-mail op, klikt op ‘verzenden’ en het komt terecht bij de ontvanger. Echter, wat gebeurt er dan precies achter de schermen? Hoe kun je zien welk pad de e-mail heeft afgelegd? En hoe weet een mailserver überhaupt wat er met de e-mail moet gebeuren? Op deze vragen geef ik je graag antwoord.
Allereerst een kleine disclaimer. Om het toegankelijk te houden, ga ik een aantal zaken bewust versimpeld weergeven. Daarom ga ik niet in op bijvoorbeeld ‘MIME’ en hoe BCC-ontvangers in een e-mail afgehandeld worden. Dat gezegd hebbende, laten we beginnen!
1. De opbouw van een e-mail
Een e-mail is simpelweg een tekstbestand, je kunt het openen in elk willekeurig tekstverwerkingsprogramma om de inhoud ervan te zien. Het tekstbestand is opgebouwd uit een tweetal onderdelen:
- de headers;
- de body.
1.1 De headers
Headers zijn de metadata van een e-mail. Deze blokken tekst worden door de mailserver gebruikt om te bepalen wat er met de e-mail moet gebeuren en wat ermee is gedaan. Wie is bijvoorbeeld de ontvanger en de afzender van de e-mail? Een aantal headers zijn nodig om er zeker van te zijn dat een e-mail geaccepteerd wordt, heel veel anderen zijn optioneel.
De verplichte headers zijn:
- To: niet geheel verrassend geeft deze header aan waar de e-mail naartoe moet worden verstuurd (e.g. To: support@antagonist.nl);
- From: de afzender van een e-mail. E-mailprogramma’s gebruiken dit om aan te geven wie de e-mail heeft verzonden;
- Subject: het onderwerp van de e-mail;
- Date: geeft aan wanneer de e-mail ‘op de post’ is gedaan.
Kanttekening
Voor het gemak heb ik bij ‘From’ alle andere types headers die min of meer hetzelfde doel hebben achterwege gelaten (e.g. ‘Sender’, ‘Reply-to’ en ‘Return-path’). ‘From’ wordt door een mailserver ook gebruikt om ‘bounce messages’ naar te versturen. Iets verderop in dat artikel lees je daar meer over.
Als een mailserver of een e-mailprogramma een e-mail verwerkt, dan worden headers toegevoegd (en in sommige situaties verwijderd). Het doel hiervan is om een andere mailserver of e-mailprogramma inzicht te geven wat er met de e-mail is gebeurd en hoe hij behandeld zou moeten worden.
1.2 De body
De ‘body’ is de daadwerkelijke inhoud van de e-mail, de tekst die jij hebt getypt. Om aan te geven waar de headers ophouden en de body begint, wordt er gebruikgemaakt van een witregel. Alles wat na de headers en witregel komt, wordt dus beschouwd als de inhoud van de e-mail. Een mailserver wijzigt nooit wat aan de body van de e-mail. Deze wordt dus net zo doorgestuurd, zoals hij is ontvangen.
2. Verwarring over inkomende en uitgaande e-mail
Er is vaak verwarring over inkomende en uitgaande e-mail. Voor het overzicht:
- onder uitgaande e-mail wordt vaak ‘SMTP’ (Simple Mail Transfer Protocol) verstaan;
- onder inkomende e-mail wordt vaak ‘POP3’ (Post Office Protocol) of ‘IMAP’ (Internet Message Access Protocol) verstaan.
Vanuit het perspectief van de eindgebruiker lijkt dit logisch, maar het zijn eigenlijk verschillende systemen. De protocollen POP3 en IMAP worden namelijk enkel en alleen gebruikt voor het ophalen van e-mail uit je mailbox op een mailserver.
SMTP is het protocol dat wordt gebruikt voor het versturen van e-mail tussen mailservers. Als een mailserver e-mail verstuurt, dan houdt dit in dat een ander systeem e-mail ontvangt. SMTP is dus een protocol voor zowel inkomende als uitgaande e-mail. POP3 en IMAP wordt gebruikt om de e-mail in je mailbox uit te lezen.
3. Inkomende mail
De mailqueue
Voordat we naar inkomende mail gaan kijken, is het belangrijk om bekend te zijn met de mailqueue. Dit is de wachtrij voor e-mail die niet direct kan worden afgeleverd. De wachtrij is erg belangrijk en mag nooit verloren gaan. Eens per periode wordt er opnieuw een poging gedaan om een e-mail af te leveren.
3.1 IP-controle
Voordat een mailserver een aangeboden e-mail accepteert, zijn er een aantal zaken die de mailserver controleert. Dit is om bijvoorbeeld SPAM en andere vormen van misbruik en misconfiguraties tegen te gaan. De eerste stap die altijd bij ons wordt uitgevoerd, is het controleren of het verzendende adres op een blacklist staat. Is dit het geval, dan wordt een e-mail keihard geblokkeerd, hij komt er niet in.
Vervolgens controleren we of we eerder e-mail hebben ontvangen van de zender en de ‘forward- en reverse-DNS’ consistent is. Wanneer dit niet het geval is, dan blokkeren we deze e-mail tijdelijk voor vijf minuten. Dit mechanisme wordt ‘greylisting’ genoemd en helpt erg goed tegen plotselinge SPAM-uitbraken.
3.2 Ontvanger-controle
Nadat de IP-controles zijn uitgevoerd, wordt er gekeken naar de ontvanger van de e-mail. Hiervoor wordt de ‘To:-header’ gebruikt. Is dit adres bekend in het systeem? Zo ja, dan wordt de e-mail geaccepteerd om daarna in de mailbox van de ontvanger te worden afgeleverd.
Is de ontvanger geen lokaal adres en deze mailserver functioneert als doorgeefluik, ook wel ‘SMTP-relay’ genoemd, dan controleert de mailserver of degene die deze e-mail aanbiedt een geauthenticeerde gebruiker is. De verzender moet dus ingelogd zijn, anders wordt de e-mail niet geaccepteerd.
Is dit systeem de eindontvanger van de e-mail of hebben we te maken met SMTP-authenticatie? Zo ja, dan accepteren we de e-mail voor verdere verwerking. Het eerste wat een mailserver dan doet, is bovenop de bestaande headers, nog een header toevoegen. In deze header staat wat deze mailserver met de e-mail heeft gedaan. In dit geval geeft het aan dat het bericht in ontvangst is genomen van server s151.webhostingserver.nl met IP-adres 2a03:3c00:a002:151::1.
3.3 SPAM-controle
Nadat het verzendende IP-adres is goedgekeurd, wordt de e-mail op SPAM gecontroleerd. SpamAssassin, de spamfiltersoftware die we gebruiken, geeft een positieve of negatieve score aan de e-mail en voegt dit als header toe aan de e-mail. Afhankelijk van je instellingen en of het wel/geen SPAM is, wordt de e-mail verwijderd, gemarkeerd als SPAM of blijft het ongewijzigd. SpamAssassin stuurt dan de gescande e-mail terug naar de mailserversoftware en komt terug in de wachtrij te staan.
3.4 Aflevering in de wachtrij
Na de SPAM-controle wordt de e-mail in de lokale wachtrij (mailqueue) gezet en wordt de eerste poging tot aflevering gedaan. Bij deze poging wordt er eerst gekeken of de ontvanger op dit systeem staat. Wanneer dit het geval is, dan is het gemakkelijk: de e-mail wordt in de mailbox van de gebruiker geplaatst en uit de wachtrij gehaald. Bestaat de gebruiker niet op dit systeem, dan wordt de e-mail verstuurd naar een externe mailserver.
4. Uitgaande mail
Bij het afhandelen van uitgaande e-mail wordt er gekeken naar wat er in de wachtrij staat. Zodra een e-mail in de wachtrij wordt gezet, dan wordt gelijk de eerste afleverpoging gedaan. Bij elke afleverpoging wordt er bij de DNS-server de ‘MX-records’ van het domein opgevraagd. Wij gebruiken bijvoorbeeld G Suite voor onze e-mail.
Zoals je kunt zien, zijn er meerdere MX-records ingesteld. Dit heeft als doel om de beschikbaarheid te verhogen. Een mailserver probeert eerst het adres met de laagste prioriteit. Deze prioriteit wordt aangegeven met het nummer voor het adres. In het geval hierboven wordt eerst ASPMX.L.GOOGLE.COM. geprobeerd. Is deze niet bereikbaar, dan wordt het volgende nummer geprobeerd. Dit gaat door, totdat alle MX-records geprobeerd zijn of de e-mail is afgeleverd.
4.1 Bounce message
Als een e-mail niet in de eerste poging wordt afgeleverd, dan wordt er met intervallen opnieuw een poging gedaan. Gedurende het eerste uur proberen we het ieder kwartier opnieuw. Daarna proberen we het gedurende zestien uur, ieder uur. Tevens verhogen we de tijd, tot het volgende moment, iedere keer met factor anderhalf.
Lukt het binnen dit tijdsbestek nog steeds niet, dan proberen we het vier dagen lang elke acht uur. Als ook deze pogingen falen, dan sturen we het bericht terug naar de verzender met de melding dat de aflevering niet gelukt is. Dit heet een ‘bounce message’.
Wanneer het afleveren van de e-mail wel succesvol was, dan wordt de e-mail uit de wachtrij verwijderd en is de externe mailserver verantwoordelijk voor het verder afhandelen van de e-mail.
Tot slot
Nu we de inkomende en uitgaande e-mail, en de wachtrij hebben besproken, zijn we aan het einde beland van dit artikel. Er gebeurt erg veel achter de schermen om een simpele e-mail van A naar B te krijgen en dat vaak in slechts enkele seconden! Hopelijk heb ik met dit artikel je meer inzicht kunnen geven in de processen erachter! Bekijk zelf de headers van een e-mail maar eens. Er gaat een wereld voor je open 🙂
Wil je af van je @gmail.com- of @live.com-adres en wil je een e-mailadres gebaseerd op je eigen domeinnaam gaan gebruiken? In onze webhostingpakketten mag je onbeperkt veel e-mailadressen aanmaken. Neem dus gerust eens een kijkje!
P.S. Wil je op de hoogte blijven van alle artikelen, updates, tips en trucs die verschijnen op ons blog? Dat kan! Rechts bovenin via RSS, e-mail, het liken op Facebook, het +1’en op Google+ of het volgen op Twitter.