Elektronisk post har funnits i en eller annan form så långt tillbaka som på 1960-talet. Människor lämnade meddelanden till varandra med hjälp av ett antal olika metoder på stordatorer, men det var inte förrän i augusti 1982 när Information Sciences Institute publicerade The Simple Mail Transfer Protocol (SMTP; RFC 821) som en standardiserad metod för att skicka och ta emot e-post föreslogs.
SMTP blev snabbt populärt på ARPANET och ersatte äldre och mer komplicerade metoder som användes för att flytta e-post från en stordator till en annan, och stöddes för första gången i slutet av 1982 av den tidiga e-postöverföringsagenten Sendmail i BSD 4.1c.
Protokollet har reviderats och utökats ganska regelbundet sedan dess, men den grundläggande metoden för att skicka e-post har i stort sett förblivit oförändrad.
Protokollet är ett textbaserat protokoll som ursprungligen inte stödde leverans av binära data. Eftersom protokollet var textbaserat var det dock lätt att implementera och underhålla. MIME (Multipurpose Internet Mail Extensions) blev populärt i slutet av 80-talet för kodning och sändning av binära data via SMTP. Idag är SMTP det dominerande protokollet för att skicka och ta emot e-post på Internet och det är viktigt för alla nätverksadministratörer att ha kunskap om detta protokoll.
Eftersom SMTP är textbaserat är det betydligt enklare att lära sig protokollet än många andra och ett program som kan skicka ASCII-data över TCP/IP-port 25, till exempel Telnet, är allt som krävs för att kommunicera direkt med en SMTP-server.
Mail skickas via SMTP i en transaktion, det vill säga om sändningen av meddelandet inte fullföljs helt och hållet och utan att generera ett fel släpps meddelandet. RFC 821 beskriver en transaktion som bestående av tre steg: ange en avsändare, ange en eller flera mottagare och sedan skicka själva meddelandet. Det är dock lättare att tänka sig att en SMTP-transaktion består av fem steg:
- Handskakning
- Skicka svarsadress
- Skicka mottagare
- Skicka meddelande Data
- Avsluta transaktionen
Handskakning
Vid anslutning till en SMTP-server på port 25 måste avsändaren av ett meddelande vänta på att mottagaren accepterar anslutningen och identifierar sig i följande format:
220 [domän] [Serviceinformation]
Exempel: 220 example.com Tjänsten är klar
Avsändaren måste sedan identifiera sig för mottagaren med hjälp av HELO-kommandot.
HELO [domän]
Exempel: HELO exempel.com
E-postservrarna förväntar sig att var och en identifierar sig med hjälp av ett domännamn som kan användas för att verifiera serverns identitet genom att göra en sökning i MX-registret. Den mottagande servern får dock inte avvisa anslutningen i detta skede även om avsändarens identitet inte kan verifieras och måste därför svara med
250 [Meddelande]
Exempel: 250 example.com Hej bob på example.com
Svarskod 250 är det generiska ‘OK’-svaret från en SMTP-server som anger att den senaste åtgärden slutfördes.
Skicka svar Adress:
När de två servrarna har utfört sin handskakning har SMTP-transaktionen startat och vi kan börja skicka kommandon till servern. Om du vill se vilka kommandon som stöds av servern kan du skicka kommandot HELP och SMTP-servern bör svara med ett meddelande som beskriver vilka kommandon som stöds.
För att vi ska kunna skicka ett meddelande till en användare på den här servern måste vi dock först ange en svarsadress. Svarsadressen måste anges först så att eventuella fel som uppstår under SMTP-transaktionen kan rapporteras till denna adress. För att göra detta använder vi kommandot ‘MAIL FROM:’:
MAIL FRÅN:
Exempel: MAIL FRÅN:
Notera tecknen Less than och Greater than. Dessa krävs enligt RFC 821 för att innehålla själva e-postadressen. Om adressen accepteras kommer SMTP att returnera ett 250 OK-svar.
Skicka mottagare
När vi har angett en svarsadress kan vi med SMTP identifiera mottagarna av meddelandet. För att göra detta använder vi kommandot ‘RCPT TO:’:
RCPT TO:
Exempel: RCPT TO:
Om du vill ange flera mottagare upprepar du bara kommandot för varje mottagare. Om mottagaren accepterar e-post för den här användaren och kan ta emot meddelandet vid den här tidpunkten ska den svara med 250 OK. Om e-postmeddelandet däremot inte accepteras för den här användaren skickas ett 550 failure-svar eller motsvarande felkod. Om vi får ett 250 OK-svar kan vi fortsätta att skicka meddelandedata.
Skicka meddelande Data
Att skicka data via SMTP är ganska enkelt, men meddelandeformaten kan vara ganska komplicerade, särskilt när man skickar binära bilagor. För att börja skicka data ska vi ge kommandot ‘DATA’ till vilket servern ska svara med 354 Intermediate reply. dvs:
354 Skriv in meddelande som slutar med “.” på en egen rad
Det enklaste meddelandet vi kan skicka är ett klartextmeddelande som inte kräver att vi använder det flerdelade MIME-meddelandeformatet. Alla meddelanden, oavsett om de är i klartext eller inte, avslutas med att man skickar en rad som bara innehåller ett punkttecken. Innan ett meddelande skickas kan du också skicka en del rubrikinformation, t.ex. datum, ämne, till, cc och från.
Exempel:
DATA
354 Skriv in meddelande som slutar med “.” på en egen rad
Ämne: Detta är ämnesraden i sms:et om abonnemanget
Och detta är meddelandetexten för meddelandet i klartext.
Om meddelandet accepteras returnerar SMTP-servern ett 250 OK-svar eller en felkod om transaktionen har misslyckats eller var ofullständig. Observera punkttecknet i slutet av raden i meddelandetexten, det är bara när ett punkttecken finns på en rad som servern slutar att lyssna efter data. Om avsändarservern skickar ett meddelande som skulle leda till att datasessionen avslutas i förtid, eftersom meddelandet innehåller ett enda punkttecken på en rad, bör den lägga till ytterligare ett punkttecken på raden.
Avsluta transaktionen
Fram till denna punkt anses allt som har skickats till den mottagande SMTP-servern vara disponibelt. Om kommandot ‘QUIT’ inte skickas innan anslutningen stängs kommer destinationsservern helt enkelt att radera all meddelandedata som har lagrats. Ursprungligen användes kommandot som ett elegant sätt att stänga en anslutning, men idag används det ofta för att representera en slutförd transaktion, eftersom många e-postservrar väntar på QUIT-kommandot innan de ställer posten i kö för att Message Transfer Agent ska kunna dirigera den vidare. När du har skickat QUIT-kommandot bör destinationsservern skicka ett 221-svar för att bekräfta att transaktionen har slutförts och att anslutningen stängs.
Om du håller på att lära dig SMTP-protokollet rekommenderas du att läsa RFC 821, 2476 och 2554. Du bör komma ihåg, särskilt när du läser RFC 821, att sedan 1982 har e-postservrar förändrats avsevärt delvis som svar på missbruk av spammare.
