Créer son propre serveur de mail pro avec Claude pour 0 euros

Dépendre des plateformes de mail, cela peut vous soulager d'un poids, suffit il que la plateforme fasse son travail et vous portes assistance quand vous en avez besoin.

Ce qui de nos jours est de plus en plus rare... On se demande qui est le client...

Et quand on voit google workspace, qui facture jusqu'à 16 euros par mois pour un email professionnel, cela peut décourager un certain nombre de personnes.


C'est pourquoi j'ai décidé de m'affranchir de ses plateformes et de créer mon propre serveur de mail sur mon serveur. (un serveur que je paye 9 euros par mois)

J'ai commencé avec chatGPT mais en fait j'ai tourné en rond pendant plusieurs heures et alors je suis passé sur Claude Opus 4.5 et tout s'est résolu en 1 heure seulement.


Avant de continuer de lire la suite de l'article, je vous invites à vous inscrire à ma newsletter, pour connaître en avant première les futurs sujets traités chaque semaine.



1. Installation du serveur mail sur votre serveur

Voici le github pour créer un serveur mail sur votre serveur (avec docker compose) et son webmail roundcube avec la double authentification (pour la sécurité): 

https://github.com/mgrr/serveur_mail_pro

2. Configuration des DNS

La configuration DNS est une étape critique lors de la mise en place d’un serveur mail.

Sans elle, les emails risquent de ne pas arriver, d’être classés comme spam, ou d’être refusés par les grands fournisseurs (Gmail, Outlook, Yahoo…).

2.1. Le record MX : où envoyer les emails

Le record MX (Mail eXchanger) indique quel serveur reçoit les emails pour un domaine.

Exemple :

mathieugrenier.fr. MX 10 mail.mathieugrenier.fr.

👉 Cela signifie que tous les mails destinés à @mathieugrenier.fr seront envoyés vers mail.mathieugrenier.fr.

⚠️ Le serveur MX doit toujours pointer vers un nom de domaine, jamais directement vers une IP.

2.2. Le record A (ou AAAA) : résoudre le serveur mail

Le nom utilisé dans le MX doit lui-même pointer vers une IP via un record A (IPv4) ou AAAA (IPv6).

Exemple :

mail.mathieugrenier.fr. A ip_du_serveur

👉 C’est ce lien DNS qui permet aux autres serveurs de contacter physiquement votre serveur mail.

2.3. Le reverse DNS (PTR) : la cohérence IP ↔ domaine

Le reverse DNS (PTR) fait le chemin inverse :

il relie l’IP du serveur à son nom de domaine.

Exemple :

ip_du_serveur → mail.mathieugrenier.fr

📌 Ce point est fondamental pour la délivrabilité :

  • Une IP sans reverse DNS est très souvent considérée comme suspecte
  • Le nom retourné doit correspondre au serveur qui envoie les mails

👉 Le PTR se configure chez l’hébergeur, pas dans la zone DNS classique.

2.4. SPF : autoriser les serveurs à envoyer des mails

Le SPF (Sender Policy Framework) indique quels serveurs ont le droit d’envoyer des emails pour un domaine.

Il est défini via un record TXT.

Exemple simple :

mathieugrenier.fr. TXT "v=spf1 ip4:ip_du_serveur mx ~all"

Signification :

  • mx : seuls les serveurs définis dans les MX peuvent envoyer des mails
  • -all : tout le reste est refusé

👉 SPF protège contre l’usurpation d’adresse (spoofing).

2.5. DKIM : signer les emails

Le DKIM (DomainKeys Identified Mail) ajoute une signature cryptographique aux emails sortants.

Il repose sur :

  • une clé privée sur le serveur mail
  • une clé publique publiée en DNS (record TXT)

Exemple :

mail._domainkey.mathieugrenier.fr. TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."

👉 La clé publique peut se trouver sur plusieurs lignes quand vous générer le DKIM, il faut concaténer les lignes pour former le global, ce n'est pas la clé publique puis la clé privé

👉 Le serveur distant vérifie la signature via le DNS

👉 Si le contenu est modifié → la signature devient invalide

2.6. DMARC : la politique de confiance

Le DMARC combine SPF et DKIM et indique quoi faire en cas d’échec.

Exemple de configuration progressive :

_dmarc.mathieugrenier.fr. TXT "v=DMARC1; p=none; rua=mailto:dmarc@mathieugrenier.fr"

  • p=none : mode observation (recommandé au début)
  • rua : adresse pour recevoir les rapports

Une fois les tests validés :

p=quarantine p=reject

👉 DMARC est aujourd’hui indispensable pour être accepté par Gmail et consorts.

2.7. Ordre recommandé de mise en place

Pour éviter les erreurs :

  1. Record A / AAAA
  2. Reverse DNS (PTR)
  3. Record MX
  4. SPF
  5. DKIM
  6. DMARC (en mode none, puis durcissement)


3. Problématiques principales rencontrées

*** Problème 1 : "Connection to Storage Server Failed" (IMAP) *** 

Cause : Roundcube ne pouvait pas se connecter au serveur IMAP car le

certificat SSL était auto-signé et les variables d'environnement

ROUNDCUBEMAIL_IMAP_SSL_VERIFY_PEER n'étaient pas appliquées correctement.


Solution : Créer un fichier de configuration personnalisé

./roundcube/data/config/custom.inc.php :


<?php

$config['imap_conn_options'] = array(

'ssl' => array(

'verify_peer' => false,

'verify_peer_name' => false,

'allow_self_signed' => true,

),

);


---

*** Problème 2 : "SMTP Error: Authentication failure"  *** 

Cause : Deux problèmes combinés :


1. La variable ROUNDCUBEMAIL_SMTP_SERVER: mailserver n'incluait pas le préfixe

