Guide de Test du Service Mail
Prérequis
- Base de données PostgreSQL démarrée
- RabbitMQ démarré
- Au moins un client dans la table
clients - Backend démarré :
cd backend && npm run start:dev
# Démarrer l'infrastructure
docker compose up -d
# Vérifier que tout est OK
docker ps
Test Manuel avec curl
1. Créer un client de test
curl -X POST "http://localhost:649/api/publique/clients" \
-H "Content-Type: application/json" \
-d '{
"nom": "Dupont",
"prenom": "Jean",
"adresseMail": "votre.email@gmail.com",
"civilite": "M",
"telephone": "0612345678"
}'
Note importante : Remplacez votre.email@gmail.com par votre vrai email pour recevoir le mail de test.
2. Récupérer l'idClient du client créé
curl -X GET "http://localhost:649/api/prive/clients" | jq
Notez l'idClient du client (format CLI_XXX, par exemple: CLI_ABC1234).
3. Envoyer un email de test
curl -X POST "http://localhost:649/api/publique/mail/send" \
-H "Content-Type: application/json" \
-d '{
"templateId": 1,
"clientIds": ["CLI_ABC1234"]
}'
Réponse attendue (202 Accepted):
{
"jobId": "123e4567-e89b-12d3-a456-426614174000",
"clientCount": 1,
"status": "pending"
}
4. Vérifier le statut de l'envoi
# Remplacez JOB_ID par le jobId retourné à l'étape 3
curl -X GET "http://localhost:649/api/publique/mail/job/JOB_ID" | jq
Réponse attendue (après quelques secondes):
{
"jobId": "123e4567-e89b-12d3-a456-426614174000",
"total": 1,
"sent": 1,
"failed": 0,
"pending": 0,
"entries": [
{
"clientId": 42,
"email": "votre.email@gmail.com",
"status": "sent",
"sentAt": "2024-01-15T10:30:45.123Z",
"errorMessage": null
}
]
}
5. Vérifier votre boîte mail
Vous devriez recevoir un email avec :
- Sujet : "Bienvenue Jean Dupont !"
- Corps : Template HTML avec vos informations
Test avec filtres
Envoyer à tous les clients Premium
curl -X POST "http://localhost:649/api/publique/mail/send" \
-H "Content-Type: application/json" \
-d '{
"templateId": 1,
"filters": {
"niveauFidelisation": "Premium"
}
}'
Envoyer aux clients avec 100-500 points
curl -X POST "http://localhost:649/api/publique/mail/send" \
-H "Content-Type: application/json" \
-d '{
"templateId": 1,
"filters": {
"pointsFideliteMin": 100,
"pointsFideliteMax": 500
}
}'
Vérification du traitement
Les emails ne sont plus traités par RabbitMQ mais par un cron job toutes les 30 secondes. Surveillez les logs du backend pour voir le traitement en temps réel.
Vérification dans la BDD
# Se connecter à PostgreSQL
docker exec -it ubsi-postgres psql db -U usr
# Voir tous les emails envoyés
SELECT
id,
client_id,
recipient_email,
status,
sent_at,
error_message
FROM email_history
ORDER BY created_at DESC
LIMIT 10;
# Statistiques par job
SELECT
job_id,
status,
COUNT(*) as count,
MIN(created_at) as started_at,
MAX(sent_at) as last_sent
FROM email_history
WHERE job_id = 'VOTRE_JOB_ID'
GROUP BY job_id, status;
Logs à surveiller
Dans le terminal du backend, vous devriez voir :
[MailService] Starting email campaign with template 1
[MailService] Found 1 clients to send emails to
[MailService] Created 1 email history entries (pending)
[MailService] Email campaign xxx created with 1 recipients (status: pending)
[MailService] Processing 1 pending emails...
[MailService] Processing email 42 for client 1 (votre.email@gmail.com)
[MailService] Email 42 sent successfully to votre.email@gmail.com
[MailService] Finished processing 1 emails
Test de charge (envoi massif)
Créer 100 clients de test
for i in {1..100}; do
curl -s -X POST "http://localhost:649/api/publique/clients" \
-H "Content-Type: application/json" \
-d "{\"nom\":\"Test$i\",\"prenom\":\"User$i\",\"adresseMail\":\"test$i@example.com\",\"telephone\":\"061234567$i\"}"
echo "Client $i créé"
done
Envoyer à tous les clients
curl -X POST "http://localhost:649/api/publique/mail/send" \
-H "Content-Type: application/json" \
-d '{
"templateId": 1,
"all": true
}'
Surveiller la progression
# Récupérer le jobId de la réponse précédente
JOB_ID="xxx"
# Surveiller en temps réel (toutes les 2 secondes)
watch -n 2 "curl -s http://localhost:649/api/publique/mail/job/$JOB_ID | jq '.total, .sent, .pending, .failed'"
Troubleshooting
Les emails ne partent pas
-
Vérifier les logs du backend :
- Chercher dans les logs :
Processing X pending emails... - Le cron job devrait s'exécuter toutes les 30 secondes
- Chercher dans les logs :
-
Vérifier SMTP :
- Les credentials SMTP sont corrects dans
app.module.ts - Pas de limite de taux atteinte sur Gmail
- Les credentials SMTP sont corrects dans
Status reste "pending"
- Le cron job n'a pas encore traité l'email (attendre 30 secondes)
- Erreur SMTP (vérifier les logs du backend)
- Le service backend n'est pas démarré
Erreur "Template not found"
- Pour le moment, seul le
templateId: 1existe (mock) - Les templates BDD ne sont pas encore implémentés
Prochaines étapes
Une fois les tests manuels validés, implémenter :
- Tests e2e automatisés
- Tests unitaires avec mocks
- Récupération des templates depuis la BDD
- Endpoints CRUD pour les templates