Inviare mail con testo ed allegato da shell Linux

I tempi sono cambiati!

Questo articolo è stato pubblicato più di 7 anni fa quindi alcuni contenuti o informazioni presenti in esso potrebbero non essere più validi. Questo sito non è responsabile per eventuali errori causati da questo problema.

Vi è mai capitato di creare uno script che, fra tutto quel che deve fare, deve anche inviare una mail con allegato?

Ecco, a me è capitato, e dovendolo fare forzatamente tramite i comandi “mail” ed “uuencode” si è posto il problema su come concatenare i due comandi, visto che nell’utilizzo abituale è possibile procedere con

echo Questa è una prova | mail -s "oggetto" destinatario-1 destinatario-2

oppure con

mail -s "oggetto" destinatario-1 destinatario-2 < percorso_messaggio

dove per “percorso_messaggio” si intende il path assoluto del file di testo contenente il messaggio da inviare.

Se poi c’è la necessità di inviare una mail contenente un allegato, è possibile procedere in questo modo

uuencode percorso_file nome_file | mail -s "oggetto" destinatario-1 destinatario-2

dove “percorso_file” indica il path assoluto del file da allegare e “nome_file” il nome dell’allegato che apparirà al destinatario.

Se provando ad inviare appare il messaggio “uuencode: command not found” o simili, è necessario installare il pacchetto sharutils, quindi procediamo lanciando i seguenti comandi:

Per RedHat/CentOS

yum update; yum install sharutils

Per Debian/Ubuntu

apt-get update; apt-get install sharutils

Ora mettiamo che la nostra necessità sia quella di inviare via mail un messaggio di testo con allegato, la soluzione sembra semplice ed ovvia, ovvero

uuencode percorso_file nome_file | mail -s "oggetto" destinatario-1 destinatario-2 < percorso_messaggio

e invece NO, il sopra menzionato comando NON risulta funzionante e la spiegazione sta nel fatto che il comando “uuencode” lavora sullo standard input, come la redirezione che effettuiamo alla fine del comando per inserire il messaggio di testo nel corpo della mail.

Il comando corretto per integrare l’invio mail con testo ed allegato in uno script è il seguente:

(cat percorso_messaggio; uuencode percorso_file nome_file) | mail -s "oggetto" destinatario-1 destinatario-2

con quest’ultimo comando viene eseguita una subshell, quindi vengono eseguiti i due comandi presenti all’interno delle parentesi tonde e successivamente vengono passati in modo corretto al comando “mail“.

Lascia un commento

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