edison23

Zápisky šíleného jazykového editora

Útulný Mutt

Všechny e-mailové klienty jsou mizerné. Tenhle je mizerný o trochu méně. — Michael R. Elkins, cca 1995

Datum: 2015-03-29
Kategorie: Návody Software Unix CS
Štítky: e-mail mutt

Obsah


Úvod

Zkusil jsem všechny možné e-mailové klienty, nakonec jsem celkem dlouho používal Thunderbird, který mě ale hrozně štval vším možným, a když jsem se pak přestěhoval před nějakou dobou na Ubuntu, objevil jsem Mutt. Nejdřív jsem si myslel, že to fakt ne, pak jsem si řekl, že to zkusím, když jsem těžce selhal při jeho konfiguraci, řekl jsem si opět, že to fakt ne, a pak jsem, odhodlán to zkusit znova, objevil tenhle článek od Steva Loshe. A z toho budu silně čerpat i v tomto návodu.

Připravte se, že vám konfigurace Muttu zabere večer… nebo taky několik večerů, pokud se na něčem seknete. Mutt není klient, který nainstalujete, zapnete, zadáte e-mail a heslo, a můžete vesele pracovat. Ale když se tou konfigurací prokoušete, bude to stát za to, protože dobře nakonfigurovanému Muttu se vyrovná asi málokterý klient.

A ještě takový detail: anglická verze tohoto návodu je pro OSX, já jsem jej realisoval pod Ubuntu 14.04. Pokud máte jiný systém, budete muset učinit menší či větší změny, pokud máte Windows, tak… asi hodně štěstí s Cygwinem. Zároveň taky osekávám tento návod o některé části anglické verze, se kterými např. nemám zkušenosti.

Terminologická poznámka: CC znamená carbon copy, tedy přes kopírák – kopie zprávy přijde dalšímu uživateli. Zkratku CC používám jako normální slovo, tudíž z něj tvořím slovesa, adjektiva a podobně. Deal with it.

Technická poznámka: v konfigurácích uvádím edison23@otakuland.cz, vy si tam dejte svůj účet samozřejmě.

Jak používám e-mail

Mám obyčejný účet na Gmailu, e-maily čtu primárně na PC a na mobilním telefonu, ale občas se ke svému účtu připojuji i odjinud, tzn. že potřebuji mít vše synchronizováno se serverem Googlu. Na bezpečnost si tolik nepotrpím v tom smyslu, že mi nevadí, že se Google teoreticky k mým e-mailům může dostat. Kdyby mi to vadilo, tak ho už 8 let nepoužívám, že. E-maily lokálně uložené zálohuji, takže je mám prakticky na třech místech. Používám štítky, tzn. v e-mailovém klientu kopíruji maily do daných IMAPovských složek, které na Gmailu štítky představují.

Schéma konfigurace

Budeme Mutt kombinovat s několika dalšími utlitikami, a to konkrétně s offlineimap, který zajišťuje synchronisaci se vzdáleným serverem, msmtp, který zajišťuje odesílání e-mailů (mutt to umí taky, ale není v tom tak dobrý) a s notmuch, který umí e-maily indexovat, abychom v nich mohli rychle hledat.

Schéma správy e-mailů

Pokud vás tohle nepřinutilo utéci do nejbližší hospody, i kdyby Starobrno měla točit, pak směle čtěte dál.

Offlineimap

Offlineimap zrcadlí všechny e-maily do lokální složky. To se hodí i jako záloha, nicméně hlavním důvodem, proč jsem šel touto cestou já, je fakt, že Mutt je pak o mnoho rychlejší, než když musí pracovat přímo s IMAP serverem. Zjistil jsem totiž, že bez offlineimap Mutt projíždí celý index složky s maily při každém přechodu z jedné IMAP složky do jiné. Pokud máte pár stovek e-mailů, asi je to snesitelné, pokud 15 tisíc (ano, i odeslané se počítají) jako já, tak ne.

Mějte na paměti, že jde o dvoustrannou synchronisaci, takže pokud něco hodně pokazíte, tak můžete teoreticky přijít o některé až všechny své e-maily (i na Gmailu). Stát se to může například při tom, když smažete svůj maildir (nebo některé jeho části) a nesmažete stavové soubory offlineimapu, které říkají, v jakém stavu se synchronisace nacházela po poslední akci. Tyto soubory jsou ve složce ~/.offlineimap.

Instalace Offlineimapu

Zvolil jsem oficiální repositáře Ubuntu a rozhodl se doufat, že nějaký update mi nerozbije současnou konfiguraci. Pokud chcete v této blažené nevědomosti žít také, použijte apt-get:

