Mailx et fichiers joints en une ligne
En attendant de terminer d'écrire deux articles conséquents, je poste une petite astuce sur les envois de mails en ligne de commande.
Mailx c'est sympa mais un peu limité quand on veut envoyer des mails et sur certains systèmes on n'a pas forcément d'autres commandes plus évoluées alors on bidouille on bidouille mais c'est ça aussi le Logiciel Libre (D'ailleurs Clochix en parle comme pas deux).
Comme je trouve la ligne de commande merveilleuse, tout est ici écrit en One-Line.
Le premier besoin avec mailx c'est souvent de poster du texte en une ligne. Ça c'est simple et tout le monde connait :
echo "Voilà mon corps" | mailx -s "sujet de mon mail" "destinataire@domaine.tld"
Le second besoin est celui d'envoyer un fichier avec le mail. Pour cela, il sera obligatoire de le passer en base64. L'outil uuencode disponible sur toute bonne machine fera ça à merveille (et les puristes me tomberont dessus en me disant que c'est pas vraiment du base64 mais le sujet n'est pas là) :
uuencode monfichier.tar.gz fichier.tar.gz | mailx -s "sujet de mon mail" "destinataire@domaine.tld"
J'ai rajouté "fichier.tar.gz" parce que uuencode prend deux arguments : le premier étant le chemin vers fichier et le second étant le nom que prendra le fichier dans le mail.
Le troisième besoin est d'envoyer à la fois un fichier et de mettre un corps de message et c'est on ne peut plus simple :
( echo "Je t'envoi une vidéo distrayante. Zeus." ; uuencode fichier_hampe.ogv hampe.ogv ) | mailx -s "Pour Ganymède" "gany@olympe.el"
Ici les parenthèses me permettent de concaténer les deux flux de sortie STDOUT de chaque commande l'une après l'autre et de les faire entrer en même temps dans le tube (pipe) et donc dans le flux d'entrée STDIN de mailx. C'est beau non ?
Le dernier besoin est d'envoyer plusieurs fichiers. C'est la même chose mais avec une petite variante, il faut mettre des echo entre chaque fichier. En effet, sinon les MTA ne sauront pas les séparer s'il n'y a pas un
entre chacun dans le contenu du mail. Dans la commande précédente le sujet est forcément terminé par un
et donc la question ne se posait pas.
( uuencode imagepomme.svg pomme.svg ; echo ; uuencode imagebanane.svg banane.svg ) | mailx -s "salade de fruits" "destinataire@domaine.tld"
Etc
Article sous CC-by excepté le logo issu de Wikipedia dont l'auteur est "Thadius856".