Linux: comando mail, installazione e utilizzo

il client mail minimalista

Immancabile gadget nella toolbox di ogni sysadmin, mail è uno spartano client di posta tanto minimale quanto versatile.
Le due modalità di utilizzo, interattiva e “a linea di comando”, ne fanno uno strumento adatto a diversi utilizzi.
In questa breve guida vediamo come installarlo sui sistemi CentOS/Ubuntu e alcuni esempi di utilizzo.

Installazione su CentOS/RedHat:

# yum install mailx

Installazione su Ubuntu/Debian:

$ sudo apt-get install mailutils

Come funziona

Il comando mail utilizza il Mail Transfer Agent (MTA) locale per consegnare la posta. Generalmente si tratta di un servizio SMTP come ad esempio Postfix, al quale si interfaccia con il comando di sistema sendmail:

mail_chart

La lettura della posta in arrivo invece avviene direttamente dal file dello spool mail relativo all’utente, generalmente “/var/spool/mail/<nomeutene>”

Mail viene spesso utilizzato negli script per inviare informazioni (ad es.. il risultato di una elaborazione) agli utenti locali. Se l’MTA locale è configurato per fare il relay verso l’esterno, è possibile inviare messaggi a qualunque indirizzo di posta elettronica.

Invia email

Invio in modalità interattiva:

Digitiamo il comando mail aggiungendo come unico argomento l’indirizzo del destinatario, si attiverà così una sessione interattiva di composizione del messaggio: ci verrà chiesto di inserire l’oggetto, successivamente possiamo inserire il testo. Per inviare il messaggio basterà premere una sola volta la combinazione di tasti Ctrl+D, se invece vogliamo annullare, occorrerà premere 2 volte Ctrl+C

[mittente@mail ~]$ 
mail destinatario@mail.lan 
Subject: Buone nuove 
Caro Destinatario, 
spero che questa mia ti trovi sereno e in buona salute. 
La mancanza di eventi rilevanti di cui riferire mi ha impedito fin'ora di darti mie notizie. 
Questo lungo periodo di noia è stato infatti bruscamente interrotto da un accadimento tanto inaspettato quanto piacevole. 
Sarai lieto di sapere che è stata pubblicata su lineadicomando.it una guida all'utilizzo del comando mail, diffuso su tutti i sistemi GNU/Linux. 
A presto, 
Mittente 
EOT 
[mittente@mail ~]

Il comando mail riceve diversi parametri utili ad, esempio,  per specificare il soggetto “-s”, per allegare un file “-a”, per inserire uno o più indirizzi (separati da una virgola) in copia “-c” o in copia nascosta “-b”.  L’esempio precedente potrebbe diventare:

[mittente@mail ~]$ mail -s "Buone nuove" -a ./allegato.txt -b mittente@mail.lan destinatario@mail.lan 
[...]

Invio da linea di comando

Mail è in grado di ricevere il testo del messaggio da spedire dallo Standard Input, può essere quindi utilizzato sia in modo “occasionale”, sia all’interno di script. In questo esempio vediamo un semplice script che invia un report sullo spezio libero dei dischi:

#!/bin/sh 
MAILTO="destinatario@mail.lan" 
MAILCC="mittente@mail.lan" 
SUBJECT="Disk Free Report" 
df -h | grep "^/dev/" | mail -s "$SUBJECT" -c "$MAILCC" $MAILTO

Leggere le email

Eseguiamo il comando mail senza dare alcun parametro, se abbiamo ricevuto posta entreremo nella modalità interattiva, come prina cosa ci verrà presentata la lista dei messaggi ricevuti:

[destinatario@mail ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/destinatario": 2 messages 2 unread
>U 1 mittente@mail.lan     Tue Nov 15 14:31  22/1016  "Buone nuove"
 N 2 mittente@mail.lan     Tue Nov 15 15:00  21/694   "Disk Free Report"
&

Il simbolo “&” indica che mail è pronto a ricevere istruzioni. I messaggi contrassegnati dalla “U” sono quelli non ancora letti, quelli contrassegnati da “N” sono i messaggi nuovi, mentre il il carattere “>” iniziale indica il messaggio corrente. Premiamo invio per iniziare a leggere il primo messaggio:

&
Message  1:
From mittente@mail.lan  Tue Nov 15 14:31:34 2016
Return-Path: <mittente@mail.lan>
X-Original-To: destinatario@mail.lan
Delivered-To: destinatario@mail.lan
Date: Tue, 15 Nov 2016 14:31:34 +0100
To: destinatario@mail.lan
Subject: Buone nuove
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=iso-8859-1
From: mittente@mail.lan
Status: RO

Caro Destinatario,
spero che questa mia ti trovi sereno e in buona salute. La mancanza di eventi rilevanti di cui riferire mi ha impedito fin'ora di darti mie notizie. Questo lungo periodo di noia è stato infatti bruscamente interrotto da un accadimento tanto inaspettato quanto piacevole. Sarai lieto di sapere che è stata pubblicata su lineadicomando.it una guida all'utilizzo del comando mail, diffuso su tutti i sistemi GNU/Linux.
A presto,
Mittente 

&

Utilizziamo l’istruzione abbreviata “h” (“headers” estesa, senza virgolette), per ottenere la lista delle email ricevute:

& 
h > 1 mittente@mail.lan Tue Nov 15 14:31 22/1016 "Buone nuove"
U 2 mittente@mail.lan Tue Nov 15 15:00 21/694 "Disk Free Report"

E’ possibile saltare al prossimo messaggio da leggere utilizzando il comando abbreviato “n” (o esteso “next”), se invece vogliamo leggere un messaggio specifico basta digitare il numero corrispondente e premere invio:

& 2
Message  2:
From mittente@mail.lan  Tue Nov 15 15:00:55 2016
Return-Path: <mittente@mail.lan>
X-Original-To: destinatario@mail.lan
Delivered-To: destinatario@mail.lan
Date: Tue, 15 Nov 2016 15:00:55 +0100
To: destinatario@mail.lan
Subject: Disk Free Report
Cc: mittente@mail.lan
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: mittente@mail.lan
Status: RO

/dev/mapper/centos-root  6,7G  1,2G    5,6G  17% /
/dev/sda1                497M  163M    335M  33% /boot

Per eliminare un messaggio utilizziamo il comando abbreviato “d” (esteso “delete”):

& h  
    1 mittente@mail.lan     Tue Nov 15 14:31  22/1016  "Buone nuove"
>   2 mittente@mail.lan     Tue Nov 15 15:00  21/694   "Disk Free Report"
& d 1
& h
>  2 mittente@mail.lan     Tue Nov 15 15:00  21/694   "Disk Free Report"
& 

Help!

Per avere un elenco completo dei comandi disponibili utilizziamo l’istruzione “?”:

& ?
                  mail commands
type              type messages
next              goto and type next message
from              give head lines of messages
headers           print out active message headers
delete            delete messages
undelete          undelete messages
save  folder      append messages to folder and mark as saved
copy  folder      append messages to folder without marking them
write  file       append message texts to file, save attachments
preserve          keep incoming messages in mailbox even if saved
Reply             reply to message senders
reply             reply to message senders and all recipients
mail addresses    mail to specific recipients
file folder       change to another folder
quit              quit and apply changes to folder
xit               quit and discard changes made to folder
!                 shell escape
cd                chdir to directory or home if none given
list              list names of all available commands

A  consists of integers, ranges of same, or other criteria
separated by spaces.  If omitted, mail uses the last message typed.
&