đ§ Mail Service - Guide d'utilisation
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.
đ DĂ©marrage rapide
Utilisation avec Docker Hub
# Récupérer l'image depuis Docker Hub
docker pull kalagaserge/mail_service
# Lancer le conteneur avec les variables d'environnement
docker run -d \
--name mail_service \
-p 9876:9876 \
-e EMAIL_DOMAIN=votre-domaine.com \
-e EMAIL_HOST=smtp.votre-fournisseur.com \
-e EMAIL_PORT=587 \
-e EMAIL_USERNAME=votre-email@domaine.com \
-e EMAIL_PASSWORD=votre-mot-de-passe \
-e FROM_EMAIL=noreply@votre-domaine.com \
kalagaserge/mail_service
Utilisation avec Docker Compose
Créez un fichier docker-compose.yml :
version: '3.8'
services:
mail_service:
image: kalagaserge/mail_service
container_name: mail_service
ports:
- "9876:9876"
environment:
- EMAIL_DOMAIN=votre-domaine.com
- EMAIL_HOST=smtp.votre-fournisseur.com
- EMAIL_PORT=587
- EMAIL_USERNAME=votre-email@domaine.com
- EMAIL_PASSWORD=votre-mot-de-passe
- FROM_EMAIL=noreply@votre-domaine.com
restart: unless-stopped
Puis lancez le service :
docker-compose up -d
âïž Configuration
Variables d'environnement obligatoires
| Variable | Description | Exemple |
|---|---|---|
EMAIL_DOMAIN |
Domaine de votre organisation | monentreprise.com |
EMAIL_HOST |
Serveur SMTP | smtp.gmail.com |
EMAIL_PORT |
Port SMTP (généralement 587) | 587 |
EMAIL_USERNAME |
Nom d'utilisateur SMTP | admin@monentreprise.com |
EMAIL_PASSWORD |
Mot de passe SMTP | motdepasse123 |
Variables d'environnement optionnelles
| Variable | Description | Défaut |
|---|---|---|
FROM_EMAIL |
Adresse email d'expéditeur | noreply@{EMAIL_DOMAIN} |
Configuration par fournisseur
Gmail
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USERNAME=votre-email@gmail.com
EMAIL_PASSWORD=mot-de-passe-application
Outlook/Hotmail
EMAIL_HOST=smtp-mail.outlook.com
EMAIL_PORT=587
EMAIL_USERNAME=votre-email@outlook.com
EMAIL_PASSWORD=votre-mot-de-passe
Mailgun
EMAIL_HOST=smtp.mailgun.org
EMAIL_PORT=587
EMAIL_USERNAME=postmaster@votre-domaine.mailgun.org
EMAIL_PASSWORD=votre-clé-api
đ API Documentation
Une fois le service démarré, l'API est accessible sur http://localhost:9876
Documentation interactive
-
Swagger UI :
http://localhost:9876/docs -
ReDoc :
http://localhost:9876/redoc
Endpoints disponibles
GET /
Endpoint de vérification du service
Réponse :
{
"message": "Welcome to the Mail Service API"
}
POST /api/send-email
Envoi d'un email
Corps de la requĂȘte :
{
"receiver_email": "destinataire@exemple.com",
"email_object": "Sujet de l'email",
"message_text": "Contenu de l'email"
}
ParamĂštres :
-
receiver_email(obligatoire) : Adresse email du destinataire ou liste d'adresses -
email_object(optionnel) : Sujet de l'email (défaut : "No Subject") -
message_text(obligatoire) : Contenu de l'email (supporte HTML)
Réponse en cas de succÚs :
{
"message": "Email sent successfully"
}
GET /api/smtp-status
Vérification du statut du serveur SMTP
Réponse :
{
"status": true,
"message": "SMTP server is reachable."
}
Ătats possibles :
-
status: true: Le serveur SMTP est accessible et les identifiants sont valides -
status: false: Le serveur SMTP n'est pas accessible ou les identifiants sont incorrects
đĄ Exemples d'utilisation
Envoi d'un email simple
curl -X POST "http://localhost:9876/api/send-email" \
-H "Content-Type: application/json" \
-d '{
"receiver_email": "user@example.com",
"email_object": "Test Email",
"message_text": "Bonjour, ceci est un email de test."
}'
Envoi Ă plusieurs destinataires
curl -X POST "http://localhost:9876/api/send-email" \
-H "Content-Type: application/json" \
-d '{
"receiver_email": [
"user1@example.com",
"user2@example.com",
"user3@example.com"
],
"email_object": "Newsletter hebdomadaire",
"message_text": "<h1>Newsletter</h1><p>Contenu de la newsletter...</p>"
}'
Envoi d'email HTML
curl -X POST "http://localhost:9876/api/send-email" \
-H "Content-Type: application/json" \
-d '{
"receiver_email": "client@example.com",
"email_object": "Bienvenue !",
"message_text": "<html><body><h2>Bienvenue dans notre service !</h2><p>Merci de vous ĂȘtre inscrit.</p><a href=\"https://monsite.com\">Visitez notre site</a></body></html>"
}'
Vérification du statut SMTP
# Vérifier si le serveur SMTP est accessible
curl http://localhost:9876/api/smtp-status
Réponse en cas de succÚs :
{
"status": true,
"message": "SMTP server is reachable."
}
Réponse en cas d'erreur :
{
"status": false,
"message": "SMTP server is not reachable."
}
đ§ Gestion des erreurs
Codes de statut HTTP
-
200: Email envoyé avec succÚs -
400: Données invalides (adresse email incorrecte, configuration manquante) -
500: Erreur serveur (problĂšme SMTP, configuration incorrecte)
Messages d'erreur courants
{
"detail": "Invalid email address"
}
{
"detail": "Email configurations are not properly set."
}
{
"detail": "Error sending email: [détails de l'erreur SMTP]"
}
đ Diagnostic et monitoring
Vérification de l'état du service
# Vérifier que le service répond
curl http://localhost:9876/
# Vérifier la documentation API
curl http://localhost:9876/docs
# Tester la connectivité SMTP
curl http://localhost:9876/api/smtp-status
# Test d'envoi d'email (optionnel)
echo "3. Test d'envoi d'email de diagnostic..."
curl -X POST "http://localhost:9876/api/send-email" \
-H "Content-Type: application/json" \
-d '{
"receiver_email": "admin@votre-domaine.com",
"email_object": "Test de diagnostic - Mail Service",
"message_text": "Ce message confirme que le service fonctionne correctement."
}'
echo "=== Fin du diagnostic ==="
đ IntĂ©gration Kafka
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 (USE_KAFKA, KAFKA_BOOTSTRAP_SERVERS, KAFKA_CONSUMER_TOPIC, KAFKA_MESSAGE_KEY).
Format JSON attendu pour le message (payload) avec la clé Kafka email_topic (vous pouvez modifier la clé via KAFKA_MESSAGE_KEY) :
{
"receiver_email": "user@example.com",
"email_object": "Sujet",
"message_text": "Contenu du message"
}
Points importants pour une intégration en production ou en environnement conteneurisé :
- 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.
broker:9093). Sans réseau partagé, la résolution de nom et la connexion échoueront. - Pour les clients externes (depuis la machine hÎte), utilisez l'endpoint exposé du broker (ex.
localhost:9092) si les ports sont mappés. - Assurez-vous que
KAFKA_BOOTSTRAP_SERVERSpointe vers l'endpoint correct selon le contexte (interne au réseau Docker vs externe). - Vérifiez que le topic configuré (
KAFKA_CONSUMER_TOPIC) correspond au topic sur lequel sont publiés les messages.
Exemple minimal (attacher le service au réseau Docker interne du broker) :
version: '3.8'
networks:
local-kafka:
external: true
services:
mail_service:
image: kalagaserge/mail_service
container_name: mail_service
ports:
- "9876:9876"
environment:
- USE_KAFKA=True
- KAFKA_BOOTSTRAP_SERVERS=broker:9093
- KAFKA_CONSUMER_TOPIC=email_topic
- KAFKA_MESSAGE_KEY=email_topic
networks:
- local-kafka
restart: unless-stopped
đ° IntĂ©gration RabbitMQ
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 (USE_RABBITMQ, RABBITMQ_URL, RABBITMQ_EXCHANGE, RABBITMQ_ROUTING_KEY, RABBITMQ_QUEUE).
Format JSON attendu pour le message publié sur RabbitMQ :
{
"receiver_email": "user@example.com",
"email_object": "Sujet",
"message_text": "Contenu du message"
}
Variables d'environnement RabbitMQ
| Variable | Description | Exemple |
|---|---|---|
USE_RABBITMQ |
Activer l'intégration RabbitMQ | True |
RABBITMQ_URL |
URL de connexion RabbitMQ | amqp://admin:admin@rabbitmq:5672 |
RABBITMQ_EXCHANGE |
Nom de l'exchange | email_exchange |
RABBITMQ_ROUTING_KEY |
Routing key pour lier la queue | email_routing_key |
RABBITMQ_QUEUE |
Nom de la queue | email_queue |
RABBITMQ_DEFAULT_USER |
Utilisateur RabbitMQ | admin |
RABBITMQ_DEFAULT_PASS |
Mot de passe RabbitMQ | admin |
Points importants pour l'intégration RabbitMQ
- 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.
rabbitmq:5672). Sans réseau partagé, la résolution de nom et la connexion échoueront. - Pour les clients externes (depuis la machine hÎte), utilisez l'endpoint exposé de RabbitMQ (ex.
localhost:5672) si les ports sont mappés. - Assurez-vous que
RABBITMQ_URLpointe vers l'endpoint correct selon le contexte (interne au réseau Docker vs externe). - Vérifiez que l'exchange et la routing key configurés correspondent à ceux utilisés par vos producteurs de messages.
- Le service déclare automatiquement l'exchange de type
TOPICet la queue durable, puis les lie avec la routing key spécifiée.
đš SĂ©curitĂ© et bonnes pratiques
Recommandations de sécurité
- Utilisez des mots de passe d'application pour Gmail (pas votre mot de passe principal)
- Limitez l'accĂšs au port 9876 dans votre pare-feu
- Utilisez HTTPS en production avec un reverse proxy (nginx, traefik)
- Stockez les secrets de maniÚre sécurisée (Docker secrets, variables d'environnement chiffrées)
-
Surveillez réguliÚrement le statut SMTP avec l'endpoint
/api/smtp-status
DĂ©veloppĂ© avec â€ïž par Kalaga Serge

Top comments (0)