Inizio Capitolo

Introduzione


Forget about that mouse with 3/4/5 buttons - gimme a keyboard with 103/104/105 keys! [Sven Guckes]

Conoscere Mutt


L'organizzazione dei menu

Per iniziare, facciamo una panoramica di come è organizzato Mutt e dei comandi base per il suo utilizzo, prima di illustrare i processi mediante i quali possiamo scrivere, leggere, gestire i nostri messaggi email.

Mutt è organizzato per menù, ovvero schermate dedicate alle varie attività. Vediamole:

Index Menu
L'index menu è la schermata con cui ci viene presentato l'elenco dei messaggi contenuti nella mailbox della posta in arrivo. E' il menu che vediamo appena entrati in Mutt e da cui selezioniamo i messaggi da leggere.

Dal link sottostante puoi accedere ad uno screenshot dell'Index Menu di una delle mie mailbox:
Index Menu Screenshot (di bassa qualità per contenere il peso del jpg)

Browser Menu
Attraverso il browser menu possiamo navigare nelle mailbox disponibili, nonchè tra le directory del nostro disco fisso (ad esempio per selezionare un attachment o per salvarlo).
Se la posta in arrivo viene smistata (ad esempio con procmail) su diverse mailbox, possiamo chiedere a Mutt di verificare la posta in arrivo su tutte le possibili mailbox e pertanto sarà il browser menu la schermata di avvio di Mutt. Le mailbox contenenti nuovi messaggi saranno evidenziate con il flag N. (L'illustrazione del come la leggiamo più avanti, sempre in questo capitolo).

Dal link sottostante puoi accedere ad uno screenshot del mio Browser Menu:
Browser Menu Screenshot (di bassa qualità per contenere il peso del jpg)

Pager
Il pager è la schermata in cui leggiamo il testo di un messaggio contenuto in una nostra mailbox ed elencato nell'index menu.

Dal link sottostante puoi accedere ad uno screenshot del Pager:
Pager Screenshot (di bassa qualità per contenere il peso del jpg)

Alias Menu
L'alias menu è la schermata che visualizza l'elenco degli alias, ovvero dei nickname a cui abbiamo associato, per comodità, un indirizzo email. Da questa schermata possiamo scegliere quindi i destinatari dei nostri messaggi. Gli alias costituiscono una sorta di address book minimale integrato in Mutt. Vedremo come sia possibile utilizzare anche address book esterni più sofisticati.

Dal link sottostante puoi accedere ad uno screenshot dell'Alias Menu:
Alias Menu Screenshot (di bassa qualità per contenere il peso del jpg)

Compose Menu
Al compose menu si accede dopo aver scritto un messaggio e da lì possiamo confermare la spedizione, allegare un file, decidere di rimandare la spedizione ad un secondo momento, ritornare ad editare il file, correggere gli header principali (To:, From:, Subject:,...), firmare e/o criptare con GnuPG il messaggio, ecc...

Dal link sottostante puoi accedere ad uno screenshot del Compose Menu:
Compose Menu Screenshot (di bassa qualità per contenere il peso del jpg)

Attachment Menu
L'attachment menu serve per gestire i file allegati ai messaggi.

Dal link sottostante puoi accedere ad uno screenshot dell'Attachment Menu:
Attachment Menu Screenshot (di bassa qualità per contenere il peso del jpg)

Postponed Menu
Il postponed menu è la schermata con cui Mutt ci presenta, per la selezione, l'elenco dei messaggi scritti di cui abbiamo rimandato la spedizione (messaggi postposti).

Dal link sottostante puoi accedere ad uno screenshot del Postponed Menu:
Postponed Menu Screenshot (di bassa qualità per contenere il peso del jpg)

Help Menu
L'help menu è la schermata che elenca le associazioni tra i tasti e i comandi disponibili nella schermata da cui l'help menu è stato richiamato.

Dal link sottostante puoi accedere ad uno screenshot del Help Menu:
Help Menu Screenshot (di bassa qualità per contenere il peso del jpg)

PGP Menu
Il PGP Menu è la schermata che elenca e ci consente di selezionare le chiavi pubbliche PGP, disponibili nel nostro portachiavi. Vedremo il PGP Menu nel capitolo dedicato all'utilizzo di GnuPg con Mutt.

Ci sono infine due ulteriori menu che non tratteremo in questa guida: il mix menu ed il query menu.



^top

Elementi comuni nelle diverse schermate




^top

Comandi essenziali


Vediamo le basi minime per non perdersi con Mutt se siamo alle prime armi.

Digitiamo mutt da riga di comando per avviare Mutt.

Premiamo ? per conoscere i comandi disponibili nella schermata dove ci troviamo
(ogni schermata, in base alle funzioni che consente di svolgere,
ha i propri comandi, anche se molti sono comuni).

Premiamo Control g per annullare un comando senza completarlo.
(I comandi possono essere interrotti se richiedono all'utente
un input da tastiera. Ad esempio, se digitiamo m, Mutt
avvia la composizione di un messaggio chiedendoci di digitare
l'indirizzo del destinatario;
in tal caso, possiamo interrompere il processo con Control g).

Sfruttiamo la prima riga in alto di ogni maschera per conoscere
il tasto con cui uscire dalla maschera, visto che Mutt lo
suggerisce sempre (il primo da sinistra).
Di norma il tasto è i (index) oppure q (quit).

Premiamo q (quit) per uscire da Mutt
salvando i cambiamenti alle mailbox
(ad es.: cancellando i messaggi marcati per la cancellazione).

Premiamo x (exit) per uscire da Mutt senza
salvare i cambiamenti alle mailbox.

Premiamo c (change-folder) per cambiare mailbox.

Premiamo ! (shell-escape) per far eseguire da riga di comando un programma.
Se, ad esempio, vogliamo visualizzare il calendario del mese premiamo !,
sull'ultima riga (la input line) Mutt ci chiede di specificare il comando,
scriviamo cal ed il gioco è fatto.


^top

Ovvero: come passare da una mailbox all'altra.

Una volta che dal browser menu siamo entrati (premendo Invio sulla mailbox selezionata) nell'index menu di una mailbox possiamo ritornare in modo semplice al browser menu. Vediamo come.

  1. Premiamo c (change-folder).
  2. Mutt ci chiede di inserire, sull'ultima riga dedicata all'input dei comandi, il nome della mailbox in cui vogliamo entrare.
  3. Invece che scrivere a memoria la mailbox, è sicuramente più facile selezionarla dall'elenco del browser menu. Per fare questo sfruttiamo la funzionalità di tab completion e premiamo Tab (o anche ?, come suggerito dallo stesso Mutt).
  4. Premuto una volta Tab, Mutt apre il browser menu mostrandoci la directory che ospita la mailbox principale (nel file di configurazione la directory viene settata mediante la variabile folder, mentre la mailbox principale mediante la variabile spoolfile). (Più avanti possiamo leggere un approfondimento sul tema mailbox).
  5. Se vogliamo entrare nella mailbox principale la selezioniamo con il cursore e ci entriamo premendo Invio.
  6. Premiamo invece di nuovo Tab, se stiamo cercando un messaggio in un'altra mailbox.
  7. Premuto una seconda volta Tab, Mutt ci mostra nel browser menu, oltre alla mailbox principale, tutte le mailbox che abbiamo settato con il comando mailboxes. Da qui, selezionare ed entrare in quella che ci interessa diventa troppo facile.

In sintesi, per non farla sembrare difficile: c Tab Tab Seleziono Invio.
Con quanto suscritto spero di evitare al neo mutter i dubbi che mi assillarono sul come ci si potesse muovere dentro Mutt, appena iniziai ad usarlo.

Per completezza vediamo anche alcune "scorciatoie da tastiera" che Mutt ci offre per raggiungere più velocemente alcune mailbox:

Usando il comando c mentre siamo nell'index menu:
	!    	ci porta alla mailbox della posta in arrivo
	    	(definita con la variabile spoolfile)
			
	-    	ci porta all'ultima mailbox visitata

	@alias  ci porta alla mailbox denominata con l'indirizzo email
	    	associato all'alias specificato (la parte ante chiocciola)
			
	<    	ci porta alla mailbox della posta letta e archiviata
	    	(definita con la variabile mbox)
	    	Mutt cerca in realtà sempre la mailbox chiamata mbox, se
	    	abbiamo definito un nome diverso o usiamo più cartelle
	    	tramite gli hooks la scorciatoia non funziona.
			
	>    	ci porta alla mailbox della posta spedita
	    	(definita con la variabile record)
	    	Se abbiamo inserito la mailbox all'interno di una directory
	    	(ad esempio /home/utente/Mail/Sent/) la scorciatoia non
	    	funziona.

Usando il comando c mentre siamo nel browser menu:
	~    	ci porta alla nostra home directory
	
	= o +   ci porta alla maildir, ovvero la directory che contiene
		tutte le mailbox (definita con la variabile folder)


^top

Gli status flag, utili informazioni sul messaggio

Nell'indice dei messaggi (index menu), oltre a leggere del mittente e del soggetto del messaggio, Mutt ci fornisce ulteriori informazioni anche attraverso la visualizzazione di codici, detti status flag.

Di default questi codici vengono visualizzati subito a destra del numero progressivo del messaggio.

I flag sono di status perchè consentono di vedere quali sono i messaggi cancellati, quelli marcati come importanti, quelli che provengono da una nostra casella di posta (che ci siamo autospediti), ecc...

I principali status flag sono:
	N    	il messaggio è nuovo e non letto
O il messaggio è vecchio e non letto
r il messaggio ha avuto una nostra risposta
D il messaggio è stato marcato per la cancellazione (comando d, delete)
d il messaggio ha un allegato marcato per la cancellazione
! il messaggio è stato marcato come importante (comando F, flag)
* il messaggio è stato "taggato" per una successiva operazione (comando t, tag)

Abbiamo poi altri sei status flag molto utili che indicano a chi è stato indirizzato il messaggio.
	spazio  messaggio in cui non sono il destinatario
+ messaggio indirizzato solo a me
T messaggio per me, ma con altri in cc
C messaggio per me in cc
F messaggio ricevuto da un mio indirizzo (specificato con la variabile alternates)
L messaggio spedito ad una mailing list sottoscritta (mediante la variabile subscribe)

Questi ultimi sei status flag possono essere personalizzati settando nel file di configurazione di Mutt la variabile to_chars.

Nel capitolo dedicato all'utilizzo di GnuPG con Mutt esporremo gli ulteriori status flag specifici per i messaggi trattati con GnuPG (firma digitale e criptazione del messaggio).

Nel Browser Menu non abbiamo status flag, con l'eccezione di quello (N) che ci indica quale mailbox ha al suo interno nuovi messaggi non letti.



^top

Il file di configurazione .muttrc

Nel corso dei vari argomenti trattati nella guida faremo spesso riferimento al file di configurazione di Mutt, portando degli esempi tratti da quello che uso sulla mia Linux Box.

.muttrc è un file di testo che contiene una serie di settaggi e di comandi che ci consentono di customizzare al massimo il comportamento di Mutt. Il file viene letto da Mutt ad ogni suo avvio.

L'elenco completo di tutti i possibili comandi e variabili di configurazione lo possiamo leggere nel manuale di Mutt. Per ciascun comando o variabile abbiamo la descrizione e la sintassi. Per le variabili troviamo anche il valore di default e, in base al tipo, gli altri possibili valori. Ove opportuno il manuale riporta anche il riferimento ad altri comandi e o variabili in qualche modo collegate.

Per far si che Mutt applichi la configurazione desiderata al nostro utente, dobbiamo creare nella nostra home directory, magari partendo da uno di esempio, il nostro file .muttrc (notare il punto iniziale), con tutti i settaggi che riterremo opportuni.

Se la nostra distribuzione è Debian, possiamo trovare dei file .muttrc di esempio nella directory /usr/share/doc/mutt/examples/. Lo stesso vale anche per le altre distribuzioni, ma non so se il percorso sia lo stesso (un semplice locate muttrc da terminale will do the tricks).

In questo documento ci sono molti esempi di configurazione del .muttrc, per gran parte estratti dal mio file di configurazione. L'intero file può essere visualizzato e scaricato dal mio sito Ataualpa for debianers. Di seguito il link per la pagina:
Vai ai file di configurazione su Ataualpa for debianers

Il mio consiglio è di partire con un .muttrc minimale (giusto l'impostazione per le mailbox che illustriamo più avanti in questo capitolo). Poi si aumenterà la personalizzazione in base all'esperienza di utilizzo di Mutt, possibilmente introducendo e testando una novità alla volta (il debugging di un eventuale problema vi sarà più facile).

Oltre alla sintassi di comandi e variabili, .muttrc prevede alcune semplici regole sintattiche ulteriori:

Per inserire del testo a commento
	iniziamo ogni riga di commento con cancelletto (#).

Per scrivere più di un comando su una stessa riga
	separiamo ciascun comando con il punto e virgola (;).

Per spezzare un comando su più righe
	inseriamo un backslash (\) alla fine della riga

Per acquisire l'output di un comando Linux/Unix
	racchiudiamo il comando unix tra backquotes (`comando`).
	I backquotes, per la cronaca, li otteniamo con la simultanea pressione
	dei tasti AltGr ' (AltGr e apice).

Per scrivere un comando che ha nella stringa spazi o caratteri speciali
	dobbiamo racchiudere la stringa tra apici singoli ('stringa con spazi')
	o doppi ("stringa con spazi").
	La differenza tra apici singoli o doppi è che con gli apici singoli
	la stringa non viene interpretata dalla shell.
	Per cui se abbiamo una stringa che contiene spazi o un comando unix 
	(vedi sopra), dovremo usare i doppi apici per racchiuderla.

Per acquisire il valore delle variabili di ambiente
	così come si fa nella shell, premettiamo il simbolo del dollaro ($)
	al nome della variabile.


^top

Approfondimento sul tema mailboxes

Le variabili relative alle mailbox è opportuno settarle prima di iniziare ad utilizzare Mutt. Vediamo come fare con l'aiuto di qualche esempio.

Una mailbox, o casella di posta, non è altro che un file o una directory (a seconda del tipo di mailbox adottata) in cui vengono ricevuti e archiviati i messaggi di posta.
Nel mondo dei sistemi operativi *nix, sono disponibili diversi tipi di mailboxes e Mutt ne supporta quattro: mbox, maildir, MMDF, MH.

Sintetizziamo le caratteristiche dei due formati principali: mbox e maildir.

mbox
Il formato mbox prevede che i messaggi siano tutti inseriti in un file e che ogni messaggio abbia la prima riga che inizia con From mail mittente, per essere identificato dal client che deve visualizzarlo. La mailbox è pertanto costituita da un file.

maildir
Il formato maildir prevede che ogni messaggio venga salvato in un file separato e che la mailbox sia costituita non da un file ma da una directory che contiene tutti i file-messaggi. La particolarità del formato maildir è che ogni mailbox è costituita da tre sottodirectory (tmp, new and cur).

Essendo alternative che si basano su scelte tecniche diverse, fioriscono le discussioni su quale sia il formato di mailbox migliore in termini di performance, carico dell'hardware, sicurezza, ecc....
Io uso il tradizionale mbox. Se vogliamo approfondire prima di scegliere, possiamo cercare in rete uno dei numerosi studi in merito come, ad esempio: Benchmarking mbox versus maildir


Per indicare a Mutt il tipo di mailbox che vogliamo utilizzare dobbiamo settare la variabile mbox_type, così come possiamo vedere dall'esempio del mio .muttrc:

# indica a Mutt il tipo di mailbox utilizzato e da utilizzare
# anche per la creazione di nuove mailbox
# (valori validi: mbox, MMDF, MH, Maildir)

set mbox_type = mbox

Mutt dove deve cercare le nostre mailbox per farci leggere i messaggi?
Di default, Mutt si attende che le mailbox siano contenute nella directory ~/Mail.
In gergo questa directory viene definita maildir.

Se non esiste, prima di avviare Mutt possiamo creare la maildir come sottodirectory della nostra home directory.
Da terminale il comando sarà:

mkdir ~/Mail

Ma se non la creiamo noi, ci penserà Mutt a farlo:
/home/nomeutente/Mail non esiste. Lo creo? ([sì]/no):

Per definire una maildir diversa dal default (~/Mail), possiamo specificare la directory attraverso la variabile folder nel file di configurazione di Mutt (~/.muttrc):

# indica a Mutt il path della directory che contiene le mailbox,
# la cosiddetta maildir.
# (valore di default: ~/Mail)
# Nell'Input Line (ultima riga in basso della schermata di Mutt)
# un '+' o '=' all'inizio di un nome di percorso verra' sostituito
# con questo valore. Lo stesso vale anche per le variabili settate
# nel .muttrc e che contengono una path.
# (ad esempio '+inbox' corrisponderà a ~/Posta/inbox)

set folder = $HOME/Posta

Come esempio pratico di quanto scritto sopra circa le regole sintattiche del file di configurazione, notiamo l'utilizzo della variabile di ambiente $HOME per acquisire il path della nostra home directory.


Come è ovvio, usando la posta elettronica, dobbiamo avere almeno una mailbox: quella dove ci vengono consegnati i messaggi ricevuti e che, nel gergo di Mutt (ma non solo), viene definita mail spool.
Altrettanto ovviamente, potremo creare altre mailbox, con cui organizzare al meglio i nostri messaggi di posta (per argomento, mittente, per status, ecc..).

La mailbox della posta in arrivo la definiamo attraverso la variabile spoolfile:

# mailbox principale (mail spool o spoolfile) dove arrivano le email e
# dove Mutt controlla l'esistenza di nuovi messaggi.
# (se la variabile non è settata Mutt la imposta in base al valore
# della variabile di ambiente $MAIL).
# Deve essere uguale a quanto settato in .procmailrc con $DEFAULT.

set spoolfile = +inbox

I messaggi letti Mutt li sposta automaticamente dal mail spool, archiviandoli in un'altra casella di posta che, di default, è chiamata mbox e creata da Mutt nella nostra home directory.

Per personalizzare nome e posizione della mailbox dei messaggi letti, possiamo utilizzare la variabile mbox.

Un esempio può essere tratto dal mio .muttrc:

# path e nome mailbox in cui Mutt deve salvare i messaggi
# una volta letti.
# I file di mailbox saranno uno per mese, avranno nomi del tipo
# 'read-2001-novembre' e saranno creati da Mutt nella directory
# 'Read' che è una sottodirectory della propria maildir.
# La directory va creata! (Alla creazione delle mailbox ci pensa Mutt)

set mbox = "+Read/read-`date +%Y-%m`"

Un altro esempio dell'utilizzo di una delle regole sintattiche del file di configurazione: gli apici inversi (backquotes) per acquisire l'output del comando date.

Possiamo personalizzare il comportamento di Mutt quando sposta i messaggi letti utilizzando la variabile move.
Con il settaggio di move si fa in modo che Mutt chieda o no se deve spostare i messaggi letti. Un esempio dal mio .muttrc:

# indica a Mutt se chiedere conferma per lo spostamento dalla
# spool-mailbox alle mailbox dei messaggi letti.
# (settate con la variabile mbox e/o i comandi mbox-hook).
# valore di default = ask-no

set move = ask-yes

Come vedremo nel capitolo sulla scrittura dei messaggi, Mutt ci consente di scrivere un messaggio rimandandone la spedizione. Questi messaggi in attesa sono chiamati postposti (postponed in inglese).
I messaggi postposti devono essere archiviati da Mutt in una mailbox.
Di default la mailbox è ~/postponed, creata quindi da Mutt nella nostra home directory (~).

Per personalizzare nome e posizione della mailbox dei messaggi postposti possiamo utilizzare la variabile postponed.

# path e nome mailbox in cui Mutt deve salvare i messaggi scritti ma
# non inviati subito (postposti) (variabile collegata: $postpone)
# La mailbox sarà creata da Mutt nella directory specificata come
# maildir tramite la variabile folder (nel nostro esempio ~/Posta)
# La directory va creata! (Alla creazione delle mailbox ci pensa Mutt)

set postponed = +messaggi-postposti

Quando spediamo un messaggio Mutt, di default, non lo archivia. Potremmo però preferire diversamente: avere una mailbox che accoglie tutti i messaggi spediti, in modo da tenere traccia completa della nostra corrispondenza.
Per definire indirizzo e nome della mailbox in cui archiviare i messaggi spediti possiamo utilizzare la variabile record e poi settare a yes la variabile copy.

Se spediamo spesso mail con allegati, salvarle insieme all'allegato potrebbe risultare in una inutile duplicazione di spazio su disco (visto che quel file da qualche parte lo abbiamo già). Per fare in modo che i messaggi spediti vengano salvati senza l'eventuale allegato, settiamo anche la variabile fcc_attach.

# path e nome mailbox in cui salvare una copia dei messaggi spediti.
# I file avranno nomi del tipo 'sent-2001-novembre' e saranno nella
# directory 'Sent' della propria maildir.
# (variabile correlata: $copy)
# La directory va creata! (Alla creazione delle mailbox ci pensa Mutt)

set record = "+Sent/sent-`date +%Y-%m`"

# se settato a yes Mutt salva una copia dei messaggi in uscita
# (per il dove li salva --> variabile $record)

set copy = yes

# se settato a no Mutt quando salva una copia dei
# messaggi spediti non salva gli eventuali allegati
# (default=yes)

set fcc_attach = no

Se utilizziamo il programma procmail per effettuare la consegna della posta in arrivo (che possiamo scaricare con il programma fetchmail) è probabile che vorremo sfruttare le sue capacità per dirottare i nuovi messaggi su mailbox diverse a seconda di alcuni criteri (argomento, mittente, ecc..).

Per chiedere a Mutt di verificare l'arrivo di nuova posta in altre mailbox, oltre a quella definita come mail spool, possiamo utilizzare il comando mailboxes:

# indica a Mutt le altre directory in cui verificare l'arrivo di nuova
# posta. Usando procmail per lo smistamento dei messaggi in arrivo,
# oltre alla mail spool, vanno inserite le altre mailboxes definite in procmail.
# +/Sent e +/Read con l'uso di date serve per vedere i messaggi inviati e
# letti del mese corrente.

mailboxes +inbox
mailboxes `echo $HOME/Mail/Friends/*`
mailboxes `echo $HOME/Mail/Jobbiz/*`
mailboxes `echo $HOME/Mail/Lists/*`
mailboxes +/Sent/sent-`date +%Y-%m`
mailboxes +/Read/read-`date +%Y-%m`

Anche qui abbiamo utilizzato il comando echo per includere tutte le mailboxes contenute in determinate directory (Friends, Jobbiz, Lists).


All'avvio, lanciando Mutt senza opzioni, così come scritto sopra, ci verrà presentato l'elenco dei messaggi contenuti nella mail spool (in pratica vedremo l'index menu).

Se avremo invece definito, mediante la variabile mailboxes, anche altre mailbox potremo avviare Mutt:

Con l'opzione -y (mutt -y)
	per vedere all'avvio l'elenco di queste mailbox
	(partenza di Mutt con il browser menu).
	
Con l'opzione -Z (mutt -Z)
	per vedere all'avvio la prima mailbox che ha messaggi nuovi
	(tra quelle segnalate con la variabile mailboxes).
	
Con l'opzione -f nome mailbox (mutt -f miamailbox)
	per vedere l'elenco messaggi contenuti nella mailbox specificata.

In ciascuno dei quattro casi, finito di leggere i messaggi in una mailbox, premendo c e approvando con Invio, Mutt aprirà automaticamente la prossima mailbox che ha nuovi messaggi.

Personalmente preferisco sempre partire con mutt -y.
Per evitare di digitare l'opzione ogni volta, possiamo creare il seguente alias nel file .bashrc:

alias mutt='mutt -y'


^top

Conclusione

In questo primo capitolo abbiamo imparato:

  1. Come è strutturato Mutt, con le sue diverse maschere e gli elementi comuni in ciascuna.
  2. I comandi essenziali per avviare Mutt e non perderci appena "entrati".
  3. Come passare da una mailbox all'altra, premendo c.
  4. Il significato degli status flag associati ad ogni messaggio elencato nell'index menu.
  5. Come si personalizza il comportamento di Mutt, attraverso il file .muttrc.
  6. Cosa sono le mailboxes e come scegliere il tipo di mailbox che Mutt deve utilizzare.
  7. Come personalizzare la directory (comunemente definita maildir) che contiene le mailbox.
  8. Come personalizzare posizione e nome delle diverse mailbox per i messaggi in arrivo, quelli letti, quelli scritti ma non spediti (postposti), quelli spediti.
  9. Come far controllare la nuova posta su mailbox ulteriori, oltre a quella standard della posta in arrivo.
  10. Le 4 possibilità di avvio di Mutt.


<< Capitolo Precedente Prossimo Capitolo >>