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

2 Commits

Author SHA1 Message Date
matthieu 823de28f56 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
2026-06-29 15:42:29 +00:00
Matthieu 0269bc6d28 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
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.
2026-06-29 17:33:59 +02:00