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“.