Protokoly IMAP a POP3

Radek Hladík, xhladik2@fi.muni.cz


Obsah


Úvod

Protokoly IMAP a POP3 slouží k přístupu k poštovní schránce a ke zprávám v ní uloženým. Žádný z protokolů neumožňuje zprávy odesílat, na to se musí používat prokol SMTP. Starší protokol POP3 (Post Office Protocol 3) umožňuje pouze zprávy vyzvednout a smazat. Pozdější protokol IMAP(Internet Message Access Protocol) již nabízí mnohem sofistikovanější možnosti práce se zprávami přímo na serveru. Hlavní výhodou protokolu POP3 je jeho jednoduchost (existují 20KB velké binárky POP3 daemonů), naopak IMAP nabízí "luxusnější" práci s poštou na úkor složitosti serveru a klienta.

Oba protokoly používají spojení TCP a komunikace probíhá v režimu ASCII. Klient posílá serveru "human-readable" příkazy a dostává na ně většinou srozumitelnou odpověd. Proto je možné POP3 a IMAP servery ladit pomocí přikazu telnet server pop3 resp. telnet server imap .


Protokol POP3

Protokol POP3 je definován v RFC 1939 a standardně používá TCP spojení na portu 110. Po každém zadaném příkazu server odpoví. Pokud řádka začíná +, příkaz se provedl úspěšně, pokud začíná - , potom došlo k nějaké chybě...

Jak jsem již uvedl, protokol POP3 nabízí jednoduchou sadu příkazů pro stahování zpráv. Každé spojení prochází několika fázemi (viz. obrázek). Po zahájení TCP spojení se server nachází ve stavu autentizačním. V tomto stavu server očekává příkazy USER a PASS, pomocí kterých mu uživatel sdělí svoje přihlašovací údaje (cleartext). Pokud se server rozhodne, že mu požadované údaje postačují, přejde do stavu transakčního. V tomto stavu přijímá příkazy STAT, RETR, DELETE, LIST a další. Nakonec se příkazem QUIT přejde do stavu UPDATE, kde se uživatelem naznačené změny (mazání zpráv) provedou.

Fáze protokolu POP3

Obr. 1 Fáze a příkazy protokolu POP3

Příkazy protokolu POP3:
USER usernameZadání uživatelova jména
PASS hesloZadání uživatelova hesla
STATVrátí počet zpráv a velikost schránky
LISTVrátí seznam zpráv ve schránce, na každém řádku jednu zprávu (s číslem zprávy, které se později použije jako parametr pro další příkazy)
RETR cisloStažení zprávy s daným číslem
DELE cisloSmazání zprávy s daným číslem (nastaví příznak smazat, zprávy se smažou až ve fázi UPDATE)
NOOPNeprovede nic :)
RSETObnoví zprávy v této relaci smazané (vypne příznak smazat)
TOP cislo pocetVrátí počet řádek ze zprávy číslo cislo
QUITUkončí spojení a server přejde do stavu UPDATE a provede požadovaná smazání.

Rád bych podotkl, že protokol POP3 nijak neřeší konkurentní přístup ke zprávám nebo situaci, kdy zpráva dorazí ve chvíli kdy se se schránkou pracuje. Běžná praxe je, že při navázání TCP spojení server vytvoří kopii schránky a ve stavu UPDATE tuto kopii sesynchronizuje s původní schránkou.

Ukázka spojení s POP3 serverem:

