Simple Mail Transfer Protocol
Simple Mail Transfer Protocol (zkratka
SMTP) je internetový protokol určený pro přenos zpráv elektronické pošty
(e-mailů) mezi přepravci elektronické pošty (MTA). Protokol zajišťuje doručení
pošty pomocí přímého spojení mezi odesílatelem a adresátem; zpráva je doručena
do tzv. poštovní schránky adresáta, ke které potom může uživatel kdykoli
(off-line) přistupovat (vybírat zprávy) pomocí protokolů POP3 nebo IMAP. Jedná
se o jednu z nejstarších aplikací, původní norma RFC 821 byla vydána v roce 1982
(v roce 2001 ji nahradila novější RFC 2821). SMTP funguje nad protokolem TCP,
používá port TCP/25.
Architektura pošty
Doručování elektronické pošty po Internetu se účastní tři
druhy programů:
MUA -
Mail User Agent, poštovní klient, který zpracovává zprávy u uživatele
MTA -
Mail Transfer Agent, server, který se stará o doručování zprávy na cílový systém
adresáta
MDA - Mail Delivery Agent, program pro lokální doručování, který
umísťuje zprávy do uživatelských schránek, případně je může přímo automaticky
zpracovávat (ukládat přílohy, odpovídat, spouštět různé aplikace pro zpracování
apod.)
Poštovní klient
Poštovní klient je program, který zajišťuje
odesílání zpráv a vybírání schránek. Příkladem je např. Microsoft Outlook,
Mozilla Thunderbird, Opera, Mutt, Pine a další. Je to v podstatě specializovaný
editor, který umí kromě vytvoření zprávy také manipulovat se schránkami, odeslat
zprávu nejbližšímu MTA a převzít zprávu ze serveru prostřednictvím POP3 nebo
IMAP. Vlastním doručováním zprávy po síti až k adresátovi se klient nezabývá.
Součástí klienta bývá také více či méně složitý adresář, který pomáhá uživateli
udržet přehled o adresách.
Poštovní server
Poštovní server (MTA) běží obvykle jako démon či Služba
Windows a naslouchá na portu TCP/25. K tomuto portu se může připojit (navázat
TCP spojení) buď poštovní klient, nebo jiný server, který předá zprávu k
doručení. MTA zkontroluje, zda je zpráva určena pro systém, na kterém běží.
Pokud ano, předá ji programu MDA (lokální doručení). Pokud je zpráva určena
jinému počítači, naváže spojení s příslušným serverem a zprávu mu předá.
Při vyhledávání vzdáleného serveru, kterému má předat zprávu, musí MTA spolupracovat se systémem DNS. Od serveru DNS si vyžádá tzv. MX záznam pro cílovou doménu, který obsahuje IP adresu počítače, který se stará o doručení pošty v této doméně. Pokud DNS tento záznam neobsahuje, pokusí se poštovní server doručit zprávu přímo na počítač uvedený v adrese za zavináčem.
Poštovní server obsahuje v konfiguraci řadu parametrů, pomocí kterých můžeme mimo jiné nastavit, pro které domény MTA přijímá zprávy. Stejně tak je možné určit, od koho bude nebo nebude zprávy přijímat, což je velmi důležité z hlediska bezpečnosti a ochrany proti spamu.
Nejčastějšími programy v roli MTA jsou exim, IBM Lotus Domino, Mercury, Microsoft Exchange Server, postfix, qmail, sendmail aj.
Program pro lokální doručování
Server by mohl zprávy do uživatelských
schránek ukládat přímo, ale výhodnější je k tomu použít specializovaný program.
To umožňuje při doručování ještě dále zprávy zpracovávat nebo filtrovat.
Příkladem může být třídění zpráv do různých schránek uživatele podle obsahu
(odesilatele, subjektu a pod.), nebo odstraňování nežádoucích zpráv (viry,
spam). Tyto volby si může každý uživatel nastavit samostatně nezávisle na
ostatních.
Typickými představiteli MDA jsou procmail a maildrop.
Formát zprávy
Formát zprávy popisuje norma RFC 2822, která v roce 2001
nahradila původní RFC 822 z roku 1982. Zpráva se skládá z hlavičky a těla
zprávy. Tělo může obsahovat kromě vlastní textové zprávy také volitelné přílohy
s libovolným obsahem.
Ukázka SMTP komunikace
Po ustanovení spojení mezi klientem a serverem dochází
k SMTP přenosu. V následující ukázce je vše, co začíná C:, odesláno klientem a
vše, co začíná S:, odesláno serverem.
C: navázání spojení se serverem (zpravidla na TCP portu 25)
S: 220
mail.example.com ESMTP Postfix
C: HELO example.net
S: 250 Hello
example.net
C: MAIL FROM: <sender@example.net>
S: 250 Ok
C: RCPT TO:
<friend@example.com>
S: 250 Ok
C: DATA
S: 354 End data with
<CR><LF>.<CR><LF>
C: Subject: test message
C: From: sender@example.net
C: To: friend@example.com
C:
C: Hello,
C: This is a test.
C:
Goodbye.
C: .
S: 250 Ok: queued as 12345
C: QUIT
S: 221 Bye
Poznámka: Příkaz HELO se používá pro starší SMTP spojení, novější servery
používají ESMTP a příkaz EHLO:
S: 220 mail.example.com ESMTP Postfix
C: EHLO example.net
S:
250-mail.example.com
S: 250-EXPN
S: 250-HELP
S: 250 SIZE 1000000
C:
MAIL FROM:<sender@example.net> SIZE=500000
S: 250 Address Ok.
C: RCPT
TO:<friend@example.com>
S: 250 friend@example.com OK; can accomodate 500000
byte message
C: DATA
S: 354 Send message, ending in CRLF.CRLF.
...
C: .
S: 250 Ok
C: QUIT
S: 221 Goodbye
Chyby
Doprava dopisu
protokolem SMTP může selhat z mnoha různých příčin. SMTP protokol rozeznává dva
typy chyb. Trvalé chyby (jejich číselný kód začíná 5) jsou např. „uživatel
neexistuje“, „server neexistuje“. V případě trvalé chyby se odesílateli okamžitě
posílá zpráva o nedoručení a jeho příčině.
Dočasná chyba (její číselný kód začíná 4) může být způsobena např. tím, že cílový server je momentálně nedostupný, nekomunikuje nebo je zaneprázdněn. Odesílající server má v tom případě dopis uložit do fronty a po nějakou nastavenou dobu (typicky několik dní) by měly být činěny opakované pokusy (typicky po několika málo desítkách minut) o doručení. Některé servery posílají po několika hodinách neúspěšných pokusů odesílateli zprávu že doručení se prozatím nepodařilo, ale že to server bude zkoušet dál. Pokud pokusy o doručení jsou po nastavenou dobu neúspěšné, posílá se odesílateli zpráva o nedoručitelnosti a dopis se zahodí.
Zprávy o chybách a varováních bývají v angličtině.