Jak jsme si řekli předminule, pro stahování pošty do cílového počítače existují dvě hlavní rodiny protokolů – POP a IMAP. Kromě toho lze poštu stahovat pomocí rozšířeného protokolu ESMTP (rozšíření ETRN a ODMR).
Nejstarší a nejrozšířenější jsou protokoly POP. Dnes je hlavním zástupcem POP3. Kromě funkcí pro stahování pošty nabízí jedinou vymoženost – zprávy lze označit jako přečtené, ale ponechat je nesmazané na serveru.
Novější protokol IMAP též nabízí vše pro stahování pošty. Navíc však disponuje funkcemi pro vzdálenou správu poštovní schránky. Je proto oblíben webmaily a uživateli, kteří potřebují číst poštu na více místech.
Když je pošta doručena do schránky na serveru, čeká ji poslední úsek cesty – stažení do poštovního programu. Dnes se seznámíme s nastavením programu Fetchmail, oblíbeného programu pro stahování pošty.
V UNIXovém světě se běžně používá poštovní soubor ve formátu zvaném mailbox, dle doporučení FHS umístěný v adresáři /var/mail (dříve též
/var/spool/mail) a nesoucí přihlašovací jméno uživatele.
Poštovní programy (MUA) si jej odtud přebírají, a pokud je uživatel odstěhuje, přesunou se do jednoho ze souborů poštovního archivu. Jeho umístění bohužel není standardizované a je u různých distribucí a programů různé. Bývá to ~/Mail, ~/mail, ~/nsmail nebo ~/.mail. Většina programů používá formát mailbox i pro archivovanou poštu, a pokud je donutíme, aby používaly stejný adresář, mohou poštu sdílet.
Na některých systémech se pošta ukládá v novějším formátu maildir, což je adresář, kde je každá zpráva v samostatném souboru.
Pokud nepoužíváme pouze jediný program vše v jednom, je ideální stahovat poštu do standardního adresáře pomocí specializovaného programu. Integrace protokolu POP3 do poštovního programu nepřináší proti tomuto řešení žádné výhody. Naproti tomu u protokolu IMAP může být integrace výhodná, ale i zde můžeme používat klasický model stáhnout–prohlédnout.
Fetchmail
Nejrozšířenější aplikací pro stahování pošty je bezesporu Fetchmail od Erica S. Raymonda. Je následníkem staršího programu Popclient od Carla Harrise. Nedisponuje sice pokročilými funkcemi jiných programů, ale zato zvládá prakticky všechny poštovní protokoly, včetně rozšířeného ESMTP, jednorázových hesel, SSL certifikátů či ověřování Kerberos a NTLM. Staženou poštu pak umí předat dalšímu MTA nebo MDA k doručení.
Jeho základní použití je jednoduché – na příkazové řádce zadáme jméno serveru; program se poté zeptá na heslo a zkouší stáhnout poštu.
Takový postup je však není pro pravidelné stahování pošty praktický hned z několika důvodů – musíme vypisovat heslo při každém přihlášení (z bezpečnostních důvodů není implementováno heslo z příkazové řádky) a spouštět Fetchmail pro každé konto zvlášť, a to pokaždé, když chceme stáhnout poštu. Program zkouší běžné protokoly a jejich verze, dokud nenatrefí na fungující protokol. Protože komunikace v těchto protokolech není duplexní (po zaslání dotazu se čeká na odpověď, a teprve když celá dojde, zadává se další dotaz), ubíhají nám cenné sekundy spojení, zatímco Fetchmail zjšťuje způsob, jak poštu stáhnout.
Detaily komunikace sice můžeme upřesnit i argumenty na příkazové řádce, ale pokud stahujeme poštu stále ze stejných serverů, je to nevýhodné.
Řešením je, založíme-li si soubor ~/.fetchmailrc, kam všechny tyto informace vyplníme. Popíšeme si, jak takové nastavení provést. Při nastavení si můžeme pomoci též GUI programem fetchmailconf.
Volby programu Fetchmail a konfiguračního souboru
Většinu vlastností lze nastavit jak z příkazové řádky, tak v konfiguračním souboru. Uvádím proto obě verze. Nejde zdaleka o úplný výčet, ale o příkazy pro stažení pošty z běžného konta. Úplný výčet najdete v manuálové stránce programu. Mezi nejdůležitější patří:
-p, –protocol / proto jméno: volba protokolu. Nejčastěji POP3 nebo IMAP. Nezadáme-li nic, použije se AUTO (zkouší tři nejběžnější protokoly IMAP, POP3, POP2).
-u, –username / user jméno: jméno poštovního konta. Nezadáme-li nic, použije se přihlašovací jméno.
pass heslo (pouze v konfiguračním souboru): Heslo poštovní schránky. Nezadáme-li nic, program se pokaždé zeptá.
–auth / auth typ: Způsob ověřování při přihlášení na server. Nezadáme-li nic, použije se password (ověřování heslem).
-U, –uidl / uidl: UIDL je jednoznačná identifikace zpráv v rozšíření protokolu POP3 a umožňuje programu zjistit, které zprávy již byly staženy. Tato volba přiměje Fetchmail, aby informaci použil.
-e, –expunge / expunge počet: Většina protokolů maže zprávy pouze po odeslání speciálního příkazu nebo při ukončení spojení. Pokud se během stahování rozpadne linka, program začíná stahovat poštu opět od začátku. Tato volba umožňuje omezit počet zpráv, stažených bez jejich smazání na výchozím serveru. Tato volba lehce prodlouží komunikaci mezi zprávami (v protokolu POP3 je totiž nutné se odhlásit a znovu přihlásit).
-v, –verbose (pouze na příkazové řádce): Zapne upovídaný režim Vhodné při ladění, nedaří-li se stáhnout poštu. (Lze zadat i -v -v.)
Volby pro správu zpráv
Jak jsme si již řekli, protokol POP3 umožňuje označovat zprávy za přečtené. Fetchmail implicitně stahuje pouze zprávy označené za nepřečtené a poté je ze serveru maže. Ke změně tohoto chování slouží následující čtveřice příkazů:
-k / keep: Ponechat přečtené zprávy na serveru.
-K / nokeep: Neponechat přečtené zprávy na serveru (přebije -k).
-F / flush: Před stahováním vymazat všechny zprávy označené jako přečtené.
-a / fetchall: Stáhnout všechny zprávy, bez ohledu na to, zda jsou označeny jako přečtené.
Ukázková konfigurace
Konfigurace musí být čitelná pouze pro uživatele – jak by ne, vždyť jsou v ní citlivé údaje, jako jsou hesla. Vezměme si na pomoc tři uživatele z minulého dílu: bfu, lamer a hacker. Bfu často dostává velké soubory, lamer používá běžnou schránku a hacker používá jednorázová hesla. Takto budou vypadat jejich konfigurační soubory (konfigurace jsou vymyšlené, včetně možností serverů).
Klíčové slovo poll říká, že příslušný řádek bude použit, pokud spustíme Fetchmail bez argumentů.
poll mail.seznam.cz user franta.b.u pass xxx expunge 3
poll pop3.hotmail.com proto pop3 auth password user big.brain pass jS@mk1nG
poll mail.sourceforge.net proto pop3 auth otp user u13562 pass kadomeglusbeviton
(Řádky jsou zalomeny kvůli šířce textu, v konfigurační souboru je zalamovat nemusíte.)
Některé údaje není nutné vyplňovat, neboť Fetchmail použije implicitní hodnoty (např auth). Nezapomeňte též, že většina velkých providerů používá pro POP3 server jiný počítač, než pro příjem pošty. Jméno serveru (a dokonce ani přihlašovací jméno) se tedy nemusí krýt s e-mailovou adresou.
Konfigurace důvěryhodným uživatelem
Fetchmail umí stahovat poštu i pro více uživatelů. Superuživatel provede konfiguraci démona a bude automaticky stahovat poštu pro všechny uživatele a doručovat do jejich schránek. Slouží k tomu funkce is jméno here. Uživatelé ovšem musí prozradit své heslo (pokud nepoužívají pokročilé ověřování, administrátor si jej stejně může v jejich souborech přečíst).
poll mail.seznam.cz user franta.b.u is bfu here pass xxx expunge 3 poll pop3.hotmail.com proto pop3 user big.brain is lamer here pass jS@mk1nG poll mail.sourceforge.net proto pop3 auth otp user u13562 is hacker here pass kadomeglusbeviton
Spouštění
Kromě standardního spouštění lze Fetchmail spustit i jako démon. Následující příkaz zajistí, že se každých 900 sekund pokusí stáhnou poštu ze serverů v konfiguraci. Podobný příkaz je vhodné umístit do skriptu pro připojení k Internetu.
/usr/bin/fetchmail -d 900 --syslog
Po odpojení je ještě vhodné server zastavit – buď klasickým
killall fetchmail, nebo prostředky pro spouštění a zastavování démonů v distribuci.
Jsou zde však ještě další cesty – spustit Fetchmail trvale a nechat jej testovat, zda je připojovací rozhraní aktivní. Pokud je rozhraní mimo provoz (nebo jsme připojeni na neobvyklém místě a nechceme přenášet hesla přes nezabezpečené linky), Fetchmail žádný požadavek nevyšle:
fetchmail -I ppp0/0.0.0.0/0.0.0.0 -d 900 --syslog
Fetchmail běžící jako démon je možné probudit a nechat stáhnout poštu (signálem HUP, běží-li pod superuživatelem, nebo signálem USR1, běží-li jako běžný uživatel).
Fetchmail standardně doručuje poštu pomocí lokálního SMTP. Pokud nechcete na lokálním stroji spouštět žádný MTA, můžete si explicitně vyžádat přímé doručení přes MDA, např.:
fetchmail -m "/usr/bin/deliver" fetchmail -m "/usr/bin/procmail -d %T" # Toto je ekvivalent standardního chování: fetchmail -m "/usr/sbin/sendmail -oem -f %F %T"
(Pozor, při špatném nastavení doručovacího programu přijdeme o poštu!)