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 :
crontab -e
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 :
sudo service cron reload
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 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.
sudo nano /etc/postfix/main.cf
Ici on va définir le fonctionnement du logiciel postfix, qui va assurer la fonction de relais d’e-mails sortants :
# 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.frpar le nom d’utilisateur du compte, etm0t2passepar le mot de passe associé à ce compte :[smtp.free.fr]:587 login@free.fr:m0t2passeEnregistrer les modifications et quitter l’édition du fichier.
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/genericCi-dessous, on remplacera
expediteur@free.frpar 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.frEnregistrer les modifications et quitter l’édition du fichier, puis saisir la commande suivante :
sudo postmap /etc/postfix/genericIl ne reste plus qu’à générer la base postfix :
sudo systemctl restart postfix
Pour garder un œil sur les logs 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 :
sudo postsuper -d ALL
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
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.
