03/03/2021

Envoyer un mail en ligne de commande

Sous linux il est possible d’envoyer un mail en ligne de commande avec msmtp.

Installation et configuration de msmtp

Installation

apt install msmtp

Configuration

La configuration se situe dans le fichier /etc/msmtprc

S’il n’existe pas, creez le

Voici un exemple de configuration gérérique

# Valeurs par défaut pour tous les comptes.
defaults
auth           on
tls            on
tls_starttls   on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        /var/log/msmtp.log

# Exemple pour un compte Gmail
account        gmail
auth           plain
host           smtp.gmail.com
port           587
from           username@gmail.com
user           username
password       XXXXXXXXXX


# Exemple pour un compte GMX
account        gmx
host           mail.gmx.com
port           587
from           username@gmx.com
user           username@gmx.com
password       XXXXXXXXXX
tls_nocertcheck

# Exemple pour un compte OVH
account        ovh
host           XXXXXX.ovh.net
port           465
from           username@example.com
user           username@example.com
password       XXXXXXXXXX

# Exemple pour un compte Infomaniak
account        infomaniak
host           mail.infomaniak.com
port           587
from           username@example.com
user           username@example.com
password       XXXXXXXXXX

# Exemple pour un serveur de test MailHog
account        mailhog
auth           off
tls            off
tls_starttls   off
host           localhost
port           1024
from           username@example.com

# Définir le compte par défaut
account default : ovh

Vous mettez toutes les configurations de vos emails. Le compte à utiliser par defaut sera spécifié avec le mot clef account default.

Utilisation

L’utilisation est simple

echo "My message" | msmtp monemail@mail.fr

Il est possible de override les paramètres ecrit dans le fichier de conf. COmme par exemple le bypass du certificat.

echo "My message" | msmtp monemail@mail.fr --tls-certcheck=off

Ensuite pour Ajouter le sujet du mail c’est un mail classique

echo "Subject: Mon sujet de mail" | msmtp monemail@mail.fr --tls-certcheck=off

Exemple

Voici un script qui permet d’alerter par mail d’un nouveau serveur kimsufi

#!/usr/bin/env bash

dispo=$(curl -s "https://www.ovh.com/engine/api/dedicated/server/availabilities?country=fr" | jq '.[] | select(.hardware=="1801sk12" and .datacenters[].availability!="unavailable")') 

if [ ! -z "$dispo" ] ;then 
    echo "Subject: Serveur KS1 disponible" | msmtp mon@mail.fr --tls-certcheck=off
    # log
    echo "[$(date '+%Y-%m-%d %H:%M')] Check S1 : Disponible" >> /var/ovh/ksalert.log
    exit 1
else 
    echo "Serveur Indispo"
    #log
    echo "[$(date '+%Y-%m-%d %H:%M')] Check S1 : Indisponible" >> /var/ovh/ksalert.log
    exit 0
fi

Qu’on lance à intervale régulier (ici toutes les heures) :

0 * * * * bash /root/ovh_ks2