apt-get install offlineimap

Současná verze v době psaní tohoto návodu je 6.5.4-2.

Pokud se chcete updatům vyhnout, můžete použít repositář na Gitu, který linkuje originální návod (nezkoušel jsem):

git clone git://github.com/spaetz/offlineimap.git
cd offlineimap
git checkout 679c491c56c981961e18aa43b31955900491d7a3
python setup.py install

Konfigurace Offlineimapu

Offlineimap skladuje konfiguraci v ~/.offlineimaprc. Tento soubor vytvořte a vložte si do něj nastavení podobná následujícímu:

[general]
ui = ttyui
accounts = edison23
fsync = False

[Account edison23]
localrepository = edison23-Local
remoterepository = edison23-Remote
status_backend = sqlite
postsynchook = notmuch new

[Repository edison23-Local]
type = Maildir
localfolders = ~/.mail/edison23
nametrans = lambda folder: {
        'drafts': '[Gmail]/Drafts',
        'sent': '[Gmail]/Sent Mail',
        'spam': '[Gmail]/Spam',
        'important': 'Dulezite',
        'fansub': 'Fansub',
    }.get(folder, folder)

[Repository edison23-Remote]
maxconnections = 2
type = Gmail
remoteuser = edison23@otakuland.cz
remotepasseval = 'moje_heslo'
realdelete = no
nametrans = lambda folder: 
    {
        '[Gmail]/Drafts': 'drafts',
        '[Gmail]/Sent Mail': 'sent',
        '[Gmail]/Spam': 'spam',
        'Dulezite': 'important',
        'Fansub': 'fansub',
    }.get(folder, folder)
folderfilter = lambda folder: folder not in 
    [
        '[Gmail]/Trash',
         '[Gmail]/All Mail',
         '[Gmail]/Starred',
         '[Gmail]/Important',
         'test',
     ]

Projdeme si některá nastavení postupně (ta, co neuvádím, si buď dohledejte, nebo je prostě zkopírujte, občas jsem to taky tak dělal).

ui = ttyui
accounts = edison23
fsync = False
  • accounts: názvy účtů, mám jen jeden; obecně – všechno, kde se vyskytuje v mých konfigurácích edison23, si nahraďte tím, co si dáte do tohoto pole a pak to už neměňte, pokud nevíte přesně, co děláte

  • fsync: nepotřebujeme, aby offlineimap syncoval maildir (lokální složka s e-maily) po každé operaci, protože když se něco stane (např. offlineimap spadne), tak o nic nepřijdeme, protože se to napraví při další synchronisaci

    Account edison23] localrepository = edison23-Local remoterepository = edison23-Remote status_backend = sqlite postsynchook = notmuch new

    • status_backend: budeme používat databází sqlite, takže pokud ji nemáte, tak apt-get install sqlite
    • postsynchook: tím po synchronisaci zavoláme notmuch, aby nám e-maily reindexoval

Nastavení pro lokální stranu:

[Repository edison23-Local]
type = Maildir
localfolders = ~/.mail/edison23
nametrans = lambda folder: 
    {
        'drafts': 
        '[Gmail]/Drafts',
        'sent': '[Gmail]/Sent Mail',
        'spam': '[Gmail]/Spam',
        'important': 'Dulezite',
        'fansub': 'Fansub',
    }.get(folder, folder)
  • type: jak jsem říkal, všechny e-maily máme ve složce, takže maildir; existuje ještě např. mbox, ale to nechcete
  • localfolders: kde se váš maildir nachází; složku, kam budete své e-maily ukládat (v mém případě ~/.mail), vytvořte před spuštěním offlineimap na nějakém místě, kde máte dost místa. Rozhodně aspoň trojnásobek, než kolik máte e-mailů ve schránce.
  • nametrans: Pozor! Zvedněte se, dojděte si do ledničky pro pivo, otevřete si ho a pak teprve pokračujte. Následuje kód v Pythonu. Ne, dobře, tohle mám z původního návodu, který je pro uživatele OSX, nás na Linuxu to tolik nepřekvapí, ne? Každopádně tohle se stará o překlad názvů IMAP složek mezi lokálním maildirem a vzdáleným serverem. Sem si musíte nacpat všechny složky (aka štítky, labely, whatever), které na Gmailu máte. Mějte na paměti, že minimálně Drafts, Sent a Spam jsou v subsložce [Gmail]. Na žádné další jsem tuším nenarazil. Vlevo je lokál, vpravo vzdálený server.

