<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Serge Eric KALAGA</title>
    <description>The latest articles on DEV Community by Serge Eric KALAGA (@kalagaserge).</description>
    <link>https://dev.to/kalagaserge</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F675650%2F7df15dbb-4db0-4f41-9dcc-d2397ca01a20.jpg</url>
      <title>DEV Community: Serge Eric KALAGA</title>
      <link>https://dev.to/kalagaserge</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kalagaserge"/>
    <language>en</language>
    <item>
      <title>📧 Mail Service - Service d'envoi d'emails prêt à l'emploi via API REST. Intégrez facilement l'envoi d'emails dans vos projets</title>
      <dc:creator>Serge Eric KALAGA</dc:creator>
      <pubDate>Wed, 05 Nov 2025 18:10:32 +0000</pubDate>
      <link>https://dev.to/kalagaserge/mail-service-service-denvoi-demails-pret-a-lemploi-via-api-rest-integrez-facilement-lenvoi-404f</link>
      <guid>https://dev.to/kalagaserge/mail-service-service-denvoi-demails-pret-a-lemploi-via-api-rest-integrez-facilement-lenvoi-404f</guid>
      <description>&lt;h1&gt;
  
  
  📧 Mail Service - Guide d'utilisation
&lt;/h1&gt;

&lt;p&gt;Service d'envoi d'emails prêt à l'emploi via API REST. Intégrez facilement l'envoi d'emails dans vos projets sans réécrire le code SMTP.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Démarrage rapide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Utilisation avec Docker Hub
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Récupérer l'image depuis Docker Hub&lt;/span&gt;
docker pull kalagaserge/mail_service

&lt;span class="c"&gt;# Lancer le conteneur avec les variables d'environnement&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; mail_service &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 9876:9876 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;EMAIL_DOMAIN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;votre-domaine.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;EMAIL_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;smtp.votre-fournisseur.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;EMAIL_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;587 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;EMAIL_USERNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;votre-email@domaine.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;EMAIL_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;votre-mot-de-passe &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;FROM_EMAIL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;noreply@votre-domaine.com &lt;span class="se"&gt;\&lt;/span&gt;
  kalagaserge/mail_service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Utilisation avec Docker Compose
&lt;/h3&gt;

&lt;p&gt;Créez un fichier &lt;code&gt;docker-compose.yml&lt;/code&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3.8'&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mail_service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kalagaserge/mail_service&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mail_service&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;9876:9876"&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;EMAIL_DOMAIN=votre-domaine.com&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;EMAIL_HOST=smtp.votre-fournisseur.com&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;EMAIL_PORT=587&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;EMAIL_USERNAME=votre-email@domaine.com&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;EMAIL_PASSWORD=votre-mot-de-passe&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;FROM_EMAIL=noreply@votre-domaine.com&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Puis lancez le service :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⚙️ Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Variables d'environnement obligatoires
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variable&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Exemple&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EMAIL_DOMAIN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Domaine de votre organisation&lt;/td&gt;
&lt;td&gt;&lt;code&gt;monentreprise.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EMAIL_HOST&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Serveur SMTP&lt;/td&gt;
&lt;td&gt;&lt;code&gt;smtp.gmail.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EMAIL_PORT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Port SMTP (généralement 587)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;587&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EMAIL_USERNAME&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Nom d'utilisateur SMTP&lt;/td&gt;
&lt;td&gt;&lt;code&gt;admin@monentreprise.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EMAIL_PASSWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mot de passe SMTP&lt;/td&gt;
&lt;td&gt;&lt;code&gt;motdepasse123&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Variables d'environnement optionnelles
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variable&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Défaut&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FROM_EMAIL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Adresse email d'expéditeur&lt;/td&gt;
&lt;td&gt;&lt;code&gt;noreply@{EMAIL_DOMAIN}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Configuration par fournisseur
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Gmail
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;EMAIL_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;smtp.gmail.com
&lt;span class="nv"&gt;EMAIL_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;587
&lt;span class="nv"&gt;EMAIL_USERNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;votre-email@gmail.com
&lt;span class="nv"&gt;EMAIL_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mot-de-passe-application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Outlook/Hotmail
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;EMAIL_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;smtp-mail.outlook.com
&lt;span class="nv"&gt;EMAIL_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;587
&lt;span class="nv"&gt;EMAIL_USERNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;votre-email@outlook.com
&lt;span class="nv"&gt;EMAIL_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;votre-mot-de-passe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Mailgun
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;EMAIL_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;smtp.mailgun.org
&lt;span class="nv"&gt;EMAIL_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;587
&lt;span class="nv"&gt;EMAIL_USERNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;postmaster@votre-domaine.mailgun.org
&lt;span class="nv"&gt;EMAIL_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;votre-clé-api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📝 API Documentation
&lt;/h2&gt;

