Thunderbird gelé au démarrage
Thunderbird s'ouvre, se voile en blanc, et Windows finit par le fermer. Le réflexe est de réinstaller, ou pire de supprimer le profil : dans la grande majorité des cas la cause est la restauration de session, une trentaine d'onglets rouverts d'un coup qui figent l'application avant qu'elle ne rende la main. Cette procédure isole la cause en trois contrôles, corrige sans jamais toucher au courrier, et vérifie la remise en service.
Conventions et cadre d'intervention
Toutes les valeurs propres au client sont notées en placeholders : imap.serveur.tld pour le nom d'hôte de messagerie, [email protected] pour l'adresse. Sur un mutualisé, ce nom d'hôte est celui affiché dans le panneau d'hébergement, sous Comptes de messagerie puis Connecter des appareils, jamais un alias déduit du nom de domaine.
Les commandes qui suivent utilisent deux variables PowerShell, posées une fois pour toutes à la phase 00 : $p pour le dossier du profil actif, $bk pour le dossier de sauvegarde. Elles se perdent à la fermeture de la console : si vous rouvrez une fenêtre en cours d'intervention, rejouez la phase 00.
Cette procédure couvre le gel au lancement. Pour le déplacement des boîtes, voir Migration mail POP et IMAP vers IMAP ; pour la reconfiguration des clients, Reconfigurer Outlook et les mobiles après une migration mail.
Reconnaître le cas
Un gel et un plantage se ressemblent pour l'utilisateur, et appellent deux dépannages opposés. Les quatre points ci-dessous doivent être réunis. S'ils ne le sont pas, cette procédure n'est pas la bonne.
- La fenêtre s'affiche, puis se voile en blanc avec la mention « ne répond pas » dans la barre de titre.
- Le gel survient très vite après le lancement, en général en moins de 60 secondes, et non en cours d'utilisation.
- Il se reproduit à chaque tentative, y compris après un redémarrage du poste.
- Aucun rapport de plantage n'est proposé, parce qu'il s'agit d'un blocage et non d'un arrêt brutal.
Application Error et non un Application Hang, et le traitement passe par le mode sans échec puis les modules, pas par la session. La phase 01 tranche en une commande.Arbre de décision
Le geste à faire dépend de ce que montrent les contrôles, pas de ce que raconte l'écran. Quatre situations proches appellent quatre gestes différents.
Fenêtre visible, « ne répond pas », pas de rapport de plantage
C'est bien un gel. Le diagnostic complet s'applique, et il s'arrête presque toujours à la session. → Phases 00 à 03
La session rouvre une pile d'onglets de messages
Cause la plus fréquente, et la plus rapide à corriger. On déplace le fichier de session, on ne supprime rien. → Phase 04, puis vérification
Un index est en cause, pas la session
Index de recherche global, ou index d'un dossier précis si le gel se produit toujours au même endroit. → Phase 05
Module incompatible, ou accélération graphique
Un module resté sur la version précédente bloque le démarrage sans le dire. → Phase 06, mode sans échec d'abord
Repérer le profil actif
Quand : en premier, Thunderbird fermé, avant toute autre commande.
Un poste peut porter plusieurs profils, dont d'anciens abandonnés lors d'une réinstallation. Travailler sur le mauvais donne une intervention sans effet, et un utilisateur qui retrouve son problème intact. Ne jamais deviner le dossier : le fichier profiles.ini désigne celui qui sert.
$tb = "$env:APPDATA\Thunderbird" $rel = (Select-String "$tb\profiles.ini" -Pattern '^Default=Profiles/' | Select-Object -First 1).Line -replace '^Default=', '' $p = Join-Path $tb ($rel -replace '/', '\') $p # le chemin retenu pour toute la suite Test-Path $p # True, sinon le profil designe n'existe plus
.default-esr ou .default, et un True. Relever au passage la taille du profil et la date du dernier lancement : un profil volumineux explique le gel de session, une date ancienne trahit un profil abandonné.Default= est absente, ce qui arrive sur une installation qui n'a jamais démarré ou sur un profil déplacé à la main. Ouvrir profiles.ini, repérer la section [Profile…] dont le chemin existe réellement sur le disque, et poser $p à la main. Si IsRelative=0, le chemin est absolu et se lit tel quel, y compris sur un autre disque.Confirmer le blocage dans le journal Windows
Quand : avant de modifier quoi que ce soit, pour prouver le gel et le dater.
C'est la preuve objective. Elle distingue un vrai gel d'une lenteur ressentie, elle date le début du problème, et elle servira de point de comparaison à la vérification.
Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='Application Hang'; StartTime=(Get-Date).AddDays(-7)} -ErrorAction SilentlyContinue |
Where-Object { $_.Message -match 'thunderbird' } |
Select-Object TimeCreated, Id
Application Hang par Application Error. Si c'est là que les événements apparaissent, il s'agit d'un plantage et non d'un gel, cette procédure ne s'applique pas : passer directement à la phase 06. Deux listes vides et un utilisateur qui maintient le symptôme : chercher du côté de la lenteur et non du blocage, en commençant par l'espace libre sur C: et par l'antivirus.Mettre le serveur de messagerie hors de cause
Quand : avant de toucher au profil, pour savoir de quel côté est le problème.
Thunderbird interroge le serveur dès le lancement, pour chaque compte et pour chaque onglet restauré. Un serveur qui répond en plusieurs secondes suffit à figer l'application : inutile de démonter un profil qui n'a rien fait. La sonde ci-dessous ouvre la connexion chiffrée et lit la bannière, sans authentification et sans envoyer le moindre message.
$h = 'imap.serveur.tld' # le nom d'hote releve dans le panneau
$c = New-Object Net.Sockets.TcpClient
$c.Connect($h, 993)
$s = New-Object Net.Security.SslStream($c.GetStream(), $false, ({ $true } -as [Net.Security.RemoteCertificateValidationCallback]))
$s.AuthenticateAsClient($h)
(New-Object IO.StreamReader($s)).ReadLine()
$c.Close()
* OK [CAPABILITY ...] ready. en une fraction de seconde. Le serveur est hors de cause, le problème est sur le poste : continuer.Compter les onglets restaurés au lancement
Quand : dernier contrôle, et dans la grande majorité des cas celui qui donne la réponse.
Thunderbird rouvre au démarrage tous les onglets laissés ouverts à la fermeture. Chaque onglet de message déclenche une requête sur le serveur, et un onglet de pièce jointe recharge le fichier entier : une session trop chargée fige l'application avant qu'elle n'ait rendu la main. Comme elle est rechargée à chaque lancement, le symptôme se reproduit indéfiniment, et c'est ce caractère systématique qui fait croire à une installation corrompue.
(Get-Content "$p\session.json" -Raw | Select-String '"mode":"' -AllMatches).Matches.Count
[math]::Round((Get-Item "$p\session.json").Length / 1KB) # une session saine pese quelques Ko
session.json : soit la restauration de session est désactivée, soit le fichier a déjà été retiré. Ce n'est donc pas la cause, continuer en phase 05.Fermer l'application, puis retirer la session
Quand : dès que la phase 03 a dépassé la dizaine d'onglets. C'est la correction.
Fermer Thunderbird pour de bon
Un processus resté en mémoire verrouille le profil par le fichier parent.lock et fait échouer la suite en silence : le déplacement paraît accepté, et Thunderbird réécrit la session en se fermant. Vérifier que plus rien ne tourne, sans se contenter de la fenêtre disparue.
Get-Process thunderbird -ErrorAction SilentlyContinue | Stop-Process -Force
Get-Process thunderbird -ErrorAction SilentlyContinue # ne doit plus rien renvoyer
Sauvegarder puis déplacer le fichier de session
On déplace, on ne supprime pas. Thunderbird recrée une session vierge au lancement suivant, et la sauvegarde permet de revenir en arrière si l'utilisateur réclame ses onglets. Le fichier .backup part avec : laissé sur place, il peut être repris et ramener la pile d'onglets, donc le gel.
$bk = "$env:USERPROFILE\Desktop\tb-sauvegarde"
New-Item -ItemType Directory -Force $bk | Out-Null
Move-Item "$p\session.json" $bk -Force -ErrorAction SilentlyContinue
Move-Item "$p\session.json.backup" $bk -Force -ErrorAction SilentlyContinue
Get-ChildItem $bk # trace de ce qui a ete retire
Relancer Thunderbird. Dans la très grande majorité des cas la procédure s'arrête ici : passer directement à la vérification, et ne rien reconstruire tant que le gel n'est pas revenu.
Reconstruire les index, et eux seuls
Quand : uniquement si le gel revient avec une session vide.
L'index de recherche global
Ce fichier est un index, pas un stockage de courrier : il sert la recherche globale et la vue par conversation. Thunderbird le régénère en tâche de fond, ce qui fait chauffer le processeur pendant quelques dizaines de minutes sur une grosse boîte. Prévenir l'utilisateur, et ne pas lancer l'opération juste avant de rendre le poste.
Move-Item "$p\global-messages-db.sqlite" "$bk\global-messages-db.sqlite.old" -Force
L'index d'un dossier précis
Si le gel se produit toujours à l'ouverture du même dossier, c'est son index local qui est en cause et non l'index global. Le réparer depuis l'application et non depuis l'explorateur : clic droit sur le dossier, Propriétés, onglet Général, Réparer le dossier. Thunderbird reconstruit le fichier .msf correspondant à partir du serveur.
Isoler les modules, puis le profil
Quand : en dernier recours, ou d'emblée si le gel a suivi une mise à jour.
Le mode sans échec désactive les modules complémentaires et l'accélération graphique, sans rien modifier au profil. C'est un essai réversible : il ne corrige rien, il désigne.
"C:\Program Files\Mozilla Thunderbird\thunderbird.exe" -safe-mode
"C:\Program Files\Mozilla Thunderbird\thunderbird.exe" -P # gestionnaire de profils
- Le gel disparaît en mode sans échec : réactiver les modules un par un, en relançant entre chaque. Le fautif est presque toujours un module resté sur la version précédente.
- Le gel persiste : créer un profil de test avec
-P. Un profil neuf qui fonctionne désigne le profil d'origine ; un profil neuf qui gèle désigne l'installation, et c'est là seulement qu'une réinstallation se justifie. - Le profil de test se crée à côté de l'existant, qui n'est ni modifié ni supprimé. Ne jamais cocher la suppression d'un profil dans ce gestionnaire : c'est le seul écran de Thunderbird qui efface du courrier.
Vérification avant de rendre le poste
Quand : après le relancement, cinq minutes de fonctionnement plus tard.
Ne pas se contenter de voir la fenêtre s'ouvrir : un gel se produit justement après l'affichage. Laisser tourner cinq minutes, puis contrôler les deux indicateurs.
Get-Process thunderbird | Where-Object MainWindowTitle |
Select-Object Responding, @{n='RAM_Mo'; e={[math]::Round($_.WorkingSet64/1MB)}}, MainWindowTitle
Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='Application Hang'; StartTime=(Get-Date).AddMinutes(-10)} -ErrorAction SilentlyContinue |
Where-Object { $_.Message -match 'thunderbird' }
Puis valider les deux chemins, parce qu'ils sont indépendants : envoyer un message de test vers une adresse externe, et relever un dossier pour contrôler la réception. Une réception qui marche ne prouve rien sur l'envoi.
Responding reste à True. Le dire à l'utilisateur, sinon il rappelle le soir même.Entretien du profil
Le gel de session se produit d'autant plus facilement que le profil est lourd. Ces valeurs se relèvent en une commande, à chaque intervention sur le poste.
$all = Get-ChildItem $p -Recurse -File
'Profil : {0:N2} Go' -f ((($all | Measure-Object Length -Sum).Sum) / 1GB)
$all | Sort-Object Length -Descending |
Select-Object -First 6 @{n='Mo'; e={[math]::Round($_.Length/1MB, 1)}}, FullName
Get-PSDrive C | Select-Object @{n='Libre_Go'; e={[math]::Round($_.Free/1GB, 1)}}
- Vider les corbeilles, puis clic droit sur chaque dossier de plus de 300 Mo et Compacter. Le compactage écrit un fichier temporaire de la taille du dossier : vérifier l'espace libre avant de le lancer, sinon il échoue à mi-parcours.
- Fermer les onglets de messages avant de quitter l'application. C'est la consigne à donner à l'utilisateur, et c'est elle qui évite la récidive. Une seule phrase, dite au moment de rendre le poste.
- Sur un profil vraiment lourd, descendre les vieilles archives en dossiers locaux plutôt que de les garder synchronisées. Ces dossiers n'existent alors plus que sur le poste : ils entrent dans la sauvegarde du client, ou ils n'y sont pas.
- Régler le courrier conservé hors connexion sur quelques mois au lieu de la boîte entière, sur un poste dont le disque est juste.
Relevé d'un poste traité le 12 septembre 2026
Les valeurs qui ont conduit au diagnostic, pour donner des ordres de grandeur.
| Mesure | Relevé | Lecture |
|---|---|---|
| Taille du profil | 1,68 Go | Lourd sans être anormal pour deux comptes. |
| Boîte de réception | 629 Mo | Au delà de 300 Mo : candidate au compactage. |
| Corbeille | 277 Mo | Jamais vidée, donc jamais compactée. |
| Index de recherche global | 141 Mo | Proportionné, aucune raison de le reconstruire. |
| Onglets restaurés | 31 | la cause pour un attendu de 1 à 3. |
Espace libre sur C: | 22,6 Go | Suffisant pour compacter les gros dossiers. |
Sur ce poste, la session contenait vingt-huit onglets de messages répartis sur deux comptes, et un onglet de visionneuse qui rechargeait un PDF directement depuis le serveur. Le seul retrait du fichier de session a suffi, sans rien reconstruire, sans réinstaller, et sans toucher au courrier.
Les pièges et leurs parades
Chaque ligne est ancrable : le lien de la ligne pointe directement dessus.
| Ce que montre le contrôle | Cause réelle | Parade | Gravité |
|---|---|---|---|
| Le gel revient après une réinstallation complète | La réinstallation remplace le programme, pas le profil, et la session fautive est dans le profil | Traiter le profil (phase 03). Réinstaller ne se justifie qu'après un profil de test qui gèle aussi. | piège |
| Le déplacement de session n'a aucun effet | Plusieurs profils sur le poste, la manipulation a porté sur un profil abandonné | profiles.ini fait foi (phase 00), jamais le dossier le plus gros ni le plus récent. | bloquant |
| Le fichier de session est revenu tout seul | Un processus Thunderbird tournait encore et a réécrit la session en se fermant | Vérifier par Get-Process que plus rien ne tourne avant de déplacer (phase 04). | piège |
| Le gel revient au deuxième lancement | session.json.backup laissé sur place, puis repris | Déplacer les deux fichiers de session dans la sauvegarde. | piège |
Aucun Application Hang, mais des Application Error | C'est un plantage et non un gel : la session n'y est pour rien | Mode sans échec puis modules (phase 06). | piège |
| La sonde IMAP répond en plusieurs secondes | Réseau, pare-feu du poste, antivirus qui intercepte le TLS, ou hébergeur en peine | Traiter la connexion. Ne rien modifier dans le profil tant que le serveur traîne. | bloquant |
| Index global reconstruit alors que la session comptait trente onglets | Correction prise dans le désordre : la cause était en amont | Suivre l'ordre des phases. L'index ne se reconstruit qu'avec une session vide. | piège |
| Moins de 10 % libres sur le disque | Le compactage écrit un temporaire de la taille du dossier, et la synchronisation échoue sans message clair | Libérer de l'espace avant toute manipulation du profil. | bloquant |
| Gel à l'ouverture d'un message précis | Message malformé, ou pièce jointe très lourde rechargée depuis le serveur | Supprimer ou déplacer le message depuis le webmail, puis relancer le poste. | piège |
| Gel apparu juste après une mise à jour | Module resté sur la version précédente, ou accélération graphique sur un pilote ancien | Mode sans échec, puis réactivation module par module (phase 06). | piège |
| Des messages manquent après une « réparation » | Un dossier local ou un compte POP n'a pas de copie serveur à relire | Réparer depuis l'application, ne jamais supprimer un fichier de courrier local. | données |
| Tout le courrier a disparu après l'intervention | Profil supprimé dans le gestionnaire -P, qui efface le dossier avec les messages | Créer un profil de test à côté, ne jamais cocher la suppression. | bloquant |
| Poste lent juste après l'intervention | Réindexation en tâche de fond, attendue et temporaire | Le dire à l'utilisateur. Responding = True distingue la lenteur du gel. | à annoncer |
| Le gel revient quelques semaines plus tard | L'habitude d'empiler les onglets a repris, la session se recharge | Consigne de fermeture des onglets, et compactage des gros dossiers. | piège |
Repères dans le profil
- Profils
%APPDATA%\Thunderbird\profiles.ini, la liste et le profil par défaut.- Profil
%APPDATA%\Thunderbird\Profiles\<id>.default-esr\, la valeur de$p.- Session
session.jsonetsession.json.backup, les onglets restaurés. Aucun message.- Index global
global-messages-db.sqlite, l'index de recherche. Reconstruit seul.- Index dossier
*.msf, à côté de chaque fichier de courrier. Reconstruit depuis l'application.- Comptes IMAP
ImapMail\<serveur>\, le cache local des dossiers du serveur.- Dossiers locaux
Mail\Local Folders\, du courrier qui n'existe que sur ce poste.- Réglages
prefs.js, les comptes et les préférences. Ne se modifie pas application ouverte.- Verrou
parent.lock, présent tant qu'une instance tourne.- Programme
C:\Program Files\Mozilla Thunderbird\thunderbird.exe.
ImapMail conserve le nom d'hôte d'origine du compte, parfois des années après un changement de serveur. Un sous-dossier au nom d'un ancien hébergeur n'est donc pas un résidu : c'est bien le cache du compte en service. Vérifier la correspondance dans prefs.js, ligne mail.server.serverN.directory, avant de toucher à quoi que ce soit.Je peux la jouer pour vous
Cette procédure est publiée telle qu'elle est appliquée en intervention réelle. Si vous préférez la déléguer, ou si votre cas sort du cadre décrit ici, écrivez-moi : je reprends la migration de bout en bout, boîtes et postes compris.
Une migration ou une reprise technique à faire ?
Décrivez votre situation, je vous dis ce qui est faisable, en combien de temps et à quel prix.