Nastavení pro vzdálenou stranu:

[Repository edison23-Remote]
maxconnections = 2
type = Gmail
remoteuser = edison23@otakuland.cz
remotepasseval = 'moje_heslo'
realdelete = no
nametrans = lambda folder: {'[Gmail]/Drafts': 'drafts', }.get(folder, folder)
folderfilter = lambda folder: folder not in [ '[Gmail]/Trash', ]
  • maxconnections: počet připojení, které offlineimap pro připojení k gmailovskému serveru využije. Doporučuji nenastavovat na víc než 2, jinak vás Gmail vesele vykopne.
  • Uživatelské jméno a heslo vašeho účtu tak, jak se normálně přihlašujete k Gmailu. Rovnou říkám, že skladovat heslo v plain textu je příšerná prasárna, ale tohle je jedno z míst, kde se návod pro Mac a pro Linux liší a já se ještě nedostal k tomu, abych to řešil – jste-li tudíž na Macu, jděte se pro řešení inspirovat do originálního návodu, jste-li na Linuxu, vymyslete, jak se to řeší a buďte tak hodní a podělte se se mnou, budu vám vděčný.
  • realdelete: smazané maily se budou jen přesouvat do složky Trash, ne skutečně mazat
  • folderfilter: složky/štítky, které nechcete, aby se synchronisovaly; tady je vhodné podotknout, že určitě chcete vyřadit All Mail, protože to je soubor všech e-mailů – tudíž byste si zbytečně duplikovali svou schránku.

Chcete-li šifrovat své heslo, jděte se tím zabývat, pokud ne, je čas spustit offlineimap:

offlineimap

Pokud máte tolik e-mailů jako já, je pravá chvíle na to jít teď do hospody. Pokud jste všechno správně nastavili, Gmail se nerozhodne vás vyhodit při 2 připojeních a podobně, bude tahle operace trvat pár hodin. Když budete mít štěstí, ne víc než tři. Offlineimap stáhne všechny vaše e-maily včetně příloh do vašeho maildiru (už chápete, proč tvrdím, že posílat přílohy větší než 1 MB je prasárna, a rovnou to mažu?). Pokud se všechno povede, máte na svém počítači kompletní zálohu svého e-mailového účtu. Pokud jste něco pokazili, tak možná nemáte nic ani na mailserveru. Zkuste se jít pomodlit, třeba to pomůže.

Jak zařídit, abyste mohli přijímat e-maily automaticky v nějakém časovém intervalu nebo po stisku klávesy v Muttu, si vysvětlíme později. Každopádně další spuštění offlineimapu už by mělo vyvolat jen krátké porovnání maildiru se serverem a případné stažení nových e-mailů.

Mutt

Je čas probudit bestii.

Instalace

Opět doporučuji volit instalaci z repositářů. Máte na výběr ze dvou verzí Muttu – základní a „spravené“. Základní je čistý Mutt, spravená (mutt-patched) obsahuje různé vychytávky, jako je např. sidebar. Doporučuji si vybrat tu.

apt-get install mutt-patched

Konfigurace

Jak jsem už naznačil, v Muttu si můžete nastavit snad úplně všechno. Což pro začínajícího uživatele je celkem peklo. Pokud budete líní zjišťovat, co které nastavení znamená, tak aspoň trochu u toho kopírování přemýšlejte, jinak s vámi Mutt pravděpodobně spolupracovat moc nebude.

Veškerá nastavení Muttu se nacházejí v souboru ~/.muttrc. Až se s Muttem trochu sžijete, dohledejte si tato nastavení v dokumentaci, ať víte, co dělají.

# Paths
set folder           = ~/.mail               # umisteni maildiru
set alias_file       = ~/.mutt/alias         # umisteni aliasu
set header_cache     = ~/.mutt/cache/headers # hlavicky e-mailu
set message_cachedir = ~/.mutt/cache/bodies  # tela e-mailu
set certificate_file = ~/.mutt/certificates  # certifikaty
set mailcap_path     = ~/.mutt/mailcap       # zaznamy pro jednotlive typy souboru
set tmpdir           = ~/.mutt/temp          # docasna slozka
set signature        = ~/.mutt/sig           # soubor s podpisem

Nastavení cest k adresářům s daty, které bude Mutt potřebovat. Složky si, tuším, je schopen vytvořit sám. Záznamy pro jednotlivé typy souborů ještě rozeberu níže, ostatní v podstatě nepotřebujete řešit.

