Všechny e-mailové klienty jsou mizerné, tenhle je mizerný o trochu méně.
— Michael R. Elkins, cca 1995
[toc]
Ú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 normální gmailovský účet.
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.

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, takapt-get install sqlite
- postsynchook: tím po synchronisaci zavoláme notmuch, aby nám e-maily reindexoval
[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)
Nastavení pro lokální stranu.
- 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.
[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', ]
Nastavení pro vzdálenou stranu.
- 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 (už chápete, proč tvrdím, že posílat přílohy větší než 1 MB je prasárna, a rovnou to mažu?) do vašeho maildiru. 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 zajimá 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-mailu, nemáme nastavené klávesové zkratky a spoustu dalších věcí, ale na oveř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:

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 tagem 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:

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á, jaký editor se při komponování zpráv použije. Ukázky možností:
set editor = "nano" # nano set editor = "subl -w" # sublime text
Když nyní v Muttu stiskneme m
, budeme dotázání 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 <Tab>: 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 lomítko/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é nesmysly. 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) - a 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 mne 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.