Mutt
Mutt è un client email che si utilizza da terminale.
Installazione§
# Su Arch
$ sudo pacman -S mutt
# Su Debian/Ubuntu
$ sudo apt install mutt
È disponibile un po' dappertutto, comunque (il nome è sempre quello).
Assocciare a casella Gmail§
Ormai evito di utilizzare il servizio mail di Big G.
Gmail, purtroppo, blocca l'accesso alle app non Google per motivi di sicurezza, ma ci permette di superare il problema attraverso un piccolo procedimento.
Accedere al proprio account Google attraverso questo link, dopodiché aprire la sezione sicurezza ed abilitare l'autenticazione a due fattori. Questa consiste nell'associare alla mail un numero di telefono: come già avviene con altre app (come Telegram), ogni accesso all'account Google sarà seguito dall'invio di un codice di accesso a sei cifre che ci consentirà di garantire la nostra identità.
A questo punto, sempre nella sezione sicurezza, apparirà la sottosezione "Password per le app", che è proprio quello che fa al caso nostro, dato che vogliamo associare Mutt. Abilitiamo questa funzione e clicchiamo su "Genera", così Google genererà per noi una password di 16 caratteri specifica per l'app in questione. Scriviamocela da qualche parte, perché bisogna copiare ed incollare questi sedici caratteri nel file di configurazione di Mutt, cioè ~/.muttrc
. Quest'ultimo, però, dobbiamo prima crearlo.
Apriamo il terminale:
$ nano ~/.muttr
Incollare il seguente testo:
#======================================================#
# USER VARIABLES
set my_name = "Name Surname"
set my_username = "user.name"
set my_address = "user.name@gmail.com"
set my_password = "my-password"
#======================================================#
# Boring details
set realname = $my_name
set from = $my_address
set use_from = yes
set envelope_from = "yes"
set sendmail="/usr/bin/msmtp"
# If not set in environment variables:
set spoolfile = "+INBOX"
#======================================================#
# FOLDERS
set folder="~/Mail" # Mailboxes in here
set record="+sent" # where to store sent messages
set postponed="+postponed" # where to store draft messages
set move=no # Don't move mail from the spool.
#======================================================#
# Watch these mailboxes for new mail:
mailboxes ! +Fetchmail +slrn +mutt
set sort_browser=alpha # Sort mailboxes by alpha(bet)
#======================================================#
# EDITOR
# Vim or Nano (default)?
# Uncomment the following for nano:
set editor = "nano"
# Uncomment the following for vim:
# set editor="vim -c 'set tw=70 et' '+/^$' "
# See the headers when editing:
set edit_headers
# Set charset as utf-8 in order to avoid problems; change only if you know what you're doing.
set charset = "utf-8"
# IMAP
set imap_user = "$my_address"
set imap_pass = "$my_password"
set folder = "imaps://imap.gmail.com/"
set ssl_force_tls = yes
# Store message headers locally to speed things up.
# If hcache is a folder, Mutt will create sub cache folders for each account which may speeds things up even more.
set header_cache = ~/.cache/mutt
# Store messages locally to speed things up, like searching message bodies.
# Can be the same folder as header_cache.
# This will cost important disk usage according to your e-mail amount.
set message_cachedir = "~/.cache/mutt"
# Specify where to save and/or look for postponed messages.
set postponed = +[Gmail]/Drafts
# Allow Mutt to open a new IMAP connection automatically.
unset imap_passive
# Keep the IMAP connection alive by polling intermittently (time in seconds).
set imap_keepalive = 300
# How often to check for new mail (time in seconds).
set mail_check = 120
#======================================================#
# SMTP
set smtp_url = "smtps://$my_username@gmail.com@smtp.gmail.com:465/"
set smtp_pass = "$my_password"
#======================================================#
# Odds and ends
set markers # mark wrapped lines of text in the pager with a +
set smart_wrap # Don't wrap mid-word
set pager_context=5 # Retain 5 lines of previous page when scrolling.
set status_on_top # Status bar on top.
push <show-version> # Shows mutt version at startup
Sostituire nei rispettivi campi iniziali (dove ho scritto USER VARIABLES
) nome e cognome, username e password (inserendo quella appena generata). Ci sono sicuramente miriadi di opzioni in più che possono essere aggiunte e migliorie varie da apportare a questo livello, ma per il momento andiamo avanti. Successivamente, sarete liberi di cercare altrove la configurazione che più fa per voi.
Apriamo mutt da terminale:
$ mutt
A questo punto il software dovrebbe effettuare l'accesso con successo e mostrarvi le mail.
Ma non tutti sono così fortunati, io ad esempio no, infatti ho ottenuto il seguente errore \<cartella> No such file or directory (errno = 2)
. In effetti, il problema potrebbe essere dato dall'assenza del file indicato, la cui creazione magari richiede i permessi da amministratore. La soluzione è in breve la seguente:
$ sudo touch <file>
Ma a che serve questo file? Si tratta della mailbox di mutt, cioè del luogo in cui il programma conserva tutte le informazioni relative alle mail. Mutt non utilizza, infatti, un complesso database per la gestione dei dati, ma un file1 (che qualcuno definirebbe "flat") nel quale va ad aggiungere via via i dati necessari attraverso un semplice append
. Se l'obiettivo era di mantenere le cose semplici, gli sviluppatori ci sono riusciti alla grandissima e si sono mantenuti molto sul semplice.
Operazioni facoltative§
Volendo, possiamo direttamente aggiungere delle shortcut in stile Gmail, per facilitarci la navigazione via tastiera. Questo si fa modificando lo stesso file di configurazione di prima, cioè muttrc. Propongo le seguenti, che sono state prese da questo gist:
#======================================================#
# Gmail-like keyboard shortcuts
macro index,pager ga "<change-folder>=[Gmail]/All<tab><enter>" "Go to all mail"
macro index,pager gi "<change-folder>=INBOX<enter>" "Go to inbox"
macro index,pager gs "<change-folder>=[Gmail]/Starred<enter>" "Go to starred messages"
macro index,pager gd "<change-folder>=[Gmail]/Drafts<enter>" "Go to drafts"
# The following is different from Gmail, but wanted to keep "y" to show folders:
macro index,pager e "<enter-command>unset trash\n <delete-message>" "Gmail archive message"
Mi si presenta un nuovo errore: Error sending message, child exited 127 (Exec error.)
, ma non è più un problema di configurazione. Come risolvere? Su stackoverflow consigliano di lanciare:
$ sudo apt-get install sendmail
Installato questo pacchetto, dovreste essere a posto. A me ha funzionato. In generale, però, sconsiglio di usare il terminale per inviare le mail, dato che mi pare di capire sia più elevata la probabilità che finiscano nello spam.
Comandi Mutt§
^B M <enter-command> set my_pipe_decode=$pipe_decode pi... call urlview to extract URLs out of a message
^D delete-thread cancella tutti i messaggi nel thread
^E edit-type modifica il tipo di allegato
^F forget-passphrase cancella la/le passphrase dalla memoria
<Tab> next-new-then-unread salta al successivo messaggio nuovo o non letto
<Return> display-message visualizza un messaggio
^K extract-keys estra le chiavi pubbliche PGP
^N next-thread salta al thread successivo
^P previous-thread salta al thread precedente
^R read-thread segna il thread corrente come già letto
^T untag-pattern togli il segno ai messaggi corrispondenti al modello
^U undelete-thread de-cancella tutti i messaggi nel thread
<Esc><Tab> previous-new-then-unread salta al precedente messaggio nuovo o non letto
<Esc>C decode-copy fai una copia decodificata (text/plain)
<Esc>P check-traditional-pgp controlla firma PGP tradizionale
<Esc>V collapse-all (de)comprimi tutti i thread
<Esc>b M <search>~b search in message bodies
<Esc>c change-folder-readonly apri un altro folder in sola lettura
<Esc>d delete-subthread cancella tutti i messaggi nel subthread
<Esc>e resend-message usa il messaggio corrente come modello per uno nuovo
<Esc>k mail-key spedisci una chiave pubblica PGP
<Esc>l show-limit mostra il modello limitatore attivo
<Esc>n next-subthread salta al subthread successivo
<Esc>p previous-subthread salta al thread seguente
<Esc>r read-subthread segna il subthread corrente come già letto
<Esc>s decode-save fai una copia decodificata (text/plain) e cancellalo
<Esc>t tag-thread segna il thread corrente
<Esc>u undelete-subthread de-cancella tutti i messaggi nel subthread
<Esc>v collapse-thread (de)comprimi il thread corrente
<Space> display-message visualizza un messaggio
# break-thread dividi il thread in due parti
$ sync-mailbox salva i cambiamenti nella mailbox
% toggle-write (dis)attiva se la mailbox sarà riscritta
& link-threads collega il messaggio segnato con quello attuale
. buffy-list elenca le mailbox con nuova posta
@ display-address visualizza l'indirizzo completo del mittente
C copy-message copia un messaggio in un file/mailbox
D delete-pattern cancella i messaggi corrispondenti al modello
F flag-message (dis)attiva il flag 'importante' del messaggio
G fetch-mail recupera la posta dal server POP
J next-entry spostati alla voce successiva
K previous-entry spostati alla voce precedente
L list-reply rispondi alla mailing list indicata
N toggle-new (dis)attiva il flag 'nuovo' di un messaggio
O sort-reverse ordina i messaggi in ordine inverso
P parent-message salta al messaggio padre nel thread
Q query chiedi gli indirizzi a un programma esterno
R recall-message richiama un messaggio rimandato
T tag-pattern segna i messaggi corrispondenti al modello
U undelete-pattern de-cancella i messaggi corrispondenti al modello
P parent-message salta al messaggio padre nel thread
Q query chiedi gli indirizzi a un programma esterno
R recall-message richiama un messaggio rimandato
T tag-pattern segna i messaggi corrispondenti al modello
U undelete-pattern de-cancella i messaggi corrispondenti al modello
V show-version mostra il numero di versione e la data di Mutt
W clear-flag cancella il flag di stato da un messaggio
Y edit-label add, change, or delete a message's label
a create-alias crea un alias dal mittente del messaggio
b bounce-message rispedisci un messaggio a un altro utente
c change-folder apri un altro folder
d delete-message cancella la voce corrente
e M <enter-command>unset trash\n <delete-message> Gmail archive message
f forward-message inoltra un messaggio con i commenti
ga M <change-folder>=[Gmail]/All<tab><enter> Go to all mail
gd M <change-folder>=[Gmail]/Drafts<enter> Go to drafts
gi M <change-folder>=INBOX<enter> Go to inbox
gs M <change-folder>=[Gmail]/Starred<enter> Go to starred messages
h display-toggle-weed visualizza il messaggio e (dis)attiva la rimozione degli header
j next-undeleted salta al messaggio de-cancellato successivo
k previous-undeleted salta al precedente messaggio de-cancellato
l limit mostra solo i messaggi corrispondenti al modello
m mail componi un nuovo messaggio
o sort-mailbox ordina i messaggi
p print-message stampa la voce corrente
q quit salva i cambiamenti alla mailbox ed esci
r reply rispondi a un messaggio
s save-message salva messaggio/allegato in una mailbox/file
u undelete-message de-cancella la voce corrente
v view-attachments mostra gli allegati MIME
w set-flag imposta un flag di stato su un messaggio
x exit esci da questo menù
y browse-mailboxes select a new mailbox from the browser
| pipe-message manda un messaggio/allegato a un comando della shell con una pipe
~ mark-message create a hotkey macro for the current message
<Down> next-undeleted salta al messaggio de-cancellato successivo
<Up> previous-undeleted salta al precedente messaggio de-cancellato
<Enter> display-message visualizza un messaggio
Assegnazioni generiche:
<Return> select-entry seleziona la voce corrente
^L refresh cancella e ridisegna lo schermo
<Esc>/ search-reverse cerca all'indietro una espressione regolare
! shell-escape esegui un comando in una subshell
* last-entry spostati all'ultima voce
/ search cerca una espressione regolare
1 jump salta a un numero dell'indice
2 jump salta a un numero dell'indice
3 jump salta a un numero dell'indice
4 jump salta a un numero dell'indice
5 jump salta a un numero dell'indice
6 jump salta a un numero dell'indice
7 jump salta a un numero dell'indice
8 jump salta a un numero dell'indice
9 jump salta a un numero dell'indice
: enter-command inserisci un comando di muttrc
; tag-prefix applica la funzione successiva ai messaggi segnati
< previous-line spostati in alto di una riga
= first-entry spostati alla prima voce
> next-line spostati una riga in basso
? help questo schermo
H top-page spostati all'inizio della pagina
L bottom-page spostati in fondo alla pagina
M middle-page spostati in mezzo alla pagina
Z previous-page spostati alla pagina precedente
[ half-up sposta verso l'alto di 1/2 pagina
] half-down sposta verso il basso di 1/2 pagina
j next-entry spostati alla voce successiva
k previous-entry spostati alla voce precedente
n search-next cerca la successiva corrispondenza
q exit esci da questo menù
t tag-entry segna la voce corrente
z next-page spostati alla pagina successiva
<Down> next-entry spostati alla voce successiva
<Up> previous-entry spostati alla voce precedente
<Left> previous-page spostati alla pagina precedente
<Right> next-page spostati alla pagina successiva
<Home> first-entry spostati alla prima voce
<F1> M <shell-escape> zcat /usr/share/doc/mutt/manual.txt... show Mutt documentation
<PageDown> next-page spostati alla pagina successiva
<PageUp> previous-page spostati alla pagina precedente
<Enter> select-entry seleziona la voce corrente
<End> last-entry spostati all'ultima voce
Funzioni non assegnate:
browse-mailboxes-readonly select a new mailbox from the browser in read only mode
next-unread-mailbox apri la mailbox successiva con nuova posta
compose-to-sender compose new message to the current message sender
edit modifica il messaggio grezzo
group-chat-reply reply to all recipients preserving To/Cc
group-reply rispondi a tutti i destinatari
imap-fetch-mail recupera la posta dal server IMAP
imap-logout-all termina la sessione con tutti i server IMAP
edit modifica il messaggio grezzo
group-chat-reply reply to all recipients preserving To/Cc
group-reply rispondi a tutti i destinatari
imap-fetch-mail recupera la posta dal server IMAP
imap-logout-all termina la sessione con tutti i server IMAP
purge-message delete the current entry, bypassing the trash folder
tag-subthread segna il subthread corrente
next-new salta al successivo nuovo messaggio
previous-new salta al precedente messaggio nuovo
next-unread salta al successivo messaggio non letto
previous-unread salta al precedente messaggio non letto
root-message jump to root message in thread
decrypt-copy fai una copia decodificata
decrypt-save fai una copia decodificata e cancellalo
sidebar-next move the highlight to next mailbox
sidebar-next-new move the highlight to next mailbox with new mail
sidebar-open open highlighted mailbox
sidebar-page-down scroll the sidebar down 1 page
sidebar-page-up scroll the sidebar up 1 page
sidebar-prev move the highlight to previous mailbox
sidebar-prev-new move the highlight to previous mailbox with new mail
sidebar-toggle-visible make the sidebar (in)visible
tag-prefix-cond applica la successiva funzione SOLO ai messaggi segnati
end-cond fine dell'esecuzione condizionata (noop)
search-opposite cerca la successiva corrispondenza nella direzione opposta
current-top muovi la voce all'inizio dello schermo
current-middle muovi al voce in mezzo allo schermo
current-bottom muovi la voce in fondo allo schermo
error-history display recent history of error messages
what-key mostra il keycode per un tasto premuto
check-stats calculate message statistics for all mailboxes
Sincronizzare le mail offline§
Per sincronizzare le mail in remoto con dei file in locale, possiamo usare offlineimap. In caso aveste problemi ad interfacciarvi con le mail direttamente seguendo la procedura sopra, questa operazione potrebbe risolvervi il problema senza farvi sbattere troppo.
$ sudo apt-get install offlineimap
Offlineimap funziona molto bene con Gmail, quindi fa al caso nostro. Per gestire quest'altro software, abbiamo giustamente bisogno di un altro file di configurazione, ~/.offlineimaprc
:
[general]
ui=Curses.Blinkenlights
accounts = private
[Account private]
localrepository = hs-Local
remoterepository = hs-Remote
[Repository hs-Local]
type = Maildir
localfolders = ~/.mail/private
[Repository hs-Remote]
type = Gmail
remoteuser = yourusername
remotepass = yourpassword
realdelete = no
nametrans = lambda folder: re.sub('.*Spam$', 'spam',
re.sub('.*Bozze$', 'drafts',
re.sub('.*Importanti$', 'essentials',
re.sub('.*inviata$', 'sent',
re.sub('.*Speciali$', 'flagged',
re.sub('.*Cestino$', 'trash',
re.sub('.*Tutti i messaggi$', 'archive', folder)))))))
Leggere agevolmente l'HTML§
La maggior parte delle mail oggi sono (purtroppo) pensate con tonnellate di codice HTML/CSS + immagini e scriptini vari (che il più delle volte vengono bloccati dal client, rendendo l'esperienza tutt'altro che piacevole). Come facciamo a leggerle da terminale? Ci aiuta LYNX, uno dei più vecchi (se non il più vecchio) browser in circolazione, in grado di leggere l'html in forma puramente testuale, formattando il testo in maniera molto comprensibile ed ancora utilizzato in certe nicchie d'utenza (es. non vedenti). L'idea è far fare il lavoro sporco a lynx (ma potremmo impiegare anche links o w3m, che fanno più o meno la stessa cosa).
Installiamo lynx:
$ sudo apt-get install lynx
A questo punto creiamo un altro file (è l'ultimo, prometto):
$ sudo touch .mailcap
Ed incolliamo il seguente testo:
text/html; lynx %s; nametemplate=%s.html
text/html; lynx -dump %s; nametemplate=%s.html; copiousoutput
Sostituite lynx al browser che preferite, in caso vogliate utilizzare links, w3m o qualcos'altro.
Torniamo su .muttrc
ed aggiungiamo questa riga (un po' dove ci pare):
auto_view text/html
A questo punto lanciamo mutt
ed esploriamo le email raccolte. Buon divertimento a tutti.
https://www.bigbrus.com/2015/01/31/mutt-error-folder-is-not-mailbox/
Questo post ti è stato utile?
Tieni a mente che questo sito è privo di tracker, analytics e pubblicità, quindi tutela la tua privacy ma non guadagna dalle visite (inoltre, è progettato per avere un impatto ambientale minimo).
Se ti piace questo blog, sostieni le mie riserve di caffeina