fix(mail) : synchro multi-dossiers fiable contre OVH

Trois causes racines révélées par une vraie synchro complète (139 dossiers) :
- contrainte UNIQUE globale sur message_id : fausse pour IMAP (un même Message-ID
  existe dans plusieurs dossiers) → violation → fermeture de l'EntityManager →
  cascade qui tuait tous les dossiers suivants. Migration : index simple à la place.
- 139 connexions IMAP (une par dossier) → throttling OVH (failed to authenticate) :
  réutilisation d'une seule connexion (closeConnection() ajouté à l'interface).
- état de connexion corrompu après un dossier en erreur (must be in SELECTED state) :
  reconnexion ciblée après chaque dossier en échec.
- garde anti-cascade : reset du ManagerRegistry + arrêt propre si l'EM se ferme.

Résultat : 456 messages sur 57 dossiers (avant : 188/30 puis crash). Les rares
dossiers à encodage spécial sont skippés proprement et réessayés au cycle suivant.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-20 08:21:02 +02:00
parent c6fa5a534e
commit c75dfa0371
6 changed files with 91 additions and 17 deletions

View File

@@ -20,6 +20,12 @@ interface MailProviderInterface
*/
public function testConnection(): int;
/**
* Releases any reused network connection held by the provider.
* Safe to call multiple times; a no-op if nothing is open.
*/
public function closeConnection(): void;
/**
* Returns the full folder tree of the configured mailbox.
*