----- isHidden: false menupriority: 1 kind: article created_at: 2010-08-31T10:16:04+02:00 title: Envoyer un mail en ligne de commande avec un fichier attaché author_name: Yann Esposito author_uri: yannesposito.com tags: - email - shell - web ----- 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 : uuencode fic.jpg fic.jpg | mail -s 'Subject' 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
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.