# Simple Mail Transfer Protocol

Simple Mail Transfer Protocol (SMTP) is de de-facto-standaard voor het versturen van e-mail over het internet.
SMTP is een relatief simpel, tekstgebaseerd protocol: eerst wordt de afzender van het bericht gespecificeerd, daarna een of meerdere ontvangers en vervolgens de verzendgegevens en inhoud van het bericht. Het is gemakkelijk om een SMTP-server te testen door middel van het telnet-programma. SMTP gebruikt TCP-poort 25 voor de communicatie tussen SMTP-servers en poort 587 voor het aanmelden van nieuwe e-mailberichten door een e-mailclient. Poort 465 werd voorheen ook onofficieel gebruikt, maar is inmiddels uitgefaseerd, ondanks dat het nog steeds wordt toegestaan door verschillende servers.
Om de SMTP-server voor een domein te bepalen wordt het MX-record (MX = Mail eXchange) van DNS gebruikt.

## Geschiedenis

Het wereldwijde gebruik van SMTP begon in de vroege jaren tachtig. Toen was het een aanvulling voor UUCP. UUCP was geschikter om e-mail te versturen tussen computers die niet altijd verbonden waren. SMTP gaat ervan uit dat de ontvanger altijd verbonden is met het netwerk.
Sendmail was een van de eerste (zo niet het eerste) mail transfer agent-programma's die SMTP gebruikten.
Sinds 2001 bestaan ten minste 50 verschillende programma's die SMTP ondersteunen als client (zender van berichten) of server (ontvanger van berichten). Enkele populaire SMTP-serverprogramma's zijn Postfix (van IBM), Exim (van de Universiteit van Cambridge), qmail (van Daniel J. Bernstein), GroupWise (van Novell) en Microsoft Exchange Server.
SMTP kan als een puur ASCII-tekstprotocol binaire bestanden alleen versturen als deze van tevoren gecodeerd zijn in ASCII, bijvoorbeeld met base64. Om meerdere bijlagen te versturen worden standaarden zoals MIME gebruikt.

## Verzenden en ontvangen

Bij SMTP gaat het initiatief steeds uit van de verzender. Dit wordt ook wel 'pushing' of 'uploading' genoemd. Hiervoor is het gewenst dat de ontvanger op elk moment klaar staat. Aangezien particuliere computers meestal niet permanent met het internet verbonden zijn, is SMTP niet geschikt om een bericht bij de uiteindelijke bestemming af te leveren. Het bericht wordt daarom door de provider van de ontvanger bewaard totdat de ontvanger verbinding maakt met het internet en het bericht ophaalt. Dit ophalen geschiedt met een protocol als POP3 of IMAP, waarbij het initiatief van de ontvanger uitgaat. Dit heet dan ook 'pulling' of 'downloading'.

## Spam en de veiligheid van SMTP

Een van de beperkingen van het originele SMTP is dat er geen betrouwbare mogelijkheid is om na te gaan of de zender echt is wie hij beweert te zijn. Deze beperking wordt uitgebuit bij het versturen van spam, waarbij een fictieve afzender bij een e-mail kan worden opgegeven. Om spam te voorkomen blokkeren sommige providers poort 25 (de SMTP-serverpoort) voor klanten om te voorkomen dat een zogenaamde open relay server gestart kan worden door de gebruiker of malware. Poort 587, de SMTP-submissiepoort, wordt veelal niet geblokkeerd en heeft daarom de voorkeur voor het verzenden van e-mail. SMTP grondig veranderen of vervangen door een compleet nieuw protocol wordt niet mogelijk geacht omdat het zo veelvuldig verspreid en geïmplementeerd is.
Om deze reden is er een aantal protocollen ontwikkeld die SMTP moeten ondersteunen bij het herkennen van spam zoals Sender Policy Framework of DomainKeys Identified Mail. Hiermee kunnen domeinen aangeven welke servers namens hen e-mail mogen sturen zodat spam terug kan worden gedrongen.
Om vooralsnog te verifiëren of de afzender de server als relay mag gebruiken, werd de SMTP-AUTH-extensie ontwikkeld.

## Voorbeeld van een SMTP-sessie

De hieronder weergegeven sessie is een voorbeeld van SMTP. 'C' staat voor Client, en 'S' voor Server. Een SMTP-server draait normaal gesproken op poort 25 voor de onderlinge communicatie tussen SMTP-servers en op poort 587 voor het accepteren van nieuwe e-mail van een e-mailclient. Via telnet kan hiermee verbonden worden.
Steeds als de verzender een commando naar de server stuurt, geeft de server antwoord. Het antwoord is gedeeltelijk in voor mensen leesbare taal, wat handig is als telnet wordt gebruikt. Een e-mailclient zal deze teksten negeren.
Er wordt nu een SMTP-verbinding geopend met de server op host smtp.voorbeeld.nl:
De server geeft een 'greeting'-reply met code 220. De informatie die na de code wordt weergegeven is serverspecifiek. Het kán zijn dat een server een 554-code terugstuurt. Dat betekent dat de server de verbinding niet accepteert, maar het is niet verplicht om die code te sturen.
De client moet nu reageren met het HELO (hello)-commando:
(De client kan ook het EHLO (Extended Hello) -commando sturen, maar dan stuurt de server een lijst met extensies die hij ondersteunt.) Nu begint de SMTP-mailtransactie. De client begint met het MAIL-commando. Hier wordt de server verteld wat het e-mailadres van de afzender is:
Daarna wordt het e-mailadres van de ontvanger opgegeven via het RCPT TO (Recipient To) -commando:
De client reageert nu met het DATA-commando. Er kan nu data worden opgegeven. De client sluit af met een punt ('.') op een nieuwe regel:
De mail wordt nu in de verzendwachtrij geplaatst. De client kan nu de sessie beëindigen door het QUIT-commando te sturen:
* (en) RFC 1869: Defines the capability for SMTP service extensions, creating Extended SMTP, or ESMTP
* (en) RFC 1891: Delivery Status Notification (DSN) extension to SMTP
* (en) RFC 5321: The Simple Mail Transfer Protocol; it consolidates, updates, and clarifies several previous documents
* (en) RFC 2822: Internet (i.e. e-mail) Message Format, which obsoletes RFC 822
* (en) RFC 4409: Message Submission for Mail