# Basic Options
set wait_key = no        # neotravuj, mutte
set mbox_type = Maildir  # typ mailboxu
set timeout = 180        # interval obnovovani
set mail_check = 0       # min. cas mezi obnovenimi
unset move               # kvuli gmailu
unset mark_old           # nove/prectene staci
set pipe_decode
set thorough_search
set edit_headers = yes   # povolit editovani hlavicek pri vytvareni e-mailu
set sleep_time = 0       # zrychleni prepinani adresaru

A teď pár základních nastavení, aby se Mutt choval příčetněji. Ty nepopsané si dohledejte sami, sám pořádně nevím, co dělají. edit_headers umožňuje při psaní e-mailů např. přidat příjemce nebo změnit adresu odesilatele (jediný způsob, na který jsem zatím v Muttu přišel, jak řešit aliasy – ačkoliv oficiálně to jde i čistěji, prakticky jsem to nerozběhal).

# Sidebar Patch --------------------------------------
set sidebar_delim   = '  │'
set sidebar_visible = yes
set sidebar_width   = 24

# Status Bar -----------------------------------------
set status_chars  = " *%A"
set status_format = "───[ Folder: %f ]───[%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]───%>─%?p?( %p postponed )?───"

Nastavení sidebaru a status baru. Takhle to vypadá příšerně, pak přijdete na to, že ten status bar není tak těžké si zeditovat.

Originální návod uvádí ještě skrývání některých částí hlavičky e-mailů, mně docela zajímá všechno v nich, takže to v .muttrc nemám.

# Account Settings -----------------------------------

# Default inbox.
set spoolfile = "+edison23/INBOX"

# Alternate email addresses.
alternates 6516545649@mail.muni.cz

# Mailboxes to show in the sidebar.
mailboxes +edison23/INBOX \
            +edison23/drafts \
            +edison23/sent \
            +edison23/spam \
            +edison23/important \
            +edison23/fansub \

# Other special folders.
set mbox      = "+edison23/Archive"
set postponed = "+edison23/Drafts"

Detaily účtu, jako například jeho umístění, alternativní e-mailové adresy (aliasy) – tedy to, co mi nefunguje – a adresáře, které chceme mít v sidebaru.

A můžeme Mutt spustit. Zatím neumíme odesílat e-maily, nemáme nastavené klávesové zkratky a spoustu dalších věcí, ale na ověření, že Mutt funguje, to stačí, tak do toho:

mutt

Měli byste vidět seznam svých e-mailů, tedy zhruba něco takového:

Snímek obrazovky -- Mutt

Barvy odpovídat nebudou, ale to časem pochopíte.

Pokud Mutt nebo cokoliv jiného křičí nějakou chybu, zastavte se a zjišťujte, o co jde. Může být problém se zapisováním do složek, může být problém s názvy složek, popravdě může problém tkvít skoro v čemkoliv.

Na ovládání přijdete pravděpodobně sami, občas někde máte nápovědu, co které klávesy dělají, komplexní nápovědu máte k disposici po stisku klávesy ?.

Mutt můžete zase vypnout, jdeme nastavovat dále.

# Index View Options ---------------------------------
set date_format = "%m/%d %T"               # format data
set index_format="%2C | [%Z] (%-4.4c) %d ~ %-25.25F %s"
set sort = threads                         # zobrazovat e-maily po vlaknech
set sort_aux = reverse-last-date-received  # nejnovejsi e-maily nahore
set uncollapse_jump
set sort_re                                # vlakna se vytvari podle regexu
set reply_regexp = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*"

# Index Key Bindings ---------------------------------
bind index gg       first-entry             # prvni zaznam
bind index G        last-entry              # posledni

bind index R        group-reply             # odpoved skupine
bind index     sync-mailbox            # synchronisovat maildir
bind index   collapse-thread         # zavrit vlakno

Formáty zobrazování si můžete časem nastavit sami, klávesové zkratky vám možná také nebudou vyhovovat, tak se do toho pak časem zahrabte. Synchronisace maildiru znamená, že Mutt provedené změny (přečtení e-mailu, jeho smazání, …) provede na lokální složce s e-maily. Offlineimap se pak postará o to, aby se reflektovaly i na vzdáleném serveru.

Pozor, synchronisaci s maildirem spustí i přechod do jiného adresáře.

Nastavení pageru, nebo-li okna, ve kterém se zobrazují jednotlivé e-maily. Osobně preferuji v pageru vidět pouze daný otevřený e-mail a sidebar, nikoliv i část indexu, jako uvádí původní příručka.

