Table des matières
Envoyer des mails avec pièce jointe en 1 ligne de commande (mutt + msmtp)
La problématique : je souhaite pouvoir récupérer un fichier depuis mon serveur sous debian, malgré une connexion bridée (firewall et tout ça).
La solution : le mail (via gmail) et la pièce jointe
Les outils : bash, msmtp et mutt
Installation
Rapidement, on sait faire maintenant :
aptitude install msmtp mutt
Configuration
msmtp
C'est tout simple, il suffit de se créer un fichier .msmtprc
dans son home ~/
, dedans on met ceci :
account default tls on host smtp.gmail.com port 587 from mon_user@gmail.com auth on user mon_user password mon_mot_de_passe tls_starttls on tls_certcheck on tls_trust_file /etc/ssl/certs/ca-certificates.crt
Cette config est valable pour gmail qui demande des authentifications sécurisées (tout ce qui est relatif à tls dans cette config)
et valable pour debian, l'emplacement des certificats de confiance pouvant être différent sur une autre distribution
mutt
Il faut maintenant dire à mutt d'utiliser msmtp, c'est facile, il faut créer un fichier .muttrc
dans son home ~/
, avec la config suivante :
set sendmail="/usr/bin/msmtp" set use_from=yes set realname="Votre_vrai_nom_ou_pas" set from=nom_user@gmail.com set envelope_from=yes
On devrait pouvoir trouver des explications cohérentes pour expliquer cette config (voir du coté de la documentation de msmtp), je me contente d'avoir une config qui marche
La ligne de commande magique
la voilà :
echo "corps du message" | mutt -s "sujet" -a fichier_à_envoyer -- adresse@destinai.re
Aller plus loin
Vu qu'il s'agit de m'envoyer des mails à moi, et uniquement cet usage, on peut raccourcir cette ligne à 2 mots en utilisant un script perso et un alias
le script perso
on se crée un petit fichier .sendme
dans son home ~/
, et on ecrit les lignes suivantes :
#!/bin/bash CHEMIN=`pwd` FICHIER=$1 echo "fichier envoyé par un script utilisant mutt et msmtp depuis mon serveur" | \ mutt -s " Fichier : $CHEMIN/$FICHIER" -a "$CHEMIN/$FICHIER" -- mon@adresse.mail # avec ou sans le / mais mettre le tout sur une ligne
l'alias
on édite (ou on crée s'il n'existe pas) son fichier ~/.bashrc
, et on rajoute l'alias qui va bien :
alias sendme="bash /home/user/.sendme"
utilisation
Désormais, où que vous soyez dans votre système de fichiers, tant que vous êtes logué en console, vous pouvez vous écrire un mail avec une pièce jointe, histoire de récupérer tel fichier de config, telle photo ou tel morceau de musique :
sendme fichier
encore plus loin ?
On peut imaginer que vous ayez un copain vachement doué en sysadmin, votre mentor et que vous souhaitez lui faire parvenir vos fichiers de config qui ne marchent pas pour qu'il dévermine tout cela, on peut imaginer créer un dossier ~/.sendme
avec plusieurs scripts sendme
pour se l'envoyer à soi-meme, mais aussi sendJoe
ou autre.. ne pas oublier de rajouter des alias dans .bashrc