Simple Mail Transfer Protocol

Simple Mail Transfer Protocol (SMTP) är det vanligaste kommunikationsprotokollet för att leverera elektronisk post. Den ursprungliga specifikationen av protokollet skriven av Jonathan B. Postel 1982 (RFC 821) var i kraft till 2001, med ett antal utökningar. Den nyare standarden (RFC2821) inarbetar flera av utökningarna men innebär i övrigt inga större förändringar.

Kommunikationen sker via TCP, normalt på port 25. På senare år har även port 587 börjat användas för att möjliggöra anpassningar för dagens verklighet där SMTP numera i stor utsträckning används av klientprogramvara som körs på en persondator. Under en period användes även port 465 för SMTPS, SMTP tunnlad genom SSL för att ge en krypterad förbindelse, men detta är förlegat och har ersatts av STARTTLS över valfri SMTP-förbindelse.

SMTP är ett enkelt protokoll och kan i ursprungsutförande bara överföra 7-bitars tecken. Det innebär att svenska tecken som å, ä och ö och binära filer (bilagor), inte kan överföras utan vidare. Därför används olika typer av kodning, till exempel quoted printable för att göra om 8-bitars tecken till 7-bitars vid överföringen.

E-post som består av flera delar sätts ofta samman enligt MIME-standarden.

Hur avgörs vart ett meddelande ska skickas? 
För att avgöra vilken SMTP-server som ska kontaktas för att leverera ett visst meddelande används DNS för att hämta information om mottagaradressens domän. DNS-specifikationen definierar en speciell pekartyp (resource record) för detta ändamål, nämligen MX (mail exchanger) som talar om namnet på den eller de SMTP-servrar som accepterar meddelanden för en viss domän. Om någon MX-pekare inte hittas skickas e-posten till den explicit angivna datorn.

Tillsammans med varje datornamn angivet som MX finns även ett heltal som beskriver i vilken ordning klienter ska försöka kontakta servrarna. Ett lägre tal innebär högre prioritet, och om två datorer har givits samma prioritet så ska slumpen avgöra vilken som ska kontaktas. Detta sätt att rangordna servrar gör det möjligt att sätta upp backupservrar som kan acceptera meddelanden när huvudservern är otillgänglig, och genom att sätta samma prioritet för flera datorer får man en enkel form av lastbalansering. Låt oss ta ett fiktivt exempel. Om ett meddelande ska skickas till nisse@example.com så görs en DNS-uppslagning för att få reda på eventuella MX-pekare för example.com:

 example.com MX      0      mail1.example.com.
 example.com MX      0      mail2.example.com.
 example.com MX      10     mail3.example.com.

Här finns det alltså tre MX-pekare för example.com. Dessa talar om att mail1.example.com eller mail2.example.com kontaktas i första hand, och om detta försök misslyckas ska mail3.example.com kontaktas.

En domän måste inte ha någon MX-pekare. Om en sådan saknas används i andra hand A-pekaren, det vill säga den pekartyp som normalt används för att omvandla datornamn till IP-adresser.

Numera används systemet med backupservrar mer sparsamt än tidigare. Dels för att nätet blivit mer tillförlitligt, men även för att många som skickar ut spam utnyttjar det faktum att backupservrar i allmänhet har svagare skydd mot spam än huvudservern.

Exempelkommunikation 

SMTP är textbaserat i likhet med många applikationsprotokoll på Internet. Det går alltså att med ett program som inte känner protokollet ta kontakt med en värddator och själv skriva in de kommandon som behövs (SMTP-trafik utåt är dock ofta spärrad av brandväggar, för att stoppa skräppost från kapade persondatorer). Ett testmeddelande kan till exempel skickas som följer. Den första raden är telnet-kommandot givet i Unix, nästa tre rader information från telnet-programmet, liksom den sista, raderna som börjar med tresiffriga statuskoder är serverns svar:
 $ telnet smtp.example.com smtp
 Trying 192.168.1.5...
 Connected to smtp.example.com.
 Escape character is '^]'.
 220 smtp.example.com ESMTP Sendmail ...
 HELO minmaskin.example.org
 250 smtp.example.org Hello minmaskin.example.org [192.0.2.12], pleased to meet you
 MAIL FROM: <user@example.org>
 250 2.1.0 <user@example.org>... Sender ok
 RCPT TO: <abc@example.com>
 250 2.1.5 <abc@example.com>... Recipient ok
 DATA
 354 Enter mail, end with "." on a line by itself
 From: user@example.org
 To: abc@example.com
 Subject: test
 
 Test test test
 
 .
 250 2.0.0 h1FEF2jR067645 Message accepted for delivery
 QUIT
 221 2.0.0 smtp.example.com closing connection
 Connection closed by foreign host.

Statuskoderna anger förloppet med tanke på program som tar kontakt, texterna som följer är avsedda för personer, antingen vid test som ovan eller då sessionen bifogas en felrapport. Den första siffran i koden är avsedd att ge tillräcklig information för att en enkel klient skall kunna avgöra huruvida den skall fortsätta, försöka på nytt senare eller ge upp helt.

Programvara 

På serversidan är följande programvaror vanliga:

 På Unix-plattformen:
 Communigate Pro
 Courier MTA
 Exim
 Postfix
 Qmail
 Scalix
 Sendmail
 På Microsoft Windows-plattformen:
 MDaemon
 Microsoft Exchange Server

Se även 
 POP3
 IMAP
 HTTP
 FTP

Källor

Externa länkar 

 RFC821 – Protokollspecifikationen för SMTP (1982)
 RFC2821 – Protokollspecifikationen för SMTP (2001). En uppdatering av RFC821 som ännu inte antagits som standard.
 RFC 5321 – Protokollspecifikationen för SMTP från 2008. En uppdatering av RFC821 som ännu inte antagits som standard.
 RFC822 – Specifikation av formatet för Internet-meddelanden (1981). Beskriver bl.a. tillåtna format för e-postadresser samt standardiserade fält i meddelandehuvudet.
 RFC2822 – Specifikation av formatet för Internet-meddelanden (2008). En uppdatering av RFC822 som ännu inte antagits som standard.

Applikationsskiktsprotokoll
E-post