# Pager View Options ---------------------------------
set pager_stop             # neskakat automaticky na dalsi zpravu
set menu_scroll            # zachovavat menu na vrchu obrazovky
unset markers              # nezobrazovat znak + na zalomenych radcich

Teď bude následovat spousta nastavení klávesových zkratek, které jsou sice velmi užitečné, ale nebudu je popisovat víc, než jsou popsány v komentářích v kódu.

Samostatné písmenko za macro index znamená, že zkratkou je přesně ono písmeno. \C znamená Control. Všechno je case-sensitive.

# Postopone Draft ------------------------------------
bind compose p postpone-message             # odlozit zpravu (ulozit do Drafts)
bind index p recall-message                 # vyvolat odlozenou zpravu

# Ctrl-R - oznaci vse za prectene
macro index \Cr "T~UN." "mark all messages as read"

# Sync e-mail - spusti offlineimap (-f znamena pouze INBOX)
macro index O "offlineimap -o"          "run offlineimap to sync all mail"
macro index o "offlineimap -o -f INBOX" "run offlineimap to sync inbox"

# Kopirovani a presouvani mezi slozkami
macro index C "?" "copy a message to a mailbox"
macro index M "?" "move a message to a mailbox"

# Sidebar Navigation ---------------------------------
bind index,pager j   sidebar-next           # pohyb v sidebaru dolu
bind index,pager k     sidebar-prev         # pohyb v sidebaru nahoru
bind index,pager   sidebar-open      # otevrit oznacenou slozku

Shrnutí klávesových zkratek

S touto konfigurací tedy základní navigace vypadá následovně:

  • šipky nahoru/dolů: navigace v seznamu e-mailů
  • M, C: přesun a kopírování e-mailů mezi složkami
  • D: smazání e-mailu
  • F: označení e-mailu štítkem důležitý
  • t: oznaceni více zpráv najednou pro hromadné operace
  • j, k: pohyb v sidebaru
  • šipka doprava: vstup do složky zvolené v sidebaru
  • gg, G: skok na začátek, resp. konec seznamu e-mailů
  • ?: nápověda ke klávesovým zkratkám

Přílohy

Seznam příloh zobrazíte stiskem klávesy v. Při této příležitosti pravděpodobně budete chtít mít možnost zobrazit přílohy, které nejsou plaintextové (tedy zobrazitelné v terminálu), v náležitém programu. O to se postará následující nastavení.

Pamatujete si na .mailcap? Tak teď ho použijeme. Vytvořte soubor ~/.mutt/mailcap a vložte do něj následující nastavení.

# MS Word documents
application/msword; ~/.mutt/view_attachment.sh %s xdg-open
application/vnd.openxmlformats-officedocument.wordprocessingml.document; ~/.mutt/view_attachment.sh %s "-" '/usr/lib/libreoffice/program/soffice'

# Images
image/jpg; ~/.mutt/view_attachment.sh %s jpg xdg-open
image/jpeg; ~/.mutt/view_attachment.sh %s jpg xdg-open
image/pjpeg; ~/.mutt/view_attachment.sh %s jpg xdg-open
image/png; ~/.mutt/view_attachment.sh %s png xdg-open
image/gif; ~/.mutt/view_attachment.sh %s gif xdg-open

# PDFs
application/pdf; ~/.mutt/view_attachment.sh %s pdf "-" '/usr/bin/evince'

# HTML
text/html; ~/.mutt/view_attachment.sh %s html firefox new-tab %U 2>/dev/null

# Unidentified files
application/octet-stream; ~/.mutt/view_attachment.sh %s "-"

Toto nastavení definuje příkazy, které se mají provést v případě, že příloha má určitý MIME-type (je určitého typu). Já tady mám definované nejčastější formáty, které dostávám, tedy HTML (ano, to je suverénně nejčastější, protože spousta firem posílá své e-maily v HTML a textovou verzi se neobtěžují přidávat), dokumenty Office a PDF. Zbytek se moc neřeší.

Aby vám toto fungovalo, musíte si sehnat ten skript, který se o otevírání souborů stará. Ten si můžete stáhnout odsud, případně můžete zvolit moji pozměněnou verzi zde. Původní verze je pro OSX, takže v ní budete muset pozměnit pár věci, co se týče samotného otevírání souborů. Moje verze už je připravena pro Debianovské systémy, pokud máte něco jiného, moc si nepomůžete ani v jednom případě.

Pozn.: skript musíte dát ho na místo, které máte v konfiguraci v ~/.mutt/mailcap – v mém případě tedy ~/.mutt/view_attachment.sh -, a chmodnout, aby byl spustitelný:

