Relais d’e-mails sortants pour équipement connecté

Cet article est issu d’un échange avec l’IA ChatGPT. Même si les informations qui m’ont été fournies ont permis d’aboutir au résultat attendu, cela a nécessité quelques remises en question de l’IA qui s’égarait parfois dans ses explications. En partant de ce constat, je considère que d’autres personnes qui n’ont pas les quelques bases techniques nécessaires pour guider et recadrer la « machine » risquent de ne pas aboutir directement au même résultat et d’abandonner ce projet qui est finalement assez simple à mettre en œuvre.

Cas concrets

L’utilisation d’un relais d’e-mails est nécessaire dans les cas suivants :
– Les mails générés par un équipement du commerce sont mal formés et rejetés par les serveurs ;
– L’équipement est incapable de s’authentifier correctement via TLS ;
– Pour des raisons de sécurité, l’équipement local n’a pas accès à Internet.

Solution

Comme souvent, la solution la plus simple est l’utilisation d’une carte type Raspberry Pi, agissant en tant que relais d’e-mail. La procédure fournie ci-dessous est fonctionnelle sur cette version du système d’exploitation Raspberry OS : Linux raspberrypi 6.12.47+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.47-1+rpt1 (2025-09-16) aarch64 GNU/Linux

Mise en œuvre

L’éditeur de texte utilisé dans certaines étapes décrites ci-dessous est nano. C’est un éditeur assez basique mais plus facile d’utilisation que vi selon moi. Les commandes à connaître sont assez limitées :

  • Ctrl+x pour quitter l’éditeur après avoir effectué des modifications, suivi au choix de :
    • y pour valider l’enregistrement des modifications dans le fichier en cours d’édition ;
    • n pour quitter sans enregistrer les modifications (en cas d’erreur de saisie ayant corrompue le contenu du fichier par exemple).

Prérequis

Si comme moi, vous avez des tâches périodiques définie dans crontab, vous devez absolument vous assurer au préalable qu’elles ne vont pas générer d’envoi d’e-mail à chaque exécution, car le système va automatiquement utiliser le serveur d’e-mails sortants que vous allez installer, pour émettre par e-mail l’intégralité des événements générés par ces tâches périodiques. Ceci peut être bloquant lors de la mise au point du paramétage du serveur d’e-mails sortants car lors d’erreurs d’accès répétées, vous risquez de vous voir refuser l’accès au serveur d’e-mail distant.

Une solution rapide et très probablement sale : Envoyer stdout et stderr dans /dev/null en ajoutant > /dev/null 2>&1 à la fin de chaque ligne de commande exécutée dans crontab.

Édition de crontab :

Exemple de paramétrage après application de la modification :


# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use ‘*’ in these fields (for ‘any’).
#
# Notice that tasks will be started based on the cron’s system
# daemon’s notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
*/2 * * * * /usr/bin/python3 /home/pi/conquerirlemonde.py > /dev/null 2>&1

Enregistrez les modifications et quittez l’édition du fichier, puis rechargez la liste des tâches à exécuter :

Installation et paramétrage du serveur d’e-mails sortants

Saisir les commandes système fournies ci-dessous :


sudo apt update
sudo apt upgrade


sudo apt install postfix mailutils libsasl2-modules -y

Une interface de configuration de postfix s’affiche à l’écran durant l’installation des logiciels :

Sélectionner No configuration et validez avec Ok. Nous modifierons directement le fichier avec l’éditeur nano à la fin de l’instalation.

Une fois l’installation terminée, on peut commencer à définir le paramétrage. Dans mon cas :

  • Les e-mails relayés par la Raspberry Pi seront émis en utilisant un compte e-mail chez le fournisseur d’accès Internet Free. Si vous utilisez un compte chez un autre fournisseur d’accès, vous devrez remplacer free.fr par ce qui se trouve après le caractère @ de votre compte utilisateur. Vous modifierez également les paramètres du serveur d’e-mail sortant (smtp). Voir les paramètres myorigin et relayhost dans l’exemple ci-dessous ;
  • Mon réseau local est dans le groupe d’adresses IP 192.168.0.0, modifiez si besoin le paramètre mynetworks ci-dessous.

Ici on va définir le fonctionnement du logiciel postfix, qui va assurer la fonction de relais d’e-mails sortants :

sudo nano /etc/postfix/main.cf

# identité
myhostname = raspberrypi
#myorigin = /etc/mailname
myorigin = free.fr

# interfaces
inet_interfaces = all
inet_protocols = ipv4

# autoriser uniquement le LAN
mynetworks = 127.0.0.0/8 192.168.0.0/24

# pas de distribution locale
mydestination = localhost

# relais SMTP Free
relayhost = [smtp.free.fr]:587

# TLS pour le serveur distant
smtp_tls_security_level = encrypt
smtp_tls_note_starttls_offer = yes

# authentification SMTP
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

# restrictions relais
smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination

# alias mail pour l'utilisateur pi sous differentes formes
smtp_generic_maps = hash:/etc/postfix/generic
compatibility_level = 3.6

# corrige le formatage de mail mal effectue par les cameras
always_add_missing_headers = yes
local_header_rewrite_clients = static:all
enable_original_recipient = no
append_dot_mydomain = yes

Enregistrer les modifications et quitter l’édition du fichier.
Ensuite on fournit les identifiants du compte utilisateur liés au serveur défini ci-dessus dans la paramètre relayhost :