# telnet 127.0.0.1 pop3
S:+OK POP3 radbook.twobears.cz v2001.78rh server ready
C:user radek
S:+OK User name accepted, password please
C:pass zrezivelaklikaodhladomorny
S:+OK Mailbox open, 1 messages
C:list
S:+OK Mailbox scan listing follows
S:1 434
S:.
C:retr 1
S:+OK 434 octets
S:Return-Path: <root@radbook.twobears.cz>
S:Delivered-To: radek@radbook.twobears.cz
S:Received: by radbook.twobears.cz (Postfix, from userid 0)
S:        id 73D4F47386; Sun, 26 Oct 2003 00:18:44 +0200 (CEST)
S:To: radek@radbook.twobears.cz
S:Subject: Test pro PV090
S:Message-Id: <20031025221844.73D4F47386@radbook.twobears.cz>
S:Date: Sun, 26 Oct 2003 00:18:44 +0200 (CEST)
S:From: root@radbook.twobears.cz (root)
S:Status:
S: 
S:Testovaci zprava.
S:.
C:dele 1
S:+OK Message deleted
C:quit
S:+OK Sayonara

Protokol IMAP

Protokol imap je definován v RFC 2060 a používá TCP spojení na port 143. Nabízí komfortnější práci se zprávami přímo na serveru a tím i možnost používat schránku z více míst/počítačů (a to i najednou). Běžně se dnes používá pro přístup k poště z počítače v kanceláři, z notebooku a třeba z internetové kavárny přes nějakého WWW klienta (Squriellmail). Zprávy označené jako přečtené z jednoho klienta se automaticky označí jako přečtené i na ostatních klientech. Protokol také umožňuje do schránky zprávy vkládat (užitečné například pro ukládání odeslaných zpráv na jedno místo). Toto s sebou přináší zvýšenou zátěž komunikačních linek. IMAP se dá používat i v režimu Offline. Další výhodou protokolu IMAP je podpora více autentizačních mechanizmů a lepší podpora protokolu SSL/TLS. To je důležité především v kombinaci s přístupem z nedůvěryhodných sítí. Další skvělá vlastnost tohoto protokolu je možnost na serveru vytvářet podsložky, takže je možné poštu přehledně třídit již na straně serveru (procmail). Protokol také specifikuje příkazy pro server-side vyhledávání a přesunování zpráv mezi složkami.

Jednotlivé příkazy se obdobně jako u protokolu POP3 zadávají ve formátu ASCII. Jedná se o slova, která poměrně přesně vystihují požadovanou operaci. Sada příkazů a jejich parametrů je již ovšem daleko rozsáhlejší než u protokolu POP3. Změnil se také způsob zapisování příkazů. Před každým příkazem musíme uvést libovolný identifikátor a server při odpovědi na daný příkaz použije tento zvolený identifikátor. To umožňuje lepší orientaci v odpovědích serveru při zpracovávání více příkazů najednou.

Při připojení klienta na IMAP server je spojení ve stavu neautentifikovaném (viz obrázek). Uživatel musí provést autentifikaci, jinak nemůže se schránkou pracovat. Existuje i možnost nakonfigurovat server tak, že uživatele neautentifikuje, ale to není moc bezpečné. Pokud se uživatel pomocí příkazů LOGIN (jednoduchý login pomocí cleartext hesla, většinou se nepovoluje bez SSL/TLS zabezpečení) a AUTHENTICATE (složitější autentifikace, kdy se klient a server dohodnou na některém z bezpečnějších autentizačních mechanizmů a pomocí něj provedou authentifikaci) autentifikuje, pak se spojení dostane do autentifikovaného stavu. V něm může uživatel pracovat se složkami (vytvářet, mazat, přejmenovávat, zjištovat stav) a případně pomocí příkazů SELECT (r/w přístup) a EXAMINE (ro přístup) přejít do některé složky. V té potom může pracovat s jednotlivými zprávami.

Fáze protokolu IMAP

Obr. 1 Fáze protokolu IMAP

Některé příkazy protokolu IMAP:
LOGIN, AUTHENTICATEPřihlášení uživatele
CAPABILITIESZjištění možností serveru
CREATE,DELETE,RENAME,LISTPříkazy pro práci se složkami
COPY,FETCH,STORE,CLOSEPříkazy pro práci se zprávami
SEARCHVyhledávání ve zprávách
LOGOUTAč je to divné, tak ukončí spojení :)