tls://, empêchant la négociation STARTTLS. Sans STARTTLS, le serveur SMTP

n'expose pas les mécanismes d'authentification (AUTH PLAIN LOGIN).

2. Les variables d'environnement ROUNDCUBEMAIL_SMTP_USER et

ROUNDCUBEMAIL_SMTP_PASS n'étaient pas appliquées par l'image Docker Roundcube.


Solution :


1. Modifier docker-compose.yml :

ROUNDCUBEMAIL_SMTP_SERVER: tls://mailserver


2. Ajouter dans custom.inc.php :

$config['smtp_conn_options'] = array(

'ssl' => array(

'verify_peer' => false,

'verify_peer_name' => false,

'allow_self_signed' => true,

),

);

$config['smtp_user'] = '%u';

$config['smtp_pass'] = '%p';


Note : Dans Roundcube 1.5+, la variable est smtp_host et non smtp_server. Le

fichier docker génère déjà smtp_host, donc inutile de le redéfinir.


---

*** Problème 3 : "554 Client host rejected: Access denied" ***


Cause : Même après STARTTLS, l'authentification SMTP ne se faisait pas

(connexion "Anonymous TLS"). Le serveur rejetait donc le relay vers des

domaines externes.


Solution : C'était lié au problème 2 - les identifiants SMTP n'étaient pas

transmis. Une fois smtp_user et smtp_pass configurés dans custom.inc.php,

l'authentification fonctionnait et le relay était autorisé.


---

Configuration finale


docker-compose.yml (extrait Roundcube) :

roundcube:

image: roundcube/roundcubemail:latest

environment:

ROUNDCUBEMAIL_DEFAULT_HOST: ssl://mailserver

ROUNDCUBEMAIL_DEFAULT_PORT: 993

ROUNDCUBEMAIL_SMTP_SERVER: tls://mailserver

ROUNDCUBEMAIL_SMTP_PORT: 587

volumes:

- ./roundcube/data:/var/roundcube


./roundcube/data/config/custom.inc.php :

<?php

$config['imap_conn_options'] = array(

'ssl' => array(

'verify_peer' => false,

'verify_peer_name' => false,

'allow_self_signed' => true,

),

);

$config['smtp_conn_options'] = array(

'ssl' => array(

'verify_peer' => false,

'verify_peer_name' => false,

'allow_self_signed' => true,

),

);

$config['smtp_user'] = '%u';

$config['smtp_pass'] = '%p';


---

Commandes de diagnostic utiles


# Tester la connectivité IMAP

docker exec -it roundcube openssl s_client -connect mailserver:993


# Tester SMTP avec STARTTLS

docker exec -it roundcube openssl s_client -starttls smtp -connect

mailserver:587


# Vérifier les logs Roundcube

docker compose logs roundcube | grep -i error


# Vérifier les logs Mailserver

docker compose logs mailserver | tail -20


# Lister les comptes email

docker exec -it mailserver setup email list


Bonus: DMarc comment surveiller:

Ajoutez cet enregistrement DNS TXT :

Nom : _dmarc Type : TXT

Valeur :

v=DMARC1; p=none; rua=mailto:postmaster@mathieugrenier.fr


Commencez avec p=none pour surveiller sans bloquer. Après quelques jours,

passez à p=quarantine puis p=reject.


> Comment surveiller ?

● Les serveurs de réception (Gmail, Yahoo, etc.) enverront des rapports XML à

postmaster@mathieugrenier.fr. Ces rapports arrivent généralement une fois par

jour.

Option 1 : Lire les rapports manuellement



Les fichiers XML sont difficiles à lire. Vous pouvez utiliser des outils en

ligne gratuits pour les analyser :

- https://dmarc.postmarkapp.com/ (coller le XML)

- https://mxtoolbox.com/DmarcReportAnalyzer.aspx


Option 2 : Service de surveillance gratuit



Utilisez un service qui agrège et visualise les rapports :

- Postmark DMARC (gratuit) : https://dmarc.postmarkapp.com/

- DMARCian (gratuit limité) : https://dmarcian.com/


Modifiez votre enregistrement DMARC pour utiliser leur adresse :

v=DMARC1; p=none;

rua=mailto:votre-id@ag.dmarcian.com,mailto:postmaster@mathieugrenier.fr


Option 3 : Vérification rapide


Pour tester maintenant que tout est bien configuré :

dig TXT _dmarc.mathieugrenier.fr


Ou utilisez https://mxtoolbox.com/dmarc.aspx pour vérifier votre

configuration.


Qui suis je ?


Je suis Mathieu GRENIER, CTO d'Easystrat une startup de Montpellier, en France. Je manage une équipe d'une dizaine d'ingénieurs (Graphistes, IA, frontend, backend, devOps, AWS) en remote depuis le Japon.

J'ai aussi mon activité de freelance, où je conseille des entrepreneurs dans leurs projets d'application. 

Avec mon expérience personnelle de plus de 15 ans en ESN, j'ai pu travailler pour un large panel d'entreprises de différentes tailles. Ma compréhension des problèmes métiers est une de mes grandes forces et permet à mes clients de pouvoir se projeter plus facilement.

L'essentiel de mon travail consiste à canaliser l'énergie des entrepreneurs sur l'essence même de leur projet. 

La technologie, les méthodes, le management sont le cœur de mes compétences.

Vous pouvez me faire confiance sur ces points là.

Si vous voulez me parler d'un de vos projets, n'hésitez pas à m'envoyer un email avec vos disponibilités à : contact@mathieugrenier.fr



Tous les articles de ce blog sont écris par moi, même si je peux m'aider de l'IA pour illustrer mes propos. Mais jamais je ne fournis d'articles 100% IA.

Mathieu Grenier 27 janvier 2026
Partager cet articlE