sudo nano /etc/postfix/sasl_passwd

Dans l’exemple ci-dessous remplacez login@free.fr par le nom d’utilisateur du compte, et m0t2passe par le mot de passe associé à ce compte :

[smtp.free.fr]:587 login@free.fr:m0t2passe

Enregistrer les modifications et quitter l’édition du fichier.

Transformer ces données dans un format de base de données qui sera exploitable par postfix :

sudo postmap /etc/postfix/sasl_passwd

Ensuite on définit des alias qui seront utilisés par le système Linux pour l’envoi d’e-mails exécuté localement (donc sans utiliser la fonction de relais d’e-mail sortant).


sudo nano /etc/postfix/generic

Ci-dessous, on remplacera expediteur@free.fr par l’adresse e-mail réelle du compte utilisé pour envoyer les e-mails :

pi expediteur@free.fr
@raspberrypi expediteur@free.fr
@raspberrypi.localdomain expediteur@free.fr

Enregistrer les modifications et quitter l’édition du fichier, puis saisir la commande suivante :

sudo postmap /etc/postfix/generic

Éditer le fichier des alias :

S’il est vide, ajouter le contenu suivant :

Enregistrer les modifications et quitter l’édition du fichier, puis saisir la commande suivante :

Le service postfix peut à présent être redémarré afin de prendre en compte toutes les éditions et modifications apportées :

sudo systemctl restart postfix

On peut vérifier avant d’aller plus loin si le serveur postfix est bien à l’écoute du port 25 avec la commande suivante :

Cette commande doit retourner ce type d’information : LISTEN 0 100 0.0.0.0:25 0.0.0.0:*

Pour garder un œil sur le journal d’événements de postfix, ouvrir une autre session terminal avec putty par exemple et saisir la commande suivante :

sudo journalctl -fu postfix

En cas d’erreur avec des mails qui restent dans la file d’attente et qui génèrent inutilement les tentatives d’envoi via postfix, vider la file d’attente avec la commande suivante :

Le paramétrage étant normalement terminé, commencer avec un essai d’envoi d’e-mail avec la commande suivante :



echo "test" | mail -s "test postfix" destinataire@free.fr

Vous devez observer dans le journal d’événements de postfix ce type de messages :

Mar 30 16:43:08 raspberrypi postfix/pickup[1691]: 6F194252AD: uid=1000 from= Mar 30 16:43:08 raspberrypi postfix/cleanup[1697]: 6F194252AD: message-id=<20260330154308.6F194252AD@raspberrypi>
Mar 30 16:43:08 raspberrypi postfix/qmgr[1692]: 6F194252AD: from=, size=396, nrcpt=3 (queue active)
Mar 30 16:43:12 raspberrypi postfix/smtp[1699]: 6F194252AD: to=, relay=smtp.free.fr[212.27.48.4]:587, delay=3.7, delays=0.19/0.35/0.76/2.4, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as BE27E2003DD)
Mar 30 16:43:12 raspberrypi postfix/smtp[1699]: 6F194252AD: to=, orig_to=, relay=smtp.free.fr[212.27.48.4]:587, delay=3.7, delays=0.19/0.35/0.76/2.4, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as BE27E2003DD)
Mar 30 16:43:12 raspberrypi postfix/smtp[1699]: 6F194252AD: to=, orig_to=, relay=smtp.free.fr[212.27.48.4]:587, delay=3.7, delays=0.19/0.35/0.76/2.4, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as BE27E2003DD)
Mar 30 16:43:12 raspberrypi postfix/qmgr[1692]: 6F194252AD: removed
Mar 30 17:00:48 raspberrypi postfix/pickup[1691]: 86EC2252AD: uid=1000 from= Mar 30 17:00:48 raspberrypi postfix/cleanup[1709]: 86EC2252AD: message-id=<20260330160048.86EC2252AD@raspberrypi>
Mar 30 17:00:48 raspberrypi postfix/qmgr[1692]: 86EC2252AD: from=, size=331, nrcpt=1 (queue active)
Mar 30 17:00:49 raspberrypi postfix/smtp[1711]: 86EC2252AD: to=, relay=smtp.free.fr[212.27.48.4]:587, delay=1.5, delays=0.18/0.2/0.84/0.27,dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as C4B022003EE)
Mar 30 17:00:49 raspberrypi postfix/qmgr[1692]: 86EC2252AD: removed

L’adresse définie à la place de destinataire@free.fr ci-dessus doit recevoir l’e-mail de test.
Si le test aboutit, vous pouvez passer à l’étape suivante en paramétrant vos équipements connectés pour qu’ils énvoient leurs e-mails vers votre relais d’e-mails local.

Exemple de paramétrage sur une caméra de vidéosurveillance HikVision, puisque c’était la raison de la mise en place du relais d’e-mails sortants dans mon cas :

L’adresse du serveur SMTP est l’adresse IP de la carte Raspberry Pi, qui doit être fixe sur le réseau local : adresse définie en dur via Network Manager (via nmtui ou nmcli) ou définie par un bail permanent via les serveur DHCP local.

Si la carte Raspberry Pi est accessible depuis Internet, son adresse IP ne doit pas être définie dans le paramétrage DMZ de votre routeur/modem/box Internet, et il ne doit pas y avoir non plus de translation de port (NAT) 25 vers l’adresse IP local de la Raspberry Pi.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *


La période de vérification reCAPTCHA a expiré. Veuillez recharger la page.