# YBlog - Mail en ligne de commande avec un fichier join
Keywords: email, shell, web

Anglais ↓ Menu ↓

# 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 :

    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<STD,0H*9F]R(&QI;F4@:6X@)"@\("1X M;',@*0H@("`@9&-R 20H96-H;R`D;&EN92!\(&%W:R`M1EP[("="[<')I;G0@" ... M93U<(FUO="-<(CX\=F%L=64^/&ET96T@;F%M93U<(F-T>%]M8UPB/BD\=F%L
    M=64O/B@\+VET96T^*2-<)#$\=F%L=64^)&ME>7=O<F1S/" ]V86QU93Y<)#(C end < pre>

    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 <http: www.etresoft.com>.
    ---
    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.

RSS · Tweet · FB
Ces liens sociaux préservent votre vie privée
↑ Top ↑
Published on 2010-08-31
Follow @yogsototh
Yann Esposito©
Done with Vim spacemacs & nanoc Hakyll

ADA: `DdzFFzCqrhtAvdkmATx5Fm8NPJViDy85ZBw13p4XcNzVzvQg8e3vWLXq23JQWFxPEXK6Kvhaxxe7oJt4VMYHxpA2vtCFiP8fziohN6Yp`