chmod +x view_attachment.sh

Pokud všechno funguje, jak má, můžete otevřít přílohu stisknutím enter, pokud ne, tak vám to vyhodí nějakou chybu – v tom případě upřímnou soustrast a veselé debugování.

URL

Pokud se v e-mailu vyskytuje nějaký odkaz, ve většině moderních terminálů na něj můžete prostě kliknout myší. Ale jestli jste došli až sem, tak se se mnou (a opět i s autorem původní příručky) určitě shodnete, že klikat myší v terminálu je lame (ač to všichni čas od času děláme). Proto máme způsob, jak se tomu vyhnout.

Nainstalujte si urlscan.

apt-get install urlscan

Pak vytvořte soubor ~/.urlscan a vložte do něj následující:

COMMAND open %s

Tím sdělujeme urlscanu, jak má linky otevírat. Tady dokonce funguje volba převzatá z OSX, která to nechává na systému. Kdyby to nefungovalo, pravděpodobně tam budete chtít mít něco jako firefox new-tab %U 2>/dev/null.

Zbývá jen v ~/.muttrc nakonfigurovat klávesovou zkratku:

macro pager \Cu "|urlscan" "call urlscan to open links"

Nyní když stistknete ctrl-U, měl by se vám objevit seznam URL nalezených v e-mailu:

Snímek obrazovky -- Urlscan

Psaní e-mailů

Doteď jsme e-maily jenom četli, tak pojďme taky nějaký napsat. Nejdřív si nastavíme pár věcí:

# Compose View Options -------------------------------
set realname = "Moje Jméno"
set envelope_from
set sig_dashes                       # spojovniky pred podpisem
set edit_headers                     # zobrazit hlavicky pri psani zpravy
set fast_reply
set askcc                            # ptat se na CC
set fcc_attach
unset mime_forward
set forward_format = "Fwd: %s"       # format predmetu pri preposilani
set forward_decode
set attribution = "On %d, %n wrote:" # format uvadeni citace puvodni mailu pri odpovidani
set reply_to                         # respektovani Reply to pole
set reverse_name                     # magic, i guess
set include
set forward_quote

set editor = "vim"                   # pouzivat vim jako editor pri psani zprav

Většinu věcí kromě identity doporučuji neměnit. set editor říká, který editor se při komponování zpráv použije. Ukázky možností:

set editor = "nano"       # nano
set editor = "subl -w"    # sublime text
set editor="vim +':set textwidth=0' +':set wrapmargin=0' +':set wrap'"

Když nyní v Muttu stiskneme m, budeme dotázáni na příjemce, předmět a podobně a otevře se nám náš zvolený editor, v němž budou předvyplněny hlavičky a případný podpis, a můžeme psát. Pozor, tělo zprávy jde pod hlavičky, ne nad ně!

Když soubor uložíte, budete navráceni zpět do Muttu, kde můžete buď si zprávu prohlédnout (enter), dále ji editovat (e), přidat přílohu (a), nebo např. odejít bez odeslání (q). To nyní udělejte, protože Mutt zatím neví, jak zprávy odesílat.

Odesílání e-mailů

Ačkoliv je Mutt sám o sobě schopen odesílat e-maily, my použijeme msmtp; jednak proto, že schopnost Muttu odesílat e-maily se jaksi vymyká jeho určení (je to program na čtení e-mailů a operace s nimi, ne na komunikaci se serverem), a tudíž pravděpodobně nebude dokonalá, a jednak vyžaduje hesla v otevřené podobě, což, navzdory tomu, že je tu v tomto návodu tak mám, není ideální.

Nuže, nainstalujte si msmtp:

apt-get install msmtp

Vytvořte soubor ~/.msmtprc a pojďme editovat.

account edison23
host smtp.gmail.com
port 587
protocol smtp
auth on
from edison23@otakuland.cz
user edison23@otakuland.cz
password moje_heslo
tls on
tls_trust_file ~/.mutt/Equifax_Secure_CA.cert

account default : edison23

tls_trust_file umožňuje msmtp zjistit, jestli může věřit certifikátu, který mu server Googlu vrací. Prostě bezpečnostní magie. Ten klíč buďto můžete vzít odsud (pochází z původního návodu), a nebo si jej můžete vygenerovat sami.

-----BEGIN CERTIFICATE-----
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
70+sB3c4
-----END CERTIFICATE-----

Nyní musíme Muttu říci, že má používat msmtp.

# Sending Email --------------------------------------
set from     = "edison23@otakuland.cz"
set sendmail = "/usr/bin/msmtp -a default"
set sendmail_wait = 0
unset record

