Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j'ai cité mes sources ; il en manque certainement… :-)

Ceci est une ancienne révision du document !


Msmtp : envoyer un courriel par smtp en ligne de commande

Le fonctionnement du courrier électronique est basé sur l’utilisation d’une boîte à lettres électronique.

Lors de l’envoi d’un email, le message est acheminé de serveur en serveur jusqu’au serveur de messagerie du destinataire.

Le message est envoyé au serveur de courrier électronique chargé du transport (nommé MTA pour Mail Transport Agent), jusqu’au MTA du destinataire.

Sur le web, les MTA communiquent entre-eux grâce au protocole SMTP et sont appelés serveurs SMTP (mais aussi serveur de courrier sortant). Le serveur MTA du destinataire délivre alors le courrier au serveur de courrier électronique entrant (nommé MDA pour Mail Delivery Agent), qui stocke alors le courrier en attendant que l’utilisateur vienne le relever.

La relève du courrier se fait grâce à un logiciel appelé MUA (Mail User Agent). On parle de client de messagerie (par exemple Mozilla Thunderbird, Microsoft Outlook, Eudora Mail, Incredimail, …).

Pré-requis

Installation

  1. Installez les paquets msmtp,msmtp-mta,bsd-mailx ou

    ...@...:~$ sudo apt install msmtp msmtp-mta bsd-mailx

  2. Vérifiez si sendmail est présent sur votre système Linux:

    ...@...:~$ sudo whereis sendmail
    sendmail: /usr/sbin/sendmail /usr/lib/sendmail /usr/share/sendmail /usr/share/man/man8/sendmail.8.gz

  3. Vérifiez que sendmail est lié à sSMTP :

    ...@...:~$ sudo ls -la /usr/sbin/sendmail
    lrwxrwxrwx 1 root root 12 oct.  11  2019 /usr/sbin/sendmail -> ../bin/msmtp

    → Les 2 logiciels sont bien associés.

Configuration

