Elektronische post bestaat in de een of andere vorm al sinds de jaren 1960. Mensen lieten berichten voor elkaar achter via een aantal verschillende methoden op mainframe computers, maar pas in augustus 1982, toen het Information Sciences Institute The Simple Mail Transfer Protocol (SMTP; RFC 821) publiceerde, werd een gestandaardiseerde methode voor het verzenden en ontvangen van e-mail voorgesteld.
SMTP werd snel populair op het ARPANET en verving oudere, meer gecompliceerde methodes om mail van het ene mainframe naar het andere te verplaatsen. Het werd eind 1982 voor het eerst ondersteund door de vroege Mail Transfer Agent Sendmail in BSD 4.1c.
Het protocol is sindsdien vrij regelmatig herzien en uitgebreid, maar de fundamentele methode voor het verzenden van mail is grotendeels ongewijzigd gebleven.
Het protocol is een tekstgebaseerd protocol, dat oorspronkelijk geen ondersteuning bood voor het leveren van binaire gegevens. Omdat het echter op tekst gebaseerd is, was het protocol eenvoudig te implementeren en te onderhouden. Eind jaren 80 werd MIME (Multipurpose Internet Mail Extensions) populair voor het coderen en verzenden van binaire gegevens via SMTP. Vandaag de dag is SMTP het dominante protocol voor het verzenden en ontvangen van e-mail op het internet en kennis van dit protocol is essentieel voor elke netwerkbeheerder.
Omdat SMTP op tekst gebaseerd is, is het leren van het protocol aanzienlijk eenvoudiger dan vele andere en een programma dat ASCII-gegevens over TCP/IP poort 25 kan verzenden, zoals Telnet, is alles wat nodig is om direct met een SMTP-server te communiceren.
Mail wordt via SMTP verzonden in een transactie, dat wil zeggen dat als het verzenden van het bericht niet volledig en zonder een fout te genereren wordt voltooid, het bericht wordt verwijderd. RFC 821 beschrijft een transactie als bestaande uit drie fasen: een afzender specificeren, een of meer ontvanger(s) opgeven en vervolgens het bericht zelf verzenden. Het is echter eenvoudiger om een SMTP transactie te zien als 5 stappen:
- Handdruk
- Antwoordadres verzenden
- Ontvangers verzenden
- Berichtgegevens verzenden
- Einde transactie
Handdruk
Bij het maken van een verbinding met een SMTP-server op poort 25 moet de verzender van een bericht wachten tot de ontvanger de verbinding accepteert en zich identificeert in het volgende formaat:
220 [domein] [service-informatie].
Voorbeeld: 220 example.com Service gereed
De zender moet zich dan identificeren bij de ontvanger met het HELO commando.
HELO [domein]
Voorbeeld: HELO example.com
De mailservers verwachten dat elke server zichzelf identificeert met behulp van een domeinnaam die kan worden gebruikt om de identiteit van de server te verifiëren door een MX record lookup uit te voeren, maar de ontvangende server mag de verbinding in dit stadium niet weigeren, zelfs als de identiteit van de afzender niet kan worden geverifieerd en moet dus antwoorden met:
250 [Bericht]
Voorbeeld: 250 example.com Hallo bob op example.com
Antwoordcode 250 is het algemene ‘OK’-antwoord van een SMTP-server om aan te geven dat de laatste actie met succes is voltooid.
Antwoord verzenden Adres:
Zodra de twee servers hun handdruk hebben uitgevoerd, is de SMTP-transactie gestart en kunnen we beginnen met het verzenden van commando's naar de server. Als je wilt zien welke commando's door de server worden ondersteund, stuur dan het commando HELP en de SMTP-server zou moeten reageren met een bericht waarin staat welke commando's worden ondersteund.
Als we een bericht naar een gebruiker op deze server willen sturen, moeten we eerst een antwoordadres instellen. Het antwoordadres moet eerst worden opgegeven zodat eventuele fouten tijdens de SMTP-transactie aan dit adres kunnen worden gemeld. Om dit te doen gebruiken we het commando ‘MAIL FROM:’:
MAIL VAN:
Voorbeeld: MAIL VAN:
Let op de tekens Less than en Greater than. Deze zijn vereist door RFC 821 om het e-mailadres zelf te bevatten. Als het adres wordt geaccepteerd, stuurt SMTP een antwoord van 250 OK terug.
Ontvangers verzenden
Na het instellen van een antwoordadres stelt SMTP ons in staat om de ontvangers van het bericht te identificeren. Hiervoor gebruiken we het commando ‘RCPT TO:’:
RCPT AAN:
Voorbeeld: RCPT TO:
Als de ontvanger mail voor deze gebruiker accepteert en het bericht op dit moment kan accepteren, moet hij antwoorden met een 250 OK antwoord. Als de mail voor deze gebruiker echter niet wordt geaccepteerd, wordt een antwoord met 550 mislukt of de juiste foutcode verzonden. Als we een antwoord van 250 OK ontvangen, kunnen we doorgaan met het verzenden van de berichtgegevens.
Berichtgegevens verzenden
Het verzenden van gegevens via SMTP is vrij eenvoudig, maar berichtformaten kunnen vrij ingewikkeld zijn, vooral als het gaat om het verzenden van binaire bijlagen. Om te beginnen met het verzenden van gegevens moeten we het commando ‘DATA’ geven waarop de server moet antwoorden met 354 Intermediate reply. d.w.z.:
354 Bericht invoeren, eindigend op “.” op een eigen regel
Het eenvoudigste bericht dat we kunnen versturen is een bericht in platte tekst, waarvoor we het MIME-formaat met meerdere delen niet hoeven te gebruiken. Alle berichten, platte tekst of anderszins, worden beëindigd met een regel die alleen een punt bevat. Voordat een bericht wordt verzonden, kun je ook wat header-informatie meesturen, zoals Datum, Onderwerp, Aan, Cc en Van.
Voorbeeld:
GEGEVENS
354 Bericht invoeren, eindigend op “.” op een eigen regel
Onderwerp: Dit is de onderwerpregel van het sms-bericht van het plan
En dit is de body van het bericht in platte tekst.
Als dit wordt geaccepteerd, stuurt de SMTP-server een antwoord terug met 250 OK of een foutcode als de transactie is mislukt of onvolledig was. Let op het puntteken aan het einde van de regel van de berichttekst, alleen als er een puntteken op een regel staat stopt de server met luisteren naar gegevens. Als de server van de afzender een bericht verstuurt dat ertoe zou leiden dat de gegevenssessie voortijdig wordt afgesloten, moet hij een extra punt aan de regel toevoegen omdat het bericht een enkel puntteken op een regel bevat.
De transactie beëindigen
Tot dit punt wordt alles dat naar de ontvangende SMTP server is verzonden beschouwd als wegwerpbaar. Als het commando ‘QUIT’ niet wordt verzonden voordat de verbinding wordt gesloten, verwijdert de bestemmingsserver simpelweg alle berichtgegevens die zijn opgeslagen. Oorspronkelijk werd het gebruikt als een sierlijke manier om een verbinding te sluiten, maar tegenwoordig wordt het vaak gebruikt om een voltooide transactie weer te geven, waarbij veel mailservers wachten op het QUIT commando voordat ze de mail in de wachtrij zetten voor de Message Transfer Agent om te routeren. Als je het QUIT commando hebt verzonden, moet de bestemmingsserver een 221 Reply sturen om te bevestigen dat de transactie is voltooid en de verbinding wordt gesloten.
Als je het SMTP protocol aan het leren bent, is het aan te raden om RFC 821, 2476 en 2554 te lezen. Je moet onthouden, vooral bij het lezen van RFC 821, dat sinds 1982 Email servers aanzienlijk zijn veranderd, deels als reactie op misbruik door spammers.