sendmail_wait říká, že Mutt má předat kontrolu uživateli až ve chvíli, kdy se e-mail odešle – tak je mnohem jasnější, když odesílání selže. unset record nastavuje, že se odeslané e-maily nemají ukládat do maildiru – to by mělo smysl, kdybychom měli klasický e-mail, ale v případě Gmailu to smysl nemá, protože ten je ukládá u sebe, a tudíž je při další synchronisaci dostaneme.

Teď zkuste napsat zprávu a odeslat ji (y). Pokud se vše zdaří, uvidíte ve spodním stavovém řádku „Sending message“, vyskytne-li se problém, msmtp vám to s chutí sdělí.

Odkládání e-mailu

Již dříve jsme v konfiguraci mj. nastavili, že odložit zprávu (uložit ji do Drafts) můžeme klávesou p. Touto klávesou ji také vyvoláme zpět k editaci. Mutt se navíc při vytváření nové zprávy (m) v případě, že jsou v Drafs nějaké drafty, zeptá, zda náhodou nechceme novou zprávu tvořit z draftu. Když mu to odsouhlasíte, dostanete se na dříve uloženou zprávu. Pokud vytvoříte draftů víc, budete pak vyzvání k výběru ze seznamu.

Kontakty

Na vyhledávání kontaktů a ukládání nových budeme využívat malý program v Pythonu zvaný Goobook. Ten nenajdete v repositářích, ale lze jej jednoduše nainstalovat přes manažer pythonovských balíčků Pip. Nejprve si tedy nainstalujte Pip:

apt-get install python-pip

Poté můžete jednoduše zadat následující příkaz a tím goobook nainstalujete:

pip install goobook

Do souboru ~/.goobookrc uložte své přihlašovací údaje:

[DEFAULT]
email: you@gmail.com
password: yourgooglepassword

Chcete-li komplexnější konfiguraci (např. bez plaintextových hesel), nahlédněte do ~/goobook/README.txt.

Abychom mohli Goobook používat v Muttu, musíme nabindovat několik kláves v ~/.muttrc:

