mail command

Inviare e-mail da linea di comando con Ubuntu Linux

mail commandInviare mail da linea di comando con Ubuntu è molto comodo per tanti motivi, ad esempio schedulare script che eseguano determinate operazione e inviino l'output per e-mail (scansione antivirus, stato occupazione del disco, ...).

Per farlo si usa il comando mail che però necessità di un MTA (Mail Transport Agent) per funzionare, ovvero di un servizio che si preoccupa ti recapitare la mail al server di posta del destinatario (una specie di postino 🙂 )
Su GNU/Linux ci sono vari MTA open source: sendmail, exim, qmail, postifix, …

Nel mio caso utilizzo postfix.
E' possibile installare Postfix per inviare mail usando il vostro account GMail oppure facendo il relay verso il server SMTP del vostro provider.
In quest'ultimo si installa con il seguente comando:

sudo apt-get install postfix

In fase di installazione richiede le seguenti informazioni per la configurazione:

  • appare una schermata esplicativa delle possibili modalità di funzionamento del servizio che non sto a spiegare: rispondere OK
  • modalità: scegliere Sistema satellite ovvero il servizio si preoccuperà di inoltrare la posta (relay) ad un altro server SMTP
  • nome host: è il nome attribuito al server che stiamo creando. E' meglio che sia un FQDN (Fully Qualified Domain Name) quindi consiglio di indicare il nome del proprio PC con l'aggiunta del dominio del provider che ci fornisce il servizio. Esempio: nel mio caso il servizio lo fornisce Alice quindi indico miopc.alice.it
  • host da usare come relay SMTP: indicare il nome del server SMTP a cui inoltrare la mail per essere recapitata. Meglio indicare quello del provider che ci da la connessione ad internet. Nel mio caso avendo “Alice” il server è out.alice.it

a questo punto l'installazione terminerà con l'avvio automatico del servizio.

Ora per usare il comando mail bisogna installare il pacchetto heilroom-mailx con il comando:

sudo apt-get install heirloom-mailx

A questo punto è possibile inviare un e-mail con il seguente comando:

echo "testo della mail" | mail -s "Soggetto Mail" -r    …

Esempio:

echo "testo della mail" | mail -s "Soggetto Mail" -r miamail@alice.it dest@gmail.com

NB: l'e-mail mittente conviene che sia il vostro indirizzo mail legato al server indicato come “host da usare come relay SMTP” durante la configurazione di postfix, altrimenti rischiate che il server di posta del destinatario classifichi la vostra mail come SPAM.

IMPORTANTE: nell'esempio sopra indicato ho utilizzato il comando echo per inserire il testo della mail ma si potrebbero usare anche altri comandi facendo in modo che l'output di questi diventi il testo della mail.

Ad esempio se do il comando

df | mail -s "Soggetto Mail" -r miamail@alice.it destinatario1@gmail.com

avrò come testo della mail l'output del comando df, ovvero lo stato dell'occupazione su disco.

Un altro modo per passare il testo della mail è inserirlo in un file ed utilizzare il comando cat:

cat /percorso-file/testomail.txt | mail -s"Oggetto mail" -r miamail@alice.it dest1@gmail.com

questo può essere molto utile ad esempio quando si vuole ricevere periodicamente il file di log di un certo servizio, oppure avere un testo variabile a seconda delle esigenze.

E' possibile anche inviare un allegato da linea di comando semplicemente utilizzando l'opzione -a. Esempio:

echo "eccoti l'allegato" | mail -s "Prova invio allegato" -a /tmp/allegato.tar.gz -r miamail@alice.it destinatario1@gmail.com
(Letto 29.146 volte di cui 3 negli ultimi 30gg)
twitterlinkedinmailby feather