&lt;p&gt;Une fois le service démarré, l'API est accessible sur &lt;code&gt;http://localhost:9876&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Documentation interactive
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Swagger UI&lt;/strong&gt; : &lt;code&gt;http://localhost:9876/docs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ReDoc&lt;/strong&gt; : &lt;code&gt;http://localhost:9876/redoc&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Endpoints disponibles
&lt;/h3&gt;

&lt;h4&gt;
  
  
  GET &lt;code&gt;/&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Endpoint de vérification du service&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Réponse :&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Welcome to the Mail Service API"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  POST &lt;code&gt;/api/send-email&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Envoi d'un email&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Corps de la requête :&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"receiver_email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"destinataire@exemple.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email_object"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Sujet de l'email"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message_text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Contenu de l'email"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Paramètres :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;receiver_email&lt;/code&gt; (obligatoire) : Adresse email du destinataire ou liste d'adresses&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;email_object&lt;/code&gt; (optionnel) : Sujet de l'email (défaut : "No Subject")&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;message_text&lt;/code&gt; (obligatoire) : Contenu de l'email (supporte HTML)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Réponse en cas de succès :&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Email sent successfully"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  GET &lt;code&gt;/api/smtp-status&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Vérification du statut du serveur SMTP&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Réponse :&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SMTP server is reachable."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;États possibles :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;status: true&lt;/code&gt; : Le serveur SMTP est accessible et les identifiants sont valides&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;status: false&lt;/code&gt; : Le serveur SMTP n'est pas accessible ou les identifiants sont incorrects&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💡 Exemples d'utilisation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Envoi d'un email simple
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"http://localhost:9876/api/send-email"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "receiver_email": "user@example.com",
    "email_object": "Test Email",
    "message_text": "Bonjour, ceci est un email de test."
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Envoi à plusieurs destinataires
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"http://localhost:9876/api/send-email"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "receiver_email": [
      "user1@example.com", 
      "user2@example.com", 
      "user3@example.com"
    ],
    "email_object": "Newsletter hebdomadaire",
    "message_text": "&amp;lt;h1&amp;gt;Newsletter&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;Contenu de la newsletter...&amp;lt;/p&amp;gt;"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Envoi d'email HTML
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"http://localhost:9876/api/send-email"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "receiver_email": "client@example.com",
    "email_object": "Bienvenue !",
    "message_text": "&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h2&amp;gt;Bienvenue dans notre service !&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Merci de vous être inscrit.&amp;lt;/p&amp;gt;&amp;lt;a href=\"https://monsite.com\"&amp;gt;Visitez notre site&amp;lt;/a&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Vérification du statut SMTP
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Vérifier si le serveur SMTP est accessible&lt;/span&gt;
curl http://localhost:9876/api/smtp-status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Réponse en cas de succès :&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SMTP server is reachable."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Réponse en cas d'erreur :&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SMTP server is not reachable."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔧 Gestion des erreurs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Codes de statut HTTP
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;200&lt;/code&gt; : Email envoyé avec succès&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;400&lt;/code&gt; : Données invalides (adresse email incorrecte, configuration manquante)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;500&lt;/code&gt; : Erreur serveur (problème SMTP, configuration incorrecte)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Messages d'erreur courants
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Invalid email address"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Email configurations are not properly set."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Error sending email: [détails de l'erreur SMTP]"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📊 Diagnostic et monitoring
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Vérification de l'état du service
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Vérifier que le service répond&lt;/span&gt;
curl http://localhost:9876/

&lt;span class="c"&gt;# Vérifier la documentation API&lt;/span&gt;
curl http://localhost:9876/docs

&lt;span class="c"&gt;# Tester la connectivité SMTP&lt;/span&gt;
curl http://localhost:9876/api/smtp-status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Test d'envoi d'email (optionnel)&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"3. Test d'envoi d'email de diagnostic..."&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"http://localhost:9876/api/send-email"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "receiver_email": "admin@votre-domaine.com",
    "email_object": "Test de diagnostic - Mail Service",
    "message_text": "Ce message confirme que le service fonctionne correctement."
  }'&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"=== Fin du diagnostic ==="&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔁 Intégration Kafka
&lt;/h2&gt;

