Mutt: e-mail z příkazové řádky

24. 10. 2008
Doba čtení: 9 minut

Sdílet

Množství e-mailových schránek a Asus Eee, na kterém se nejčastěji pohybuji, mě donutilo jednat, co se týče správy pošty. Klienti jako Mozilla Thunderbird se v prvních dnech používání ukázali jako velmi nepohodlní, a tak jsem se rozhodl prozkoumat možnosti správy e-mailů z příkazové řádky.

V tomto článku bych rád popsal svoje zkušenosti při konfiguraci programů pro správu e-mailů na Linuxu.

Jak se správně řeší e-maily v Linuxu

Programy typu Thunderbird nebo Evolution jsou v Linuxu velmi populární, ale jejich koncept vybočuje z principů UNIXových systémů. Je tomu tak proto, že jako jeden program dělají mnoho věcí najednou. Přitom na Linuxu má pošta velmi roztříštěnou implementaci. To znamená, že jeden program se stará o přijetí e-mailu, další o filtrování, další o předávání, další o ukládání a mnoho dalších. Mezi sebou většinou komunikují přes roury. Dobrým příkladem je například postfix. Ten je rozdělený na mnoho malých programů, z nichž každý dělá tu svou práci. Výsledek je relativně bezpečný, ale náročný na systémové prostředky. Když na server dorazí 1000 e-mailů v krátkém časovém intervalu, musí se ke každému z těchto e-mailů spustit řada procesů.

Ale abychom neodbočovali od tématu. Thunderbird dělá všechnu práci, která s poštou udělat jde. Filtruje, přijímá, odesílá atd. V příkazové řádce nic takového nenajdeme z výše uvedených důvodů. Jeden program použijeme na příjem e-mailů, další na filtrování, zobrazování, editování, odesílání atd. Uprostřed toho všeho stojí mutt jako varianta e-mailového klienta.

Linux je UNIX a tyto systémy byly vždy dělané jako víceuživatelské. Každý z uživatelů má svou domovskou složku, ve které jsou uloženy data uživatele, konfigurační soubory a kromě dalšího i e-maily. Ty přitom nejsou jen v nějakém skrytém adresáři jednoho z programů, ale v jednom ze dvou standardních formátů.

Výhodou takového rozdělení je, že všechny programy mohou pracovat se stejnými emaily, a kteroukoli část procesu zpracování e-mailu se dá nahradit jinou nebo si ji můžeme rovnou sami napsat. Později není problém s e-maily při změně klienta.

Potřebné programy

Jak jsem již napsal, můžeme si vybrat z několika možností, jak kterou část procesu zpracování řešit. V tomto článku se budeme věnovat následující kombinaci:

mutt Zobrazování a správa schránky
maildrop Filtrování a doručování e-mailů
fetchmail Získávání e-mailů z dalších schránek (POP3/IMAP)
abook Adresář s kontakty

Fetchmail

Pro výběr pošty z ostatních schránek můžeme použít program fetchmail, který má za sebou již dlouhou historii a umí získat e-maily z POP3 a IMAP účtů. Tento koncept má jednu velkou nevýhodu. Pokud se rozhodneme e-maily jenom stáhnout a dále s nimi pracovat offline, tak všechno funguje jak má a fetchmail se bude chovat podle očekávání. Budeme-li chtít pracovat se schránkou „online“, tak s fetchmailem narazíme. Zde bych doporučoval použít integrovaného IMAP klienta v muttu nebo rovnou all-in-one řešení v podobě např- zmíněného Thunderbirdu.

Fetchmail je aplikace, která se připojí ke vzdálenému POP3/IMAP serveru, stáhne z něj poštu a uloží ji do mboxu uživatele. Krom uložení (doručení) do mboxu umí také předat e-maily další aplikaci, a to je přesně to chování, které chceme.

Mbox i maildir si svoje zastánce najde a těžko říci, který z nich je rychlejší, ale na desktopu, kde nechodí víc jak několik e-mailů za den bude rozdíl sotva poznatelný. Osobně jsem vsadil na maildir jak na desktopu/notebooku, tak na serveru. S maildirem se každý e-mail ulkládá jako samostatný soubor, na rozdíl od mboxu, kde jsou zase e-maily uloženy v jednom souboru.

Možností jak může fetchmail běžet je více. Přístup k e-mailovým schránkám může být v konfiguračním souboru, který je uložený v domovském adresáři uživatele nebo v /etc. První volba nutí uživatele, aby se staral o svou poštu sám a stahování si obstarával ručním spouštěním fetchmailu nebo cronem. Druhá možnost umožňuje spuštění daemona, který bude kontrolovat obsah schránek. Nevýhodou v tomto případě je sdělení přihlašovacích dat administrátorovi. Ten ale stejně vidí všechna data, která na stroji máte. Velmi často, dnes dalo by se říct v drtivé většině případů, je administrátor také jediným uživatelem v systému.

