Post

Envoi de message en ligne de commande en utilisant msmtp

Envoi de message en ligne de commande en utilisant msmtp

Il peut être utile de recevoir des rapports par email pour s’assurer que les mises à jour sont correctement appliquées et pour savoir quand un serveur a été redémarré afin d’appliquer les dernières mises à jour. Pour cela, nous devons configurer au moins un client SMTP. Dans cet article, je montrerai comment configurer msmtp.

Msmtp

Les principaux points forts de ‘msmtp’ sont les suivants :

  • L’envoi d’emails via MUA, typiquement Emacs ou Mutt. Assurez-vous simplement d’indiquer au MUA sur votre machine de ne pas appeler /usr/sbin/sendmail, mais d’appeler le msmtp.
  • Redirection des courriels vers un SMTP (le serveur facilite l’envoi)
  • Profils - vous pouvez configurer ‘msmtp’ avec différents SMTP et configurations, ce qui le rend idéal pour les clients mobiles.
  • Pipelining de commandes
  • Prise en charge du proxy SOCKS et des IDN (noms de domaine internationalisés)

Installation

Installer le paquet msmtp et définir des permissions restrictives sur le fichier /etc/msmtprc :

1
2
3
4
sudo apt update
sudo apt install msmtp
touch $HOME/.msmtprc
chmod 600 $HOME/.msmtprc

Configuration

Éditer le fichier $HOME/.msmtprc et l’adapter à son serveur de mails

1
2
3
4
5
6
7
8
9
10
11
12
13
account default
host mx1.exemple.net
port 587
from user@domain.xyz  # client du serveur mx1.exemple.net
user user@domain.xyz  # Identique précédent sinon problème
password mot_passe_user
auto_from off
add_missing_from_header on
auth on
logfile ~/.msmtp.log
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

Définir msmtp comme le programme par défaut pour sendmail :

1
sudo ln -fs /usr/bin/msmtp /usr/sbin/sendmail

Pour pouvoir utiliser la commande mail, nous devons installer mailx

1
sudo apt install bsd-mailx

Configurer l’agent de transport du courrier pour qu’il utilise msmtp

1
sudo nano /etc/mail.rc

ajouter ce qui suit en fin de fichier

1
set mta=/usr/bin/msmtp

Shell

Envoi en ligne de commande

1
echo "Test d’envoi de message" | mail -s "Depuis serveur $HOSTNAME" desti@destinataire.xyz

PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$lien = 'https://site.mondomain.tld/phplogin/activate.php?email=' . "test@domain.tld" . '&code=' . '4567';
$message = '<p>Please click the following link to activate your account: <a href="' . $lien . '">' . $lien . '</a></p>';

$from    = 'postmaster@mondomain.tld';
$noreply = 'noreply@mondomain.tld';
$subject = 'Account Activation Required';
$headers = 'From: ' . $from . "\r\n" . 'Reply-To: ' . $noreply . "\r\n" . 'X-Mailer: PHP/' . phpversion() . "\r\n" . 'MIME-Version: 1.0' . "\r\n" . 'Content-Type: text/html; charset=UTF-8' . "\r\n";

// Chemin vers fichier texte
$file ="/tmp/message.txt";
// Ouverture en mode écriture
$fileopen=(fopen("$file",'w'));
// Ecriture dans le fichier texte
fwrite($fileopen,"To: yack@cinay.eu"."\n");
//fwrite($fileopen,"From: postmaster@mondomain.tld"."\n");
fwrite($fileopen,$headers);
fwrite($fileopen,"Subject: ".$subject."\n"."\n"."\n");
fwrite($fileopen,$message."\n");
// On ferme le fichier proprement
fclose($fileopen);
// Exécuter bash
exec('/usr/bin/msmtp -t < /tmp/message.txt');
?>

Cet article est sous licence CC BY 4.0 par l'auteur.