&lt;p&gt;Le service peut consommer des messages Kafka pour envoyer automatiquement des emails si l'intégration Kafka est activée via les variables d'environnement (&lt;code&gt;USE_KAFKA&lt;/code&gt;, &lt;code&gt;KAFKA_BOOTSTRAP_SERVERS&lt;/code&gt;, &lt;code&gt;KAFKA_CONSUMER_TOPIC&lt;/code&gt;, &lt;code&gt;KAFKA_MESSAGE_KEY&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Format JSON attendu pour le message (payload) avec la clé Kafka &lt;code&gt;email_topic&lt;/code&gt; (vous pouvez modifier la clé via &lt;code&gt;KAFKA_MESSAGE_KEY&lt;/code&gt;) :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"receiver_email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email_object"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Sujet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message_text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Contenu du message"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Points importants pour une intégration en production ou en environnement conteneurisé :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Le conteneur qui exécute le service doit être sur le même réseau Docker que le broker Kafka afin d'utiliser l'adresse interne du broker (ex. &lt;code&gt;broker:9093&lt;/code&gt;). Sans réseau partagé, la résolution de nom et la connexion échoueront.&lt;/li&gt;
&lt;li&gt;Pour les clients externes (depuis la machine hôte), utilisez l'endpoint exposé du broker (ex. &lt;code&gt;localhost:9092&lt;/code&gt;) si les ports sont mappés.&lt;/li&gt;
&lt;li&gt;Assurez-vous que &lt;code&gt;KAFKA_BOOTSTRAP_SERVERS&lt;/code&gt; pointe vers l'endpoint correct selon le contexte (interne au réseau Docker vs externe).&lt;/li&gt;
&lt;li&gt;Vérifiez que le topic configuré (&lt;code&gt;KAFKA_CONSUMER_TOPIC&lt;/code&gt;) correspond au topic sur lequel sont publiés les messages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemple minimal (attacher le service au réseau Docker interne du broker) :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3.8'&lt;/span&gt;

&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;local-kafka&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;external&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mail_service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kalagaserge/mail_service&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mail_service&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;9876:9876"&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;USE_KAFKA=True&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;KAFKA_BOOTSTRAP_SERVERS=broker:9093&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;KAFKA_CONSUMER_TOPIC=email_topic&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;KAFKA_MESSAGE_KEY=email_topic&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;local-kafka&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🐰 Intégration RabbitMQ
&lt;/h2&gt;

&lt;p&gt;Le service peut consommer des messages RabbitMQ pour envoyer automatiquement des emails si l'intégration RabbitMQ est activée via les variables d'environnement (&lt;code&gt;USE_RABBITMQ&lt;/code&gt;, &lt;code&gt;RABBITMQ_URL&lt;/code&gt;, &lt;code&gt;RABBITMQ_EXCHANGE&lt;/code&gt;, &lt;code&gt;RABBITMQ_ROUTING_KEY&lt;/code&gt;, &lt;code&gt;RABBITMQ_QUEUE&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Format JSON attendu pour le message publié sur RabbitMQ :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"receiver_email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email_object"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Sujet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message_text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Contenu du message"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Variables d'environnement RabbitMQ
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variable&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Exemple&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;USE_RABBITMQ&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Activer l'intégration RabbitMQ&lt;/td&gt;
&lt;td&gt;&lt;code&gt;True&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RABBITMQ_URL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;URL de connexion RabbitMQ&lt;/td&gt;
&lt;td&gt;&lt;code&gt;amqp://admin:admin@rabbitmq:5672&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RABBITMQ_EXCHANGE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Nom de l'exchange&lt;/td&gt;
&lt;td&gt;&lt;code&gt;email_exchange&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RABBITMQ_ROUTING_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Routing key pour lier la queue&lt;/td&gt;
&lt;td&gt;&lt;code&gt;email_routing_key&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RABBITMQ_QUEUE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Nom de la queue&lt;/td&gt;
&lt;td&gt;&lt;code&gt;email_queue&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RABBITMQ_DEFAULT_USER&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Utilisateur RabbitMQ&lt;/td&gt;
&lt;td&gt;&lt;code&gt;admin&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RABBITMQ_DEFAULT_PASS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mot de passe RabbitMQ&lt;/td&gt;
&lt;td&gt;&lt;code&gt;admin&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Points importants pour l'intégration RabbitMQ
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Le conteneur qui exécute le service doit être sur le même réseau Docker que RabbitMQ afin d'utiliser l'adresse interne (ex. &lt;code&gt;rabbitmq:5672&lt;/code&gt;). Sans réseau partagé, la résolution de nom et la connexion échoueront.&lt;/li&gt;
&lt;li&gt;Pour les clients externes (depuis la machine hôte), utilisez l'endpoint exposé de RabbitMQ (ex. &lt;code&gt;localhost:5672&lt;/code&gt;) si les ports sont mappés.&lt;/li&gt;
&lt;li&gt;Assurez-vous que &lt;code&gt;RABBITMQ_URL&lt;/code&gt; pointe vers l'endpoint correct selon le contexte (interne au réseau Docker vs externe).&lt;/li&gt;
&lt;li&gt;Vérifiez que l'exchange et la routing key configurés correspondent à ceux utilisés par vos producteurs de messages.&lt;/li&gt;
&lt;li&gt;Le service déclare automatiquement l'exchange de type &lt;code&gt;TOPIC&lt;/code&gt; et la queue durable, puis les lie avec la routing key spécifiée.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚨 Sécurité et bonnes pratiques
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Recommandations de sécurité
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Utilisez des mots de passe d'application&lt;/strong&gt; pour Gmail (pas votre mot de passe principal)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limitez l'accès&lt;/strong&gt; au port 9876 dans votre pare-feu&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utilisez HTTPS&lt;/strong&gt; en production avec un reverse proxy (nginx, traefik)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stockez les secrets&lt;/strong&gt; de manière sécurisée (Docker secrets, variables d'environnement chiffrées)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Surveillez régulièrement&lt;/strong&gt; le statut SMTP avec l'endpoint &lt;code&gt;/api/smtp-status&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Développé avec ❤️ par Kalaga Serge&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://mailservice-doc.vercel.app" rel="noopener noreferrer"&gt;Documentation officielle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/serge-eric-kalaga/MailService" rel="noopener noreferrer"&gt;Projet GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/serge-eric-kalaga" rel="noopener noreferrer"&gt;Profil GitHub - serge-eric-kalaga&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftgw99oi6lghjxtu5kp0m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftgw99oi6lghjxtu5kp0m.png" alt=" " width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>docker</category>
      <category>devops</category>
      <category>backend</category>
    </item>
    <item>
      <title>Template ExpressJS pour démarrer rapidement un backend (authentification JWT, Swagger, monitoring, MySQL, ...)</title>
      <dc:creator>Serge Eric KALAGA</dc:creator>
      <pubDate>Wed, 05 Nov 2025 18:05:23 +0000</pubDate>
      <link>https://dev.to/kalagaserge/template-expressjs-pour-demarrer-rapidement-un-backend-authentification-jwt-swagger-monitoring-50h7</link>
      <guid>https://dev.to/kalagaserge/template-expressjs-pour-demarrer-rapidement-un-backend-authentification-jwt-swagger-monitoring-50h7</guid>
      <description>&lt;p&gt;🚀 J'ai packagé tout ce que je configure à chaque nouveau projet backend&lt;/p&gt;

&lt;p&gt;J'ai publié un template ExpressJS pour démarrer rapidement un backend (authentification JWT, Swagger, monitoring Prometheus+Grafana, MySQL + PHPMyAdmin, gestion d'erreurs et tout dockerisé).&lt;/p&gt;

&lt;p&gt;Franchement, c'est fatiguant de passer 2-3 heures à chaque fois pour configurer les mêmes trucs : auth, Swagger, monitoring, Docker...&lt;/p&gt;

&lt;p&gt;Alors j'ai fait un template ExpressJS avec tout dedans.&lt;/p&gt;

&lt;p&gt;Ce qu'il y a :&lt;br&gt;
• Auth JWT qui marche&lt;br&gt;
• Swagger déjà configuré&lt;br&gt;
• Prometheus + Node Exporter + Grafana pour le monitoring&lt;br&gt;
• MySQL + PHPMyAdmin&lt;br&gt;
• Gestion des erreurs propre&lt;br&gt;
• Système de logs&lt;br&gt;
• Tout dockerisé&lt;/p&gt;

&lt;p&gt;Clonez, Ensuite dupliquez le &lt;code&gt;app/exemple.env&lt;/code&gt; en &lt;code&gt;.env&lt;/code&gt; puis changez les valeurs selon vos préférences, et lancez &lt;code&gt;docker compose up&lt;/code&gt;, et ça tourne.&lt;/p&gt;

&lt;p&gt;Rien de révolutionnaire, juste un gain de temps énorme si vous démarrez souvent des projets backend ExpressJS.&lt;/p&gt;

&lt;p&gt;Tous les détails sont dans le Readme du repo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Le repo : &lt;a href="https://github.com/serge-eric-kalaga/ExpressJSBackendTemplate.git" rel="noopener noreferrer"&gt;https://github.com/serge-eric-kalaga/ExpressJSBackendTemplate.git&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Il faut noter que je fais évoluer ce template au fur et à mesure que je démarre de nouveaux projets, donc n'hésitez pas à y jeter un œil de temps en temps.&lt;br&gt;
Si ça vous sert, n'hésitez pas à star ⭐, et à me faire des retours !&lt;/p&gt;

&lt;p&gt;NodeJS - ExpressJS - Backend - OpenSource&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcocc5t8ejrtrdxswszvd.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcocc5t8ejrtrdxswszvd.webp" alt=" " width="568" height="866"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3g0slo0e8weth3sjlnd7.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3g0slo0e8weth3sjlnd7.webp" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>express</category>
      <category>javascript</category>
      <category>node</category>
      <category>api</category>
    </item>
  </channel>
</rss>
