Simple Mail Transfer Protocol

Från Wikipedia
Hoppa till: navigering, sök
Protokollstack för IP-nätverk
IP-skikt
Protokoll
5. Applikation  BitTorrent | DHCP | DNS | FTP | HTTP | IMAP | IRC | NNTP | POP3 | RTP | SIP | SMTP | SNMP | SSH | Telnet | TLS | SSL | TFTP
4. Transport DCCP | SCTP | TCP | UDP | IL | RUDP
3. Nätverk ARP | BGP | ICMP | IGMP | IP (IPv4 | IPv6) | RIP
2. Länk ATM | Ethernet | FDDI | ISDN | MPLS | Token Ring | PPP | SLIP | Wi-Fi
1. Fysiskt IEEE 802 | ISDN | RS-232 | IrDA | Bluetooth | xDSL

Simple Mail Transfer Protocol (SMTP) är det vanligaste kommunikationsprotokollet för att leverera elektronisk post. Den nuvarande specifikationen av protokollet skrevs av Jonathan B. Postel 1982, men protokollet har sedan dess fått utökningar som går utanpå den ursprungliga specifikationen.

Kommunikationen sker via TCP, normalt på port 25.[1] 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.[2] 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 ö eller filer, så kallade 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.[3]

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

Hur avgörs vart ett meddelande ska skickas?[redigera | redigera wikitext]

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.[4] 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.[5] 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[redigera | redigera wikitext]

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.[6]

Programvara[redigera | redigera wikitext]

På serversidan är följande programvaror vanliga:

Källor[redigera | redigera wikitext]

  1. ^ IANA Port Numbers
  2. ^ RFC 2476: 1. "Abstract". Sammanfattningen beskriver tankegången bakom denna nya TCP-port
  3. ^ RFC 2045: 1. "Introduction" Presentation av MIME-standarden och bristerna i den tidigare e-poststandarden
  4. ^ RFC 1034: 3.6. Resource Records
  5. ^ RFC 2821: 5. Address Resolution and Mail Handling
  6. ^ RFC 821: Bilaga E "Theory of Reply Codes" samt RFC 2821: 4.2.1 "Reply Code Severities and Theory"

Se även[redigera | redigera wikitext]

Externa länkar[redigera | redigera wikitext]

  • RFC821 - Protokollspecifikationen för SMTP.
  • RFC2821 - Protokollspecifikationen för SMTP. En uppdatering av RFC821 som ännu inte antagits som standard.
  • RFC 5321 - Protokollspecifikationen för SMTP. En uppdatering av RFC821 som ännu inte antagits som standard.
  • RFC822 - Specifikation av formatet för Internet-meddelanden. Beskriver bl.a. tillåtna format för epostadresser samt standardiserade fält i meddelandehuvudet.
  • RFC2822 - Specifikation av formatet för Internet-meddelanden. En uppdatering av RFC822 som ännu inte antagits som standard.
  • RFC1870 - Specifikation av den SMTP-utökning som möjliggör att klienter anger storleken på ett meddelanden innan det skickas.
  • RFC3207 - Specifikation av den SMTP-utökning som tillåter att SMTP-trafik autentiseras och krypteras via TLS.
  • RFC2920 - Specifikation av den SMTP-utökning som tillåter pipelining av kommandon, det vill säga att klienten skickar flera kommandon på en gång.
  • RFC2476 - Specifikation för Message Submission (TCP port 587)