Le paramétrage des options se fait dans le fichier /etc/msmtprc (pour tous les utilisateurs ou ~/.msmtprc (pour un utilisateur)

Commandes du fichier msmtprc

Modèle exemple de fichier :

/etc/msmtprc
# nom du compte (le fichier de configuration accepte plusieurs configurations de serveurs SMTP)
account default
#   serveur SMTP utilisé
host smtp.monfai.fr
#   Adresse de l'expéditeur
from prenom.nom@monfai.fr
#   si pas d'authentification
auth off
#   si authentification
#auth on
#       expéditeur du mail
#user prenom.nom@fai.fr
#       mot de passe en clair dans le fichier de configuration
password **************

Exemple pour gmail

Exemple de fichier de configuration utilisateur ~/.msmtprc

Ce fichier se concentre sur le protocole TLS et l'authentification.

Les fonctionnalités non utilisées ici incluent la journalisation, les délais d'expiration, les proxy SOCKS, les paramètres TLS, les paramètres de notification d'état de livraison (DSN), etc.

~/.msmtprc
# Valeurs par défaut pour tous les comptes suivants.
defaults
 
# Utiliser le port 587 au lieu du port SMTP 25.
port 587
 
# Toujours utiliser TLS.
tls on
 
# Définir une liste d'autorités de certification de confiance pour TLS.
tls_certcheck on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
 
# Service Gmail
###############
account gmail
 
# Serveur SMTP
host smtp.gmail.com
 
# Adresse de l'expéditeur du mail
from ***********@gmail.com
 
# Authentification. Le mot de passe est donné en utilisant l'une des cinq méthodes, voir ci-dessous.
auth on
user ********@gmail.com
 
# Mot de passe, enregistré directement dans ce fichier.
# Assurez-vous que ce fichier ne peut être lu que par vous-même.
password **************
 
# Fichier journal
logfile /var/log/msmtp.log
 
# Compte par défaut
account default : gmail (10)
port 587
Port d’envoi pour votre mail
tls on
Connexion chiffrée
tls_certcheck on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
Emplacement des certificats par défaut de votre OS

Ici, le chemin par défaut pour Debian, donc compatible Ubuntu.

account gmail
Compte que vous utiliserez pour envoyer vos mails.
host smtp.gmail.com
Serveur SMTP utilisé.
from ***********@gmail.com
Indique l’origine du message, le nom de l’expéditeur.
auth on
user ********@gmail.com
active l’authentification utilisateur pour authentifier l’expéditeur du mail.

Absolument nécessaire pour sécuriser l’envoi de mails.

logfile /var/log/msmtp.log
Cette ligne permet de créer un fichier de log spécifique pour msmtp.
account default : gmail
msmtp permet d’utiliser plusieurs comptes smtp. Vous devez en choisir un par défaut.

Exemple avec gmail, pour un utilisateur : Éditez avec les droits d'administration le fichier ~/.msmtprc pour le modifier comme ceci :

~/.msmtprc
# Exemple de fichier de configuration utilisateur ~/.msmtprc
#
# Ce fichier se concentre sur le protocole TLS et l'authentification.
#    Les fonctionnalités non utilisées ici incluent la journalisation,
#    les délais d'expiration, les proxy SOCKS, les paramètres TLS,
#    les paramètres de notification d'état de livraison (DSN), etc.
 
# Définir des valeurs par défaut pour tous les comptes suivants.
defaults
 
# Utilisez le port d'envoi de courrier 587 au lieu du port SMTP 25.
port 587
 
# Toujours utiliser TLS.
tls on
 
# Définir une liste d'autorités de certification de confiance pour TLS.
#   Par défaut, on utilise les paramètres système, mais vous pouvez sélectionner votre propre fichier.
#tls_trust_file /etc/ssl/certs/ca-certificates.crt
#   Si vous sélectionnez votre propre fichier,
#   vous devez également utiliser la commande tls_crl_file pour vérifier les certificats révoqués,
#   mais malheureusement, il n'est pas simple d'obtenir des listes de révocation et de les tenir à jour.
#tls_crl_file ~/.tls-crls
tls_certcheck on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
 
# Un service Gmail
account gmail
 
# Nom d'hôte du serveur SMTP
host smtp.gmail.com
 
# Au lieu de tls_trust_file/tls_crl_file, vous pouvez utiliser tls_fingerprint pour épingler un seul certificat.
#   Vous devez mettre à jour l'empreinte digitale lorsque le certificat du serveur change,
#   mais un attaquant ne peut pas vous tromper pour que vous acceptiez un faux certificat.
#   Obtenez l'empreinte digitale avec
# $ msmtp --serverinfo --tls --tls-certcheck=off --host=smtp.freemail.example
#tls_fingerprint 00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33
 
# Adresse de l'expéditeur du mail
from ***********@gmail.com
 
# Authentification. Le mot de passe est donné en utilisant l'une des cinq méthodes, voir ci-dessous.
auth on
user ********@gmail.com
 
# Mot de passe, méthode 1 :
#   ajoutez le mot de passe au trousseau de clés système et laissez msmtp l'obtenir automatiquement.
#   Pour définir le mot de passe du trousseau de clés à l'aide de libsecret de Gnome :
# $ secret-tool store --label=msmtp \
# host smtp.freemail.example \
# service smtp \
# user joe.smith
 
# Mot de passe, méthode 2 :
#   Stockez le mot de passe dans un fichier chiffré et indiquez à msmtp quelle commande utiliser pour le déchiffrer.
#   Ceci est habituellement utilisé avec GnuPG, comme dans cet exemple.
#   Généralement, gpg-agent demandera une fois le mot de passe de décryptage.
#passwordeval gpg2 --no-tty -q -d ~/.msmtp-password.gpg
 
# Mot de passe, méthode 3 :
#   Enregistrez le mot de passe directement dans ce fichier.
#   En général, ce n'est pas une bonne idée de stocker les mots de passe dans des fichiers texte.
#   Si vous le faites quand même, assurez-vous au moins que ce fichier ne peut être lu que par vous-même.
password **************
 
# Mot de passe, méthode 4 : Enregistrez le mot de passe dans ~/.netrc. Cette méthode n'est probablement plus pertinente.
 
# Mot de passe, méthode 5 : Ne spécifiez pas de mot de passe. Msmtp vous le demandera alors. Cela signifie que vous devez pouvoir taper dans un terminal lorsque msmtp s'exécute.
 
# Fichier journal
logfile /var/log/msmtp.log
 
# Définir un compte par défaut
account default : gmail (10)
port 587
vous permet de spécifier un port d’envoi pour votre mail
tls on
La connexion entre votre ordinateur et le serveur distant est chiffrée, ce qui signifie que si une personne arrive à intercepter les données, elles seront illisibles, car elles nécessitent une sorte de “mot de passe” connu de votre ordinateur et du serveur pour être lues.
tls_certcheck on et tls_trust_file /etc/ssl/certs/ca-certificates.crt
permettent d’indiquer ou sont situés les certificats par défaut de votre OS, ici c’est le chemin par défaut sous Debian, donc compatible Ubuntu.
account gmail
nom du compte que vous utiliserez pour envoyer vos mails. Le fichier de configuration accepte plusieurs configurations de serveurs SMTP.
host smtp.gmail.com
nom du serveur SMTP utilisé.
from ***********@gmail.com
indique l’origine du message, le nom de l’expéditeur.
auth on et user ********@gmail.com
ces 2 paramètres activent l’authentification utilisateur pour authentifier l’expéditeur du mail. Absolument nécessaire pour sécuriser l’envoi de mails.
Vous avez 5 possibilités pour la saisie du mot de passe.
Pour ce tutoriel, j’ai choisi la plus facile mais la moins sécurisée, c’est-à-dire la saisie directe du mot de passe en clair dans le fichier de configuration. Je vous conseillerai plutôt une autre méthode, la 1 où la 2 qui cache le mot de passe.
logfile /var/log/msmtp.log
Cette ligne permet de créer un fichier de log spécifique pour l’application msmtp.
account default : gmail
msmtp permet d’utiliser plusieurs comptes smtp. Vous devez en choisir un par défaut.

Si vous voulez configurer l’envoi de courriels au niveau d’un utilisateur seulement, créez le fichier ~/.msmtprc dans le dossier personnel de l’utilisateur concerné pour y écrire le même contenu.

  1. Ajoutez une section pour chaque FAI désiré en plus :
    • Exemple pour gmail :
      ~/.msmtprc
      # nom du compte
      account gmail
       
      # Valeurs par défaut pour tous les comptes suivants.
      defaults
       
      # serveur SMTP utilisé
      host smtp.gmail.com
       
      # Port d’envoi pour votre mail : 587 au lieu du port SMTP 25.
      port 587
       
      # Toujours utiliser le protocole TLS.
      #    La connexion entre votre ordinateur et le serveur distant est chiffrée,
      #    ce qui signifie que si une personne arrive à intercepter les données, elles seront illisibles,
      #    car elles nécessitent une clé connue de votre ordinateur et du serveur pour être lues.
      tls on
      tls_starttls on
       
      tls_certcheck on
      # emplacement des certificats par défaut de votre OS
      #    ici c’est le chemin par défaut à base de Debian, donc compatible Ubuntu.
      tls_trust_file /etc/ssl/certs/ca-certificates.crt
       
      # Authentification de l'expéditeur du mail
      auth on
      user expediteur
      # mot de passe en clair dans le fichier de configuration
      password **************
       
      passwordeval gpg --no-tty -q -d ~/.msmtp-password.gpg
       
      # Adresse de l'expéditeur
      from prenom.nom@gmail.com
       
      # Fichier journal spécifique pour l’application msmtp
      logfile /var/log/msmtp.log (9)
       
      # Définir un compte par défaut (msmtp permet d’utiliser plusieurs comptes smtp)
      account default : gmail
    • exemple pour smtp.free.fr :
      ~/.msmtprc
      # exemple de compte avec free
      account free
      
      host smtp.free.fr
      
      from prenom.nom@monfai.fr
      
      auth off
      
      user prenom.nom

Configurations particulières

  1. gmail : gmail impose l'utilisation d'une couche TLS :
    ~/.msmtprc
    account default
    tls on
    host smtp.gmail.com
    port 587
    from nom_user@gmail.com
    auth on
    user nom_user
    password password_user
    tls_starttls on
    tls_certcheck on
    tls_trust_file /etc/ssl/certs/ca-certificates.crt

    La dernière ligne est spécifique aux systèmes basés sur debian. Elle pointe vers le fichier où sont stockés l'ensemble des certificats racine de confiance du système

  2. gmail non sécurisé, Il est possible de ne pas vérifier le certificat serveur est désactivant tls_certcheck. Ce n'est pas recommandé car sensible à une attaque de type MiM :
    ~/.msmtprc
    account default
    tls on
    host smtp.gmail.com
    port 587
    from nom_user@gmail.com
    auth on
    user nom_user
    password password_user
    tls_starttls off
    tls_certcheck off
  3. Orange sécurisé, fonctionne avec TLS :
    ~/.msmtprc
    account default
    host smtp.orange.fr
    protocol smtp
    auth login
    tls on
    tls_starttls off
    tls_certcheck on 
    tls_trust_file /etc/ssl/certs/ca-certificates.crt
    from mon-adresse@orange.fr
    maildomain orange.fr
    port 465
    user mon-adresse
    password mon-motdepasse
  4. gandi.net (nom de domaine acheté) :
    account default
    host mail.gandi.net
    from <adresse de l'émetteur>
    tls on
    tls_certcheck off
    tls_starttls off
    auth on
    user <adresse Gandi/nom d'utilisateur utilisé pour se connecter à la boîte aux lettres électronique Gandi>
    password <mot de passe boîte aux lettres électronique>

Utilisation

  1. Test de fonctionnement : Pour valider le bon fonctionnement de votre configuration, essayez d’envoyer un message en ligne de commande :
    • en mode interactif :

      ...@...:~$ mail destinataire@domaine.fr
      Subject: ......
      .... (corps du message)
      a moi
      . (un point suivi de <key>Entrée</key> pour terminer)
      Cc: 

      Suivre les indications en mode intéractif. Pour terminer le mail, tapez un point en début de ligne “.”

    • ou en mode non interactif :

      ...@...:~$ printf "Un message\nde test" | mail -s "sujet de test" destinataire@domaine.fr

  2. envoyer le contenu d'un fichier texte :

    ...@...:~$ cat readme.txt | mail johnny@liday.ch

  3. envoyer un fichier binaire ou compressé en pièce jointe :

    ...@...:~$ uuencode application.zip | mail johnny@liday.ch

  • le sujet du mail est une ligne en tête de message :Subject:DeQuoiOnParle → si on envoie un fichier readme.txt, il n'aura de sujet que s'il commence par Subject:…

Attention: il faut alors un saut de ligne : utilisez printf plutôt que echo. Exemple:

...@...:~$ printf "Subject:De Quoi On Parle\nLeCorpsDuMessage" | mail johnny@liday.ch

Vérifier que les mails sont bien partis en regardant le contenu de la file d'attente :

Désinstallation

Voir aussi