Já se rozhodl pro druhou volbu, kdy je konfigurační soubor uložen v souboru „/etc/fetchmailrc“. Spuštěním daemona se mi pak automaticky kontrolují e-maily na všech serverech. E-maily na serverech nemažu, abych si je mohl stahovat i na dalším stroji, případně měl zálohu, pokud by se něco stalo. V domácím adresáři je konfigurační soubor (~/.fetchmailrc) prakticky ve stejném tvaru, takže zprovoznit první řešení není problém, pokud vše běhá u druhého.

Konfigurační soubor může vypadat například takto:

poll "pop.gmail.com" proto pop3 service 995
    user <uzivatelske_jmeno> password "<heslo>" is "<lokalni_uzivatel>" here keep ssl
    mda "/usr/bin/maildrop -d <lokalni_uzivatel>"
poll "mail.example.cz" proto pop3
    user <uzivatelske_jmeno> password "<heslo>" is "<lokalni_uzivatel>" here keep
    mda "/usr/bin/maildrop -d <lokalni_uzivatel>"
poll "stana.iinfo.cz" proto imap service 993
    user <uzivatelske_jmeno> password "<heslo>" is "<lokalni_uzivatel>" here keep ssl sslproto tls1
    mda "/usr/bin/maildrop -d <lokalni_uzivatel>" 

Každá schránka, ze které se má stahovat, musí začínat slovem poll. Za ní mohou v určitém pořadí následovat informace nutné k připojení ke schránce. Na odřádkování prakticky nezáleží, ale pořadí parametrů by mělo být podobné, jako je v příkladu. První schránka je z Gmailu a nepoužívá nic zvláštního kromě SSL. Druhá je jednoduchá POP3 schránka bez SSL. Pošta ze třetí schránky se vybírá přes TLS a port 993.

proto

Parametr proto označuje protokol a můžeme mu dát hodnotu AUTO, POP2, POP3, IMAP a případně i další, které se ale moc nepoužívají.

is <uživatel> here

Pokud máme konfigurační soubor v „/etc/fetchmailrc“, tak musíme fetchmailu říci, jakému lokálnímu uživateli patří e-maily z této schránky, a to udělám přidáním „is <uživatel> here“ v konfiguraci.

SSL

Nastavení ssl většinou nevyžaduje nic zvláštního, ale některé servery by mohly vyžadovat ssl certifikát nebo ssl klíč, případně je potřeba upřesnit použitý protokol. K určení souboru s klíčem se používá parametr sslkey, soubor s certifikátem nastavíme pomocí sslcert. Kolem SSL je v manuálu velké množství voleb, ale s většinou se při běžném použítí nesetkáme. Co se ale hodí, je volba sslproto, která může nabývat těchto hodnot: SSL2, SSL3, SSL23, TLS1.

mda

Podle rozdělení obsluhy pošty je MDA zkratkou pro mail delivery agent, to znamená, že se stará o samotné doručení e-mailu. Taktéž se stará o filtrování pošty, ale o tom až v další části článku. Teď nás bude zajímat hlavně řádek:

mda "/usr/bin/maildrop -d <lokalni_uzivatel>" 

Který nastaví předávání přijaté pošty maildropu. Ten bude podle parametru -d doručovat nastavenému lokálnímu uživateli.

Další užitečné parametry

service     port
user        uživatel vzdáleného serveru
password    heslo 

Maildrop

Jak už jsem zmínil, maildrop je jedna z možností, jak doručit e-maily. Konkurence je pro něj procmail. Ten mi nevyhovoval, protože jsem se nemohl dostat do jeho syntaxe, ale je tu i další nevýhoda, a to zpracování celého e-mailu místo hlavičky.

Doručování jde ruku v ruce s potřebou po rozdělování e-mailů do adresářů. Pomocí jednoduchých podmínek toho můžeme dosáhnout. Osobně zprávy nějak nerozděluji, nebo případně až později. Rozdělení je také dobré, pokud server do hlavičky doplňuje informaci o tom, jestli si myslí, že e-mail je spam nebo není. Každopádně si ukážeme, jak filtrování vypadá. Maildrop má široké množství filtrovacích schopností, ale principiálně se jedná o podmínku a případně akci při její pravdivé hodnotě. Pro naše potřeby bude pravděpodobně stačit rozdělování e-mailů podle odesílatele:

if ( /^From: pes@fik.cz/ )
{
    to "Fik"

} 

Nebo také podle označení spamu:

if ( /^X-Spam-Status: Yes/ )
{
    to "Spam"
} 