Servery mají podporu pro konkurentní přístup více klientů (jakmile si jeden klient vyžádá r/w přístup, ostatním se přístup změní na ro) a umí řešit i zprávy přišlé během práce se složkou.

Příklad spojení s IMAP serverem:

# telnet 127.0.0.1 imap
S:* OK [CAPABILITY IMAP4REV1 LOGIN-REFERRALS STARTTLS AUTH=LOGIN] radbook.twobears.cz IMAP4rev1 2001.315rh at Sun, 26 Oct 2003 00:26:02 +0200 (CEST)
C:0001 LOGIN Radek zrezivelaklikaodhladomorny
S:0001 OK [CAPABILITY IMAP4REV1 IDLE NAMESPACE MAILBOX-REFERRALS SCAN SORT THREAD=REFERENCES THREAD=ORDEREDSUBJECT MULTIAPPEND] User Radek authenticated
C:0002 LIST "" "Inbox"
S:* LIST (\NoInferiors) NIL INBOX
S:0002 OK LIST completed
C:0003 SELECT "INBOX"
S:* 1 EXISTS
S:* 1 RECENT
S:* OK [UIDVALIDITY 1067120933] UID validity status
S:* OK [UIDNEXT 2] Predicted next UID
S:* FLAGS (\Answered \Flagged \Deleted \Draft \Seen)
S:* OK [PERMANENTFLAGS (\* \Answered \Flagged \Deleted \Draft \Seen)] Permanent flags
S:* OK [UNSEEN 1] first unseen message in /var/spool/mail/radek
S:0003 OK [READ-WRITE] SELECT completed
C:0004 FETCH 1 (RFC822)
S:* 1 FETCH (RFC822 {419}
S:Return-Path: <root@radbook.twobears.cz>
S:Delivered-To: radek@radbook.twobears.cz
S:Received: by radbook.twobears.cz (Postfix, from userid 0)
S:        id 03AFE47386; Sun, 26 Oct 2003 00:26:00 +0200 (CEST)
S:To: radek@radbook.twobears.cz
S:Subject: Test pro PV090
S:Message-Id: <20031025222600.03AFE47386@radbook.twobears.cz>
S:Date: Sun, 26 Oct 2003 00:26:00 +0200 (CEST)
S:From: root@radbook.twobears.cz (root)
S: 
S:Testovaci zprava
S:)
S:0004 OK FETCH completed
C:0005 STORE 1 +FLAGS (\Deleted)
S:* 1 FETCH (FLAGS (\Recent \Seen \Deleted))
S:0005 OK STORE completed
C:0006 EXPUNGE
S:* 1 EXPUNGE
S:* 0 EXISTS
S:* 0 RECENT
S:0006 OK Expunged 1 messages
C:0007 CLOSE
S:0007 OK CLOSE completed
C:0008 LOGOUT
S:* BYE radbook.twobears.cz IMAP4rev1 server terminating connection
S:0008 OK LOGOUT completed

Instalace a konfigurace

Daemonů pro provoz POP3 serverů je k dispozici značné množství a jejich konfigurace je většinou poměrně jednoduchá. Většinou stačí zadat cestu ke schránkám se zprávami a určit způsob autentifikace. Ještě je doporučováno zabezpečit daemon pomocí TLS/SSL. POP3 servery také často bývají součástí IMAP serverů.

Serverů pro provoz služby IMAP už je k dispozici méně, ale snad každá distribuce obsahuje některý z nich ve formě balíčku. Instalace základního IMAP daemona je většinou poměrně jednoduchá a bývá velmi dobře popsána v dokumentaci k vaší distribuci. Překlad ze zdrojových kódů nebývá o moc těžší, jen je potřeba zvolit vhodný daemon (podpora mailbox,Maildir,PAM,virtuální uživatelé,...).


Odkazy

Squrrielmail
Cyrus IMAPd
Courier IMAPd
Washington IMAPdl
RFC 2060
RFC 1939