Mail en ligne de commande avec un fichier join

J’ai dû envoyer un mail en ligne de commande récemment. Quelle ne fût pas ma surprise lorsque je constatais que ce n’était vraiment pas évident. Je n’avais ni pine ni mutt. Seulement mail et mailx.

Ce qu’on trouve sur internet pour envoyer un mail avec fichier attaché c’est ça :

Bon, alors, bête et discipliné j’ai essayé. Et bien, ça marche presque tout le temps. Pour mon fichier ça n’a pas marché du tout. Je l’ai compressé au format .gz, .bz2 et .zip. Avec le format .bz2 le mail reçu avait bien un fichier attaché. Mais avec les formats .gz et .zip, ça ne fonctionnait pas. Au lieu d’avoir un fichier attaché j’avais un message qui contenait quelque chose comme :

begin 664 fic.jpg
M(R$O=7-R+V)I;B]E;G8@>G-H"GAL

Pas très lisible. 
Après pas mal de recherche j" ai trouvé la solution. Le problème c'est `uuencode` qui est une méthode qui devrait devenir obsolète pour envoyer les fichiers. Il vaut mieux utiliser le format MIME pour envoyer des fichiers attachés. Donc finalement le mieux est de faire ça "à la main" avec `sendmail`. Je n'ai quand même pas utilisé `telnet`. La commande à lancer est : ~~~~~~ {.zsh} sendmail -t -oi < mailcontent.txt ~~~~~~ Bien entendu il faut créer le fichier `mailcontent.txt` qui contient : 
From: from@mail.com
To: to@mail.com
Subject: View the attached file
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="-"

This is a MIME encoded message. Decode it with "Decoder"
or any other MIME reading software. Decoder is available
at .
---
Content-Type: image/jpeg; name="fic.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="fic.jpg"

H4sICB6Ke0wAA2Rjcl93aXRob3V0X2tleXdvcmQuY3N2ANSdW5ubOJPH7/e7
7Brw+dmrTk8yk7yTSTaZeWd2b/TIIGy6MRAE7ng+/VaJgwF3g522SsxN2+3T
/4eOJamqmARP+yibvI8ykUYim+x5EE2euBfIyd3byZ+fvvzr7svbu8ndTx/f
...

Et pour avoir le code il suffit de lancer la commande :

uuencode -m fic.jpg fic.jpg ~~~~~~

Et voilà. Parfois la technique c’est tellement simple. Si j’en ai besoin encore quelques fois, je pense que j’écrirai un émetteur de mail en shell.