Text mezi // je zpracováván jako regulární výraz. Pokud místo to použijeme cc, tak se dále podmínky vyhodnocují a s e-mailem pracují i další podmínky. Pokud do cc nebo to uvedeme e-mailovou adresu nebo jen název účtu s vykřičníkem na začátku („!fik@pes.cz“), tak se e-mail na tuto adresu odešle.

abook

Ke každému správnému klientovi patří i adresář s kontakty. S tím mi velmi pomohl program abook, se kterým umí pracovat i mutt. Použití je velmi jednoduché a uživatel nemusí na myš ani sáhnout. Moc jsem nezkoumal synchronizaci s mobilem, která by mi velmi pomohla, ale myslím si, že díky formátu dat, který je pro kontakty použit, by neměl být problém minimálně napsat rozšíření pro msynctool.

Program má následující ovládání:

a        přidání kontaktu
r        vymazání kontaktu
D        zdvojení kontaktu
q        ukončení
CTRL+L   obnovení seznamu
?        nápověda
w        zapsání do databáze
e        exportování databáze
i        import databáze
s        seřazení
/        hledání
m        odeslání emailu přes mutt 

Nejedná se o všechny funkční klávesy, ale o ty nejpoužívanější. Editování položky nebo její prohlédnutí je možné po stisknutí enteru. Navigace mezi záložkami se dělá šipkami a editace položek pomocí čísel. Po zmáčknutí čísla položky nabídne program její změnu.

Mutt

Poslední v řadě je střed celého e-mailového kolotoče, a to e-mailový klient mutt. Není to ani tak klient, jako spíš prohlížeč linuxové e-mailové schránky. Mutt toho umí opravdu hodně a je nad rámec tohoto článku o něm psát více něž pár slov. Uvedu proto jen odkaz na články zde na Rootu, které vás provedou konfigurací a seznámí s prostředím.

I když se nechci zabývat muttem do hloubky, bych rád napsal něco málo k ovládání i ke konfiguraci, resp. se podělil o zkušenosti, které jsem za posledních pár dní posbíral.

Mutt se ovládá stejně jako abook z klávesnice.

c       změna adresáře (název adresáře se píše s = na začátku)
Q       vyhledat kontakt a napsat mu e-mail
        v čem se bude hledat je závislé na nastavení, může to být i váš skript
r       odpovědět
m       napsání nové zprávy
?       nápověda
d       smazání e-mailu
q       ukončení programu případně návrat na seznam e-mailů
o       řazení
O       opačné řazení
:       příkazový režim 

Mutt má v sobě jednoduchý prohlížeč e-mailů, ale stejně jako na editaci, i na prohlížení používám vim. Nastavit se dají i aplikace k různých mimetypům, jak je třeba pdf, jpg atd.

Konfigurace, která mi vyhovuje vypadá takto:

# vim na prohlížení a editaci
set editor="vim"
set pager="vim"
# adresář pro odeslanou poštu
set record="~/.maildir/Sent"
# řazení podle data
set sort_aux=reverse-date
# a vláken
set sort=threads
# a podle abecedy
set sort_browser=alpha

# abook na vyhledávání emailových adres
set query_command = "abook --mutt-query '%s'"

# zobrazí jen vybrané hlavičky
ignore *
unignore From To Cc Subject Date Reply-T

# moje hlavička
my_hdr From: Adam Štrauch <adam.strauch@iinfo.cz>

# informace o mě a o stroji
set hostname = "godie"
set realname = "Adam Štrauch"

# makra pro přepínání identit
# napsáním <esc>cX při editaci hlaviček a příloh e-mailu se změní hlavička From
macro compose <esc>ci "<esc>f\Ca\CkAdam Štrauch \<adam.strauch@iinfo.cz\>\n"
macro compose <esc>cc "<esc>f\Ca\CkAdam Štrauch \<cx@dev-it.org\>\n"

# umožnit editovat hlavičky
set edit_headers="yes" 

Mutt vypadá ve výchozím nastavení různě a záleží to na distribuci. Nastavení barev je běh na dlouhou trať, je lepší napsat do google „mutt color“ a vybrat si co podle vlastních preferencí.

Pro nastavení, jaký program má otevírat jaký mimetyp, se používá soubor „~/.mailcap“ a může vypadat třeba takto:

ict ve školství 24

image/*;/usr/bin/feh -FZ %s
text/html;/usr/bin/firefox %s
application/pdf;kpdf %s 

Znaky %s se nahradí názvem otevíraného souboru.

Závěr

Tato kombinace softwaru mi velmi zkrátila čas, který jsem denně věnoval několika e-mailům přes webmail. Snaha, která je nutná pro rozchození popsaného řešení, se vrátí během několika dní používání. Mutt mě velmi nadchl svou jednoduchostí a rozšířitelností. Na myš při zpracování e-mailů není potřeba prakticky sáhnout.

Odkazy

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.