18 thoughts on “Inviare e-mail da linea di comando con Ubuntu Linux

  1. Wonderful blog! I definitely love how it’s easy on my eyes and also the data are well written. I am wondering how I might be notified whenever a new post has been made. I have subscribed to your rss feed which need to do the trick! Have a nice day!

    Thanxx

  2. Ciao ottima guida non mi è chiara una cosa, i paramatri di autenticazione per il server di relay dove vanno impostati?
    Mi spiego meglio: voglio mandare email utilizzando come server relay gmail, quindi come opzione mittente usero il mio account gmail…i parametri relativi a utente (che poi coincide con email) e password dove vanno settati?

    1. grazie per il commento.

      Nel mio esempio come server di relay utilizzo quello del mio ISP (nel mio caso Alice quindi out.alice.it). In questo modo non ho bisogno di autenticarmi perchè dal momento che sono connesso faccio parte della rete di Alice e quindi sono già autenticato.

      E’ possibile usare gmail come relay host ma non è sufficiente autenticarti con username e password. Gmail richiede l’autenticazione con SASL e la criptazione della comunicazione con TLS. Oltre a username e password va anche creato un certificato SSL per autenticarti, altrimenti Gmail non accetta il relay. Magari quando ho un attimo descriverò il tutto in un nuovo articolo.

  3. Ciao,
    io ho un problema con gli allegati.
    Se inoltro una mail con testo ok.
    Se inoltro una mail con allegato ok.
    Se provo a mandarne una con testo e allegato mi arriva solo l’allegato senza il testo.
    ho provato diversi comandi anche quello scritto da te come esempio ma non funziona (nel tuo caso non esiste l’opzione -a)

    attualmente ho messo all’interno di un ciclo il seguente comando
    ( cat ${MAIL_BODY} | uuencode ${MAIL_ATTACH} ${MAIL_ATTACH_NAME} ) | mailx -s “${MAIL_SUBJECT}” ${ADDRS}

    che però mi da il problema che ti ho segnalato.
    mi puoi essere di aiuto??

    1. “-a” fa parte delle opzioni del comando mail o mailx. Lo dovresti notare anche dall’help del comando (man mail).

      Non vorrei che l’errore sia dovuto al fatto che ha fatto un copia/incolla della mia istruzione. In quel caso di da errore perchè le virgolette (“) con cui racchiudo il testo sono formattate male.
      Prova a scriverlo manualmente e dovrebbe funzionare.

      Spero di esserti stato d’aiuto

      ciao

  4. Giusto per essere di aiuto, se siete dietro router adsl è necessario fare un port-mapping sulla porta 25 e indirizzo ip del pc sul quale è installato postfix.

    1. Gli aiuti sono sempre graditi ma non ho capito perchè hai dovuto fare il port-mapping della porta visto lo scopo dell’articolo.
      O meglio serve se hai bisogno di utilizzare il servizio dall’esterno e quindi usi il pc come un server SMTP a tutti gli effetti. Giusto?

      Se invece lo usi solo all’interno inviare e-mail di controllo o di monitoring del sistema non ne hai bisogno.

      Ad ogni modo grazie per il contributo. E’ un utilizzo a cui non avevo pensato 🙂

  5. Ciao, una domanda semplice semplice…. come faccio a conoscere il nome del mio computer che serve nel punto 3 della configurazione? Grazie

      1. Ok, grazie. MA ho un altro problema:
        quando faccio il comando apt-get per installare postfix ottengo il seguente errore:
        —————————————————————–
        Err http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main postfix amd64 2.11.0-1ubuntu1
        Could not resolve ‘us.archive.ubuntu.com’
        E: Failed to fetch http://us.archive.ubuntu.com/ubuntu/pool/main/p/postfix/postfix_2.11.0-1ubuntu1_amd64.deb Could not resolve ‘us.archive.ubuntu.com’
        E: Unable to fetch some archives, maybe run apt-get update or try with –fix-missing?
        —————————————————————-
        p.s.: La mia versione di ubuntu è 14.04 LTS

        Grazie

  6. Ciao, ho un problema: quando provo a installare postfix con apt-get ricevo questo errore:

    Err http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main postfix amd64 2.11.0-1ubuntu1
    Could not resolve ‘us.archive.ubuntu.com’
    E: Failed to fetch http://us.archive.ubuntu.com/ubuntu/pool/main/p/postfix/postfix_2.11.0-1ubuntu1_amd64.deb Could not resolve ‘us.archive.ubuntu.com’

    E: Unable to fetch some archives, maybe run apt-get update or try with –fix-missing?

    Grazie,
    Francesco

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *