Commit Graph

5 Commits

Author SHA1 Message Date
Matthieu 05ce6549a4 fix(mail) : stop le spam GlitchTip de sync (reconnexion AUTHENTICATIONFAILED + double-log)
Pull Request — Quality gate / Frontend (build) (pull_request) Successful in 43s
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 1m3s
Un seul echec de dossier (empty response) generait 4 events GlitchTip :
- le bloc de detection de suppression rappelait listMessages quand le
  fetch initial avait echoue, forcant une reconnexion IMAP refusee par OVH
  (AUTHENTICATIONFAILED, throttling) ;
- chaque echec etait logge 2x en error (provider + service).

Fix :
- garde `if (null !== $remoteHeaders)` autour de la detection de
  suppression : si le fetch a echoue, on saute le diff (reprise au
  cycle suivant), plus de reconnexion parasite ;
- le log service des MailProviderException passe en warning (le provider
  reste la source unique au niveau error pour GlitchTip, couvre aussi les
  chemins HTTP).

Net : 1 event GlitchTip par echec de dossier.
Test de regression : testSyncFolderDoesNotRefetchMessagesWhenInitialFetchFails.
2026-06-30 17:25:38 +02: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
Matthieu bcbc04325e feat(mail) : décodage des en-têtes MIME + aperçu inline des pièces jointes
Auto Tag Develop / tag (push) Has been cancelled
- Décode les encoded-words MIME (RFC 2047) des sujets et noms d'expéditeur
  via App\Mail\MimeHeaderDecoder, appliqué dans ImapMailProvider (sync propre)
- Commande app:mail:redecode-headers (--dry-run) pour re-décoder l'existant en base
- Aperçu inline images + PDF en visionneuse modale plein écran (MailAttachmentPreview),
  téléchargement conservé pour les autres types
- Tests unitaires du décodeur + maj docs/mail-integration.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 11:42:38 +02:00
matthieu b0f05da84a docs(mail) : section "Statut & reprise" — handoff complet (bugs corrigés, points en suspens, commandes) pour reprise sur autre poste
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 08:22:11 +02:00
matthieu 7a682b4662 docs(mail) : checklist prod + sécurité, guide intégration complet, mention README 2026-05-20 00:59:31 +02:00