POP3/IMAP servery

Zdeněk Crha, xcrha1@mail.muni.cz


Obsah


Proč POP3?

V internetu je zapojeno mnoho uzlů, pro které je nevýhodné provozovat plnohodnotný systém pro přenos zpráv. Může to být z důvodu nedostatku zdrojů, které by umožnily nechat běžet takový systém bez přestávky. V dnešní době se již s velkou pravděpodobností nebude jednat o místo na disku nebo výkon procesoru, ale jedním ze zdrojů může být i čas, po který je počítač připojen k internetu. Přesto ale potřebujeme, aby na takovém počítači byl přístup k poštovní schránce.

Jedním z řešení je POP3 (Post Office Protocol - Version 3) protokol. V praxi to vypadá tak, že poštovní schránka je umístěna na stroji, který je schopen přijímat a odesílat poštu. Uživatel, který chce s poštou pracovat se pomocí POP3 protokolu k takovému stroji připojí, stáhne zprávy na svůj disk. Stažené zprávy jsou ze serveru smazány. Veškerá pošta je tak zpracovávána na stroji klienta.

Jak funguje POP3 spojení?

Přístup ke službě POP3 probíhá tak, že klient ustanoví tcp spojení na port 110 stroje, na kterém běží POP3 server. Od okamžiku, kdy je spojení ustanoveno, a server klientovi pošle uvítací zprávu, může klient odesílat serveru příkazy a pracovat s požadovanou poštovní schránkou.

Příkazy se v POP3 protokolu skládají z klíčového slova, argumentů a jsou ukončeny kombinací CRLF. Klíčová slova a argumenty jsou složeny z tisknutelných ascii znaků u kterých nezáleží na velikosti.

Server klientovi odesílá odpověď ve tvaru indikátor stavu, klíčové slovo, případné dodatečné informace. Vše je opět ukončeno kombinací CRLF. Indikátory stavu jsou 2 ("+OK", "-ERR") a musí být psány velkými písmeny. V případě delší odpovědi server odešle více řádků následovaných řádkem .CRLF.

Stavy POP3 spojení

POP3 spojení ve svém průběhu prochází několika stavy. V některých stavech je omezena možnost zasílat serveru některé příkazy.

V okamžiku, kdy klient ustanoví spojení, se sezení nachází ve fázi autorizace. Zde se klient musí autentizovat serveru, poté přechází do fáze transakční. Toto je nejdůležitější fáze, zde klient pracuje se svou schránkou. V okamžiku, kdy klient odešle příkaz QUIT, sezení přechází do třetí, poslední, fáze - aktualizace. V této fázi server uvolní rezervované prostředky a dokončí práci se schránkou (např. smaže zprávy označené ke smazání).

Základní příkazy a ukázkové spojení

Základní příkazy:
USER name
PASS string
Příkazy sloužící k autentizaci klienta vůči POP3 serveru. Platné jen ve fázi autorizace.
QUIT Příkaz k ukončení spojení. Pokud je vydán ve fázi autorizace, spojení se pouze ukončí. Pokud ve fázi transakce, server ještě přejde do fáze aktualizace.
STAT Vypíše informace o schránce (počet zpráv a jejich celková velikost)
LIST [msg] Vypíše informace o zprávě číslo msg (její číslo a velikost).
RETR msg POP3 server odešle celou zprávu číslo msg.
DELE msg Označí zprávu číslo msg.
RSET Odznačí zprávy označené ke smazání (pokud tam jsou).

Ukázkové spojení (převzato z RFC 1939):
      S: [wait for connection on TCP port 110]
      C: [open connection]
      S:    +OK POP3 server ready [1896.697170952@dbc.mtview.ca.us]
      C:    APOP mrose c4c9334bac560ecc979e58001b3e22fb
      S:    +OK mrose's maildrop has 2 messages (320 octets)
      C:    STAT
      S:    +OK 2 320
      C:    LIST
      S:    +OK 2 messages (320 octets)
      S:    1 120
      S:    2 200
      S:    .
      C:    RETR 1
      S:    +OK 120 octets
      S:    [the POP3 server sends message 1]
      S:    .
      C:    DELE 1
      S:    +OK message 1 deleted
      C:    RETR 2
      S:    +OK 200 octets
      S:    [the POP3 server sends message 2]
      S:    .
      C:    DELE 2
      S:    +OK message 2 deleted
      C:    QUIT
      S:    +OK dewey POP3 server signing off (maildrop empty)
      C:  [close connection]
      S:  [wait for next connection]


Proč IMAP?

IMAP stejně jako POP3 umožnuje klientovi manipulovat s poštou uloženou na poštovním serveru, ale pracuje jiným způsobem. Zatímco POP3 stahuje (a maže) zprávy z poštovního serveru a ukládá je na lokálním disku, IMAP se zprávami pracuje na serveru a na serveru zprávy zůstávají dokud nejsou klientem označeny ke smazání. Jednoduše řečeno, IMAP je navržen tak, aby se vzdálenou schránkou pracoval jako by byla lokální.

IMAP obsahuje operace pro vytváření, mazání a přejmenovávání schránek, nastavování různých příznaků zprávám, dále pak parsování MIME, vyhledávání a jen určitých stahování částí zpráv (např. stáhnout jen obrázky/přílohy ze zprávy).

Jak funguje IMAP spojení?

IMAP spojení je navazováno na port 143/tcp IMAP serveru. Veškerá komunikace mezi klientem a serverem probíhá podobně jako u POP3 serveru ve formě řádků ukončených dvojicí CRLF.

