Simple Mail Transfer Protocol

Z Wikipedie, otevřené encyklopedie

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 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 s rozšířením ESMTP). SMTP funguje nad protokolem TCP, používá port TCP/25 pro komunikaci mezi poštovními servery a port TCP/587 pro příjem e-mailů od e-mailových klientů.

Architektura pošty

Doručování elektronické pošty po Internetu se účastní tři druhy programů:

  • MUAMail User Agent, poštovní klient, který zpracovává zprávy u uživatele
  • MTAMail Transfer Agent, server, který se stará o doručování zprávy na cílový systém adresáta
  • MDAMail 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. Server naslouchá na portu TCP/25, ke kterému se může připojit (navázat TCP spojení) jiný server, který předá zprávu k doručení. Dále server naslouchá na portu TCP/587, ke kterému se připojují poštovní klienti (dříve se i pro tento účel používal port TCP/25). 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 (podle A/AAAA DNS záznamů).

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, IceWarp Mail 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 apod.), 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 nebo 587)
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ě.

Související články