# Fix : emails « en attente » dans WP Mail SMTP

## Ce qui se passait

1. L'option **« Optimiser l'envoi des emails »** de WP Mail SMTP était active :
   chaque email est alors mis dans une **file d'attente** au lieu d'être envoyé
   tout de suite.
2. Le traitement de cette file dépend du **cron WordPress** (via Action
   Scheduler). Sur l'hébergement mutualisé OVH (cache LiteSpeed + trafic
   variable), ce cron ne tourne pas de façon fiable.
3. Résultat : les emails restaient « en attente » et les clients ne recevaient
   rien (confirmations de réservation, factures, etc.).

## Ce que fait le correctif (`includes/class-mail-watchdog.php`)

- **Envoi immédiat** : la file d'attente WP Mail SMTP est neutralisée par code.
  Même si l'option est recochée dans les réglages, elle reste sans effet.
- **Purge automatique** : toutes les 2 minutes max (en fin de requête, sans
  ralentir les visiteurs), le watchdog vide la file des emails encore bloqués
  et exécute lui-même Action Scheduler, sans attendre le cron. Il rejoue aussi
  les envois `CDV_Mailer` en échec dont le retry n'avait jamais été déclenché.
- **Alerte admin** : si des emails sont bloqués, une bannière rouge apparaît
  dans le back-office avec un bouton **« Envoyer maintenant »**.

Dès le déploiement, il suffit d'ouvrir n'importe quelle page du site ou de
l'admin pour que les emails en attente partent.

## Le problème de fond : « WP Mail SMTP se déconnecte »

Le watchdog garantit que les emails ne restent plus coincés, mais si la
**connexion au service d'envoi** tombe, les envois échoueront quand même.
Déconnexions fréquentes = presque toujours l'un de ces deux cas :

1. **Mailer Google / One-Click Setup** : si l'application OAuth Google est en
   mode « Test » (Google Cloud Console), le jeton expire **tous les 7 jours**
   → il faut publier l'application en « Production », ou changer de mailer.
2. **Mot de passe / jeton révoqué** côté fournisseur.

### Recommandation durable

Dans **WP Mail SMTP → Réglages**, passer sur un mailer à identifiants fixes,
qui ne se « déconnecte » jamais :

- **Brevo** (ex-Sendinblue, gratuit jusqu'à 300 emails/jour, serveurs en
  Europe, très bonne délivrabilité), ou
- **Autre SMTP** avec les identifiants **SMTP OVH** de la boîte mail du
  domaine (host `ssl0.ovh.net`, port 465, SSL).

Puis envoyer un email de test depuis **WP Mail SMTP → Outils → Test d'email**.

### Bonus fiabilité (optionnel)

Créer une **tâche cron OVH** (espace client OVH → Hébergement → Tâches
planifiées) qui appelle `wp-cron.php` toutes les 5 minutes :

```
/usr/local/bin/php /home/<compte>/www/wp-cron.php
```

et ajouter `define('DISABLE_WP_CRON', true);` dans `wp-config.php`. Le cron
devient alors indépendant du trafic du site.
