feat: Release v3.1.6 - Amélioration complète des flux de passages
- Optimisation des listes de passages (user/admin) - Amélioration du flux de création avec validation temps réel - Amélioration du flux de consultation avec export multi-formats - Amélioration du flux de modification avec suivi des changements - Ajout de la génération PDF pour les reçus - Migration de la structure des uploads - Implémentation de la file d'attente d'emails - Ajout des permissions de suppression de passages - Corrections de bugs et optimisations performances 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
149
api/docs/SETUP_EMAIL_QUEUE_CRON.md
Normal file
149
api/docs/SETUP_EMAIL_QUEUE_CRON.md
Normal file
@@ -0,0 +1,149 @@
|
||||
# Instructions de mise en place du CRON pour la queue d'emails
|
||||
|
||||
## Problème résolu
|
||||
Les emails de reçus étaient insérés dans la table `email_queue` mais n'étaient jamais envoyés car il manquait le script de traitement.
|
||||
|
||||
## Fichiers créés
|
||||
1. `/scripts/cron/process_email_queue.php` - Script principal de traitement
|
||||
2. `/scripts/cron/test_email_queue.php` - Script de test/diagnostic
|
||||
3. `/scripts/sql/add_email_queue_fields.sql` - Migration SQL pour les champs manquants
|
||||
|
||||
## Installation sur les serveurs (DVA, REC, PROD)
|
||||
|
||||
### 1. Appliquer la migration SQL
|
||||
|
||||
Se connecter à la base de données et exécuter :
|
||||
|
||||
```bash
|
||||
mysql -u [user] -p [database] < /path/to/api/scripts/sql/add_email_queue_fields.sql
|
||||
```
|
||||
|
||||
Ou directement dans MySQL :
|
||||
```sql
|
||||
-- Ajouter les champs manquants
|
||||
ALTER TABLE `email_queue`
|
||||
ADD COLUMN IF NOT EXISTS `sent_at` TIMESTAMP NULL DEFAULT NULL AFTER `status`;
|
||||
|
||||
ALTER TABLE `email_queue`
|
||||
ADD COLUMN IF NOT EXISTS `error_message` TEXT NULL DEFAULT NULL AFTER `attempts`;
|
||||
|
||||
-- Ajouter les index pour les performances
|
||||
ALTER TABLE `email_queue`
|
||||
ADD INDEX IF NOT EXISTS `idx_status_attempts` (`status`, `attempts`);
|
||||
|
||||
ALTER TABLE `email_queue`
|
||||
ADD INDEX IF NOT EXISTS `idx_sent_at` (`sent_at`);
|
||||
```
|
||||
|
||||
### 2. Tester le script
|
||||
|
||||
Avant de mettre en place le cron, tester que tout fonctionne :
|
||||
|
||||
```bash
|
||||
# Vérifier l'état de la queue
|
||||
php /path/to/api/scripts/cron/test_email_queue.php
|
||||
|
||||
# Tester l'envoi (traite jusqu'à 50 emails)
|
||||
php /path/to/api/scripts/cron/process_email_queue.php
|
||||
```
|
||||
|
||||
### 3. Configurer le CRON
|
||||
|
||||
Ajouter la ligne suivante dans le crontab du serveur :
|
||||
|
||||
```bash
|
||||
# Éditer le crontab
|
||||
crontab -e
|
||||
|
||||
# Ajouter cette ligne (exécution toutes les 5 minutes)
|
||||
*/5 * * * * /usr/bin/php /path/to/api/scripts/cron/process_email_queue.php >> /var/log/email_queue.log 2>&1
|
||||
```
|
||||
|
||||
**Options de fréquence :**
|
||||
- `*/5 * * * *` - Toutes les 5 minutes (recommandé)
|
||||
- `*/10 * * * *` - Toutes les 10 minutes
|
||||
- `*/2 * * * *` - Toutes les 2 minutes (si volume important)
|
||||
|
||||
### 4. Monitoring
|
||||
|
||||
Le script génère des logs via `LogService`. Vérifier les logs dans :
|
||||
- `/path/to/api/logs/` (selon la configuration)
|
||||
|
||||
Points à surveiller :
|
||||
- Nombre d'emails traités
|
||||
- Emails en échec après 3 tentatives
|
||||
- Erreurs de connexion SMTP
|
||||
|
||||
### 5. Configuration SMTP
|
||||
|
||||
Vérifier que la configuration SMTP est correcte dans `AppConfig` :
|
||||
- Host SMTP
|
||||
- Port (587 pour TLS, 465 pour SSL)
|
||||
- Username/Password
|
||||
- Encryption (tls ou ssl)
|
||||
- From Email/Name
|
||||
|
||||
## Fonctionnement du script
|
||||
|
||||
### Caractéristiques
|
||||
- **Batch size** : 50 emails par exécution
|
||||
- **Max tentatives** : 3 essais par email
|
||||
- **Lock file** : Empêche l'exécution simultanée
|
||||
- **Nettoyage** : Supprime les emails envoyés > 30 jours
|
||||
- **Pause** : 0.5s entre chaque email (anti-spam)
|
||||
|
||||
### Workflow
|
||||
1. Récupère les emails avec `status = 'pending'` et `attempts < 3`
|
||||
2. Pour chaque email :
|
||||
- Incrémente le compteur de tentatives
|
||||
- Envoie via PHPMailer avec la config SMTP
|
||||
- Si succès : `status = 'sent'` + mise à jour du passage
|
||||
- Si échec : réessai à la prochaine exécution
|
||||
- Après 3 échecs : `status = 'failed'`
|
||||
|
||||
### Tables mises à jour
|
||||
- `email_queue` : status, attempts, sent_at, error_message
|
||||
- `ope_pass` : date_sent_recu, chk_email_sent
|
||||
|
||||
## Commandes utiles
|
||||
|
||||
```bash
|
||||
# Voir les emails en attente
|
||||
mysql -e "SELECT COUNT(*) FROM email_queue WHERE status='pending'" [database]
|
||||
|
||||
# Voir les emails échoués
|
||||
mysql -e "SELECT * FROM email_queue WHERE status='failed' ORDER BY created_at DESC LIMIT 10" [database]
|
||||
|
||||
# Réinitialiser un email échoué pour réessai
|
||||
mysql -e "UPDATE email_queue SET status='pending', attempts=0 WHERE id=[ID]" [database]
|
||||
|
||||
# Voir les logs du cron
|
||||
tail -f /var/log/email_queue.log
|
||||
|
||||
# Vérifier que le cron est actif
|
||||
crontab -l | grep process_email_queue
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Le cron ne s'exécute pas
|
||||
- Vérifier les permissions : `chmod +x process_email_queue.php`
|
||||
- Vérifier le chemin PHP : `which php`
|
||||
- Vérifier les logs système : `/var/log/syslog` ou `/var/log/cron`
|
||||
|
||||
### Emails en échec
|
||||
- Vérifier la config SMTP avec `test_email_queue.php`
|
||||
- Vérifier les logs pour les messages d'erreur
|
||||
- Tester la connexion SMTP : `telnet [smtp_host] [port]`
|
||||
|
||||
### Lock bloqué
|
||||
Si le message "Le processus est déjà en cours" persiste :
|
||||
```bash
|
||||
rm /tmp/process_email_queue.lock
|
||||
```
|
||||
|
||||
## Contact support
|
||||
En cas de problème, vérifier :
|
||||
1. Les logs de l'application
|
||||
2. La table `email_queue` pour les messages d'erreur
|
||||
3. La configuration SMTP dans AppConfig
|
||||
Reference in New Issue
Block a user