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