set query_command="goobook query '%s'"
macro index,pager a "goobook add" "add sender to google contacts"
bind editor  complete-query
  • set query_command: způsob, jakým se má Googbok spouštět (můžete si to zkusit v terminálu, např. goobook query "nejake jmeno"
  • macro index,pager a: binduje a v indexu i v pageru na uložení adresy odesilatele přijatého e-mailu do kontaktů. Pozor, pokud už kontakt jednou v kontaktech máte, vytvoříte duplikát, žádná kontrola neprobíhá.
  • bind editor : kompletace adres při stisku tabulátoru

Nyní, když při vytváření nové zprávy v poli pro adresáta (nebo CC) napíšete prvních pár písmen jména/adresy některého ze svých kontaktů a stisknete tabulátor, bude vám buďto doplněna e-mailová adresa (bude-li nalezen jen jeden kontakt), nebo dostanete na výběr ze seznamu. Dobrý, co?

Pokud Goobook nic nenalezne, neudělá nic, takže nepoznáte, jestli vám umřelo připojení k internetu, nebo jste blbě zadali jméno adresáta.

Hledání

Popíšeme si tři způsoby prohledávání e-mailů v Muttu. Dva základní, jeden pokročilý, složitější na nastavení, ale zato skvělý a rychlý.

Obyčejné hledání

Když stisknete klávesu /, budete vyzvání k zadání řetězce, podle kterého se bude hledat. Tento řetězec může být i regex. Toto hledání bere v potaz pouze pole odesilate, příjemce a předmět. Nikoliv tělo zprávy.

Vedle regexů lze používat i muttovské výrazy, které dávají hledání velkou sílu: ~f arthur ~C honza ~s api = najdi zprávy od arthur, které byly CCované pro honza a měly předmět api.

Klávesou n můžete přejít na další zprávu, která odpovídá dotazu. Přechod na předchozí není defaultně definován, já jsem si to nabindoval na čárku:

bind index , search-opposite
bind pager , search-opposite

Limitování

Druhým způsobem, který Mutt nabízí v oblasti obyčejného hledání (nebere v potaz tělo zprávy), je limitace. Jediný rozdíl oproti obyčejnému hledání přes / je ten, že Mutt skryje zprávy, které neodpovídají zadanému dotazu.

Limitování vyvoláte klávesou l.

Fulltextové vyhledávání

Fulltextově své e-maily můžete prohledávat dvěma způsoby. Jeden je jednoduchý a velmi pomalý (když máte hodně e-mailů), druhý je složitější a velmi rychlý. Pokud máte méně než 500 e-mailů a neplánujete jich mít více, neobtěžujte se s touto sekcí a používejte obyčejné hledání/limitování s flagem ~B, tedy / nebo l a:

~B nejaky text, co je v tele e-mailu

Pokud jich máte víc, pořidťe si Notmuch.

apt-get install notmuch

Po instalaci spustťe notmuch new a sdělte notmuchi pár údajů, na které se zeptá. Když se zeptá na složku, kde máte archiv zpráv, chce vědět nejvyšší složku vašeho účtu, v mé konfiguraci tedy ~/.mail/edison23.

Potom spustťe notmuch new, aby si notmuch mohl vytvořit index. To může chvíli zabrat.

Aby se vám zprávy reindexovaly po každé změně maildiru, přidejte do ~/.offlineimaprc do sekce Account (v mém případě [Account edison23]) následující (pokud to tam už nemáte, uváděl jsem to již výše):

postsynchook = notmuch new

Nyní si můžete vyzkoušet prohledávání e-mailů z terminálu:

notmuch search hledaný výraz

Abyste mohli vyhledávát Muttu, budete potřebovat malý pythonovský skript, který integraci zajistí. Ten si stáhněte odsud a dejte si ho do PATH někam (a učiňte jej spustitelným), udělejte následující a zkontrolujte, že výstup odpovídá:

mutt-notmuch-py -G ~/.mail/temporary/search
Query: foo

ls ~/.mail/temporary/search
cur new

Dočasné složky cur a new obsahuje výsledky hledání se stejnou strukturou, jako normální složky v maildiru, takže se s nimi dá i stejně v Muttu pracovat. Jejich obsah je při každém spuštění hledacího skriptu smazán.

Nyní už zbývá jen dořešit klávesové zkratky a podobné "maličkosti". Do ~/.muttrc tedy přidejte následující:

macro index S "unset wait_keymutt-notmuch-py ~/.mail/temporary/search+temporary/search" "search mail (using notmuch)"

Tahle šílenost říká Muttu následující:

  • nabinduj klávesu S
  • nečekej na stisk klávesy po dokončení hledání
  • spusť mutt-notmuch-py a předej mu kontrolu
  • přejdi do adresáře +temporary/search v módu pouze pro čtení (výsledky hledání je blbost editovat)
  • obvyklý komentář, co to dělá…

A ještě si pro své pohodlí přidejte v ~/.muttrc do seznamu složek v sidebaru výsledky hledání:

# Mailboxes to show in the sidebar.
mailboxes +edison23/INBOX \
          +edison23/drafts \
          ...
          +temporary/search \

Tím máme vyřešené hledání, což z těch životně důležitých věci bylo poslední. To, co následuje, už je čistě otázka vkusu.

Barvy

Jelikož v Muttu jde nadefinovat skoro všechno (ano, už jsem přišel na věc, která nejspíš nejde), lze v něm i naprosto libovolně nastavit barevné téma.

Já vám zde předložím dvě stažená z Internetu a k nim jejich dvě verze, které jsem si upravil, abych s nimi byl spokojen.

8barevné téma

Relativně jednoduché téma, ke kterému nepotřebujete tweakovat svůj terminál, aby podporoval více než 8 barev, lze najít zde. Moje modifikace je k disposici zde.

256barevné téma

Relativně složitější, ale také s většími možnostmi, je téma z řady solarized. Jeho původní verzi (resp. několik verzí) můžete najít zde. Moje modifikace tmavého tématu, která by se tvůrci nejspíš tolik nelíbila, ale mně přijde použitelnější, najdete zde.

Pokud váš terminál nepodporuje 256 barev, doporučuji svůj dřívější článek.

Závěr

Došli jste až sem? Gratuluji, máte slušnou šanci si Mutt zamilovat pro jeho nastavitelnost, komplexnost a přesto imponující eleganci. Postupně budete přicházet na další věci, jak si ho nastavit, co kde vylepšit a bude možná docela trvat, než narazíte na limity, které nedokážete vyřešit. Pořád si s ním budete hrát, než to bude dokonalý, váš jediný milovaný Mutt.

Budu rád, když se o své zkušenosti, poznatky, vylepšení, etc. podělíte v komentářích. Stejně tak budu vděčný za hlášení chyb.

Tohle je můj Mutt. Je mnoho takových Muttů, ale tenhle je můj. Bez svého Muttu nejsem nic. Beze mě není můj Mutt nic.