# 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