Klient zahajuje komunikaci a odesílá řádek začínající tagem (identifikátor příkazu) následovným klíčovým slovem a argumenty. V některých případech tato odeslaná řádka nereprezentuje celý příkaz. V takových případech server pošle žádost o pokračování příkazu v okamžiku kdy je připraven. Taková žádost má prefix "+".

Server pak přečte a rozparsuje příkaz a odešle zpět požadovaná data. Ty mají prefix "*". Odpověď serveru indikující dokončení příkazu mají mají stejný tag jako příkaz jehož dokončení indikují.

IMAP server se může nacházet ve čtyřech stavech. To jaké příkazy klient může použít závisí na tom, v jakém stavu se momentálně server nachází.

Ukázkové spojení

Ukázkové spojení (převzato z RFC 2060):
S:   * OK IMAP4rev1 Service Ready
C:   a001 login mrc secret
S:   a001 OK LOGIN completed
C:   a002 select inbox
S:   * 18 EXISTS
S:   * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S:   * 2 RECENT
S:   * OK [UNSEEN 17] Message 17 is the first unseen message
S:   * OK [UIDVALIDITY 3857529045] UIDs valid

S:   a002 OK [READ-WRITE] SELECT completed
C:   a003 fetch 12 full
S:   * 12 FETCH (FLAGS (\Seen) INTERNALDATE "17-Jul-1996 02:44:25 -0700"
      RFC822.SIZE 4286 ENVELOPE ("Wed, 17 Jul 1996 02:23:25 -0700 (PDT)"
      "IMAP4rev1 WG mtg summary and minutes"
      (("Terry Gray" NIL "gray" "cac.washington.edu"))
      (("Terry Gray" NIL "gray" "cac.washington.edu"))
      (("Terry Gray" NIL "gray" "cac.washington.edu"))
      ((NIL NIL "imap" "cac.washington.edu"))
      ((NIL NIL "minutes" "CNRI.Reston.VA.US")
      ("John Klensin" NIL "KLENSIN" "INFOODS.MIT.EDU")) NIL NIL
      "")
       BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028 92))
S:    a003 OK FETCH completed
C:    a004 fetch 12 body[header]
S:    * 12 FETCH (BODY[HEADER] {350}
S:    Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT)
S:    From: Terry Gray 
S:    Subject: IMAP4rev1 WG mtg summary and minutes
S:    To: imap@cac.washington.edu
S:    cc: minutes@CNRI.Reston.VA.US, John Klensin 
S:    Message-Id: 
S:    MIME-Version: 1.0
S:    Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
S:
S:    )
S:    a004 OK FETCH completed
C:    a005 store 12 +flags \deleted
S:    * 12 FETCH (FLAGS (\Seen \Deleted))
S:    a005 OK +FLAGS completed
C:    a006 logout
S:    * BYE IMAP4rev1 server terminating connection
S:    a006 OK LOGOUT completed

Teapop

Teapop je jednoduchý POP3 server s možností autentizovat uživatelé pomocí mySQL nebo PostgreSQL databáze, podporou vrituálních domén a dalšími možnostmi.

Instalace

Při instalaci je možné si vybrat z několika možností, kde bude umístěna poštovní schránka uživatelů. Defaultně je nastavený adresář /var/mail nebo /var/spool/mail. Pomocí přepínače --enable-mailspool můžeme nastavit adresář jiný adresář, nebo pomocí --enable-homespool řekneme Teapopu, že pošta má být ukládána do domovských adresářů uživatelů.

Při konfiguraci je dále možno nastavit typ zamykání souborů, jak se budou ověřovat uživatelé (USER/PASS nebo APOP). Výčet možných nastavení je v teapop-x.x.x/doc/INSTALL. Posledním instalačním krokem je upravení /etc/inetd.conf, popřípadě /etc/xindetd.d/teapop a restart inetd/xinetd démona. Teapop je také možno spustit ve stand-alone modu pomocí přepínače -s.

Nastavení

Nastavení autentizace uživatelů a další nastavení serveru (jako například virtuální domény) jsou v souboru /etc/teapop.passwd. Zde je možno určit jací uživatelé se budou ověřovat jakým způsobem a kde je umístěna jejich schránka.

Příklad nastavení v /etc/teapop.passwd
example.com:*:passwd:/var/mail/:
  // autentizace vůči systémovým účtům

example.com:*:ldap:/var/mail:0:ldap.examle.com:389:ou=mail,dc=example,dc=com:simple:
  // autentizace vůči ldap serveru

Teapop podporuje dva různé formáty mailboxu - mbox a Maildir. Jaký formát mailboxu používat je specifikováno přímo v zadání umístění mailboxu. Pokud cesta k mailboxu končí zpětným lomítkem (viz. první řádka v příkladu) pak Teapop předpokládá, že se jedná o Maildir formát. Pokud nekončí zpětným lomítkem, pak jde o mbox formát.


Klientské programy

Mnoho klientských programů využívá k psaní zpráv externích editorů. K určení defaultního editoru většina z nich hledá proměnou prostředí VISUAL (pokud neexistuje pak proměnou EDITOR) a její hodnotu bere jako jméno preferovaného editoru.


RFC 1939 - POP3: http://www.faqs.org/rfcs/rfc1939.html
RFC 2060 - IMAP: http://www.faqs.org/rfcs/rfc2060.html
Porovnání POP3 a IMAP: http://www.imap.org/papers/imap.vs.pop.brief.html
Teapop : http://www.toontown.org/teapop/index.php