fix(mail) : stop le spam GlitchTip de sync (UTF7 + dossiers fantômes) #34

Merged
matthieu merged 2 commits from fix/mail-sync-folder-not-found-spam into develop 2026-06-29 15:42:36 +00:00
Owner

Problème

Sur GlitchTip prod : ~170 erreurs récurrentes syncFolder[...] listMessages failed: Folder ... not found, rejouées à chaque cycle de sync (toutes les 10 min) par app:mail:sync.

Causes racines

  1. Double-encodage UTF7-IMAPlistFolders() stocke le chemin brut UTF7-IMAP, mais ImapMailProvider rappelait getFolder(\$path) qui ré-encode UTF8→UTF7-IMAP (webklex Client::getFolderByPath, utf7=false). Le caractère de shift & était ré-encodé → dossiers à accents/specials introuvables.
  2. Dossiers fantômes jamais purgéssyncFolderStructure() gardait en DB les dossiers disparus du serveur (Trash vidé, dossiers RH supprimés), re-tentés à chaque cycle.

Correctifs

  • ImapMailProvider : getFolder(\$path, null, utf7: true) partout (les paths sont déjà UTF7-IMAP). Bonus : les dossiers à encodage spécial se synchronisent enfin.
  • MailSyncService : syncFolderStructure() retourne le set des chemins présents sur le serveur ; doSyncAll() skip silencieusement les dossiers DB absents (conservés en DB pour les liens messages/tâches). Fallback historique si listFolders échoue.

Tests

  • Nouveau test TDD testSyncAllSkipsFoldersNoLongerPresentOnServer.
  • Suite complète : 232 tests OK (hook pre-commit).

Déploiement / suivi

  • Le spam ne s'arrêtera côté prod qu'après déploiement de cette version.
  • Après déploiement : marquer les issues GlitchTip syncFolder... comme resolved (réouverture auto en cas de régression).
## Problème Sur GlitchTip prod : ~170 erreurs récurrentes `syncFolder[...] listMessages failed: Folder ... not found`, rejouées à chaque cycle de sync (toutes les 10 min) par `app:mail:sync`. ## Causes racines 1. **Double-encodage UTF7-IMAP** — `listFolders()` stocke le chemin brut UTF7-IMAP, mais `ImapMailProvider` rappelait `getFolder(\$path)` qui ré-encode UTF8→UTF7-IMAP (webklex `Client::getFolderByPath`, `utf7=false`). Le caractère de shift `&` était ré-encodé → dossiers à accents/specials introuvables. 2. **Dossiers fantômes jamais purgés** — `syncFolderStructure()` gardait en DB les dossiers disparus du serveur (Trash vidé, dossiers RH supprimés), re-tentés à chaque cycle. ## Correctifs - `ImapMailProvider` : `getFolder(\$path, null, utf7: true)` partout (les paths sont déjà UTF7-IMAP). Bonus : les dossiers à encodage spécial se synchronisent enfin. - `MailSyncService` : `syncFolderStructure()` retourne le set des chemins présents sur le serveur ; `doSyncAll()` skip silencieusement les dossiers DB absents (conservés en DB pour les liens messages/tâches). Fallback historique si `listFolders` échoue. ## Tests - Nouveau test TDD `testSyncAllSkipsFoldersNoLongerPresentOnServer`. - Suite complète : 232 tests OK (hook pre-commit). ## Déploiement / suivi - Le spam ne s'arrêtera côté prod qu'après déploiement de cette version. - Après déploiement : marquer les issues GlitchTip `syncFolder...` comme resolved (réouverture auto en cas de régression).
matthieu added 1 commit 2026-06-29 15:35:26 +00:00
fix(mail) : stop le spam GlitchTip de sync (double-encodage UTF7 + dossiers fantômes)
Pull Request — Quality gate / Frontend (build) (pull_request) Successful in 1m20s
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m44s
0269bc6d28
Deux causes racines généraient ~170 erreurs/cycle (toutes les 10 min) sur
la prod : "syncFolder[...] listMessages failed: Folder ... not found".

1. Double-encodage UTF7-IMAP : listFolders() stocke le chemin brut UTF7-IMAP,
   mais ImapMailProvider rappelait getFolder($path) qui ré-encode UTF8->UTF7-IMAP
   (webklex Client::getFolderByPath, utf7=false). Le caractère de shift "&" était
   ré-encodé, rendant introuvables les dossiers à accents/specials. Fix :
   getFolder($path, null, utf7: true) partout dans ImapMailProvider.

2. Dossiers fantômes jamais purgés : syncFolderStructure() gardait en DB les
   dossiers disparus du serveur, re-tentés à chaque cycle. Fix :
   syncFolderStructure() retourne le set des chemins présents sur le serveur ;
   doSyncAll() skip silencieusement les dossiers DB absents (conservés en DB
   pour les liens messages/tâches). Fallback historique si listFolders échoue.

Test : testSyncAllSkipsFoldersNoLongerPresentOnServer.
matthieu added 1 commit 2026-06-29 15:42:32 +00:00
Merge branch 'develop' into fix/mail-sync-folder-not-found-spam
Pull Request — Quality gate / Frontend (build) (pull_request) Successful in 42s
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Failing after 1m6s
823de28f56
matthieu merged commit aacf321ef7 into develop 2026-06-29 15:42:36 +00:00
matthieu deleted branch fix/mail-sync-folder-not-found-spam 2026-06-29 15:42:36 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MALIO-DEV/Lesstime#34