Mails supprimés suite à réparation

Vous cherchez une alternative viable et sécurisée pour votre courrier ? Une conjuration s'est abattue sur vous et vous ne réussissez pas à trouver réponse satisfaisante à propos de Mozilla Thunderbird ? Cliquez donc par là…

Modérateur : J2m06

le_nain_jaune
Arias
Messages : 4
Inscription : 20 août 2020, 18:46

Mails supprimés suite à réparation

Message par le_nain_jaune »

Salut à tous c'est mon 1er post ici :D

J'utilise TB 60.6.1 (64 bits) sous Linux Ubuntu 16.04 (je sais, ça date un peu :) )

Je ne suis PAS content :( , car je viens de perdre beaucoup de mails depuis le dossier "Courrier entrant" (INBOX) suite à une opération de (soit disant) réparation (fonction "Réparer le dossier"). Il ne reste plus qu'un unique mail. Ce compte est synchronisé en IMAP chez Orange et depuis leur webmail j'ai la confirmation que les mails n'existent plus. Sur mon disque, le fichier éponyme <tb_profil>/ImapMail/imap.orange-1.fr/INBOX ne contient plus que l'unique mail. De plus, je n'ai PAS de sauvegarde de ce fichier.

J'ai tenté de reconstruire la base de donnée, ça a abouti mais ça n'a rien changé (curieusement le fichier global-messages-db.sqlite est passé de 166.3Mio à 122Mio)

J'ai constaté un symptôme étrange qui indiquerait que le problème vient de mon profil TB (voir [1] si vous êtes tenté).

Avant d'en arriver là, je faisais du tri et je déplaçais des mails d'un dossier à un autre. Comme je ne trouvais plus un mail que je venais de consulter quelques heures auparavant (la recherche ne donnait rien), je me suis dit qu'une réparation règlerait le problème. Et effectivement le mail est réapparu ... et quelques temps après, j'ai constaté avec horreur qu'il ne restait qu'un unique mail dans INBOX !

Pourquoi j'ai ce problème, comment puis-je tracer ce qui s'est passé (historique, mode debug ou autre) et empêcher d'avoir le même problème ultérieurement ?

Y a t-il une infime chance que ces mails existent toujours quelque part ?
(je veux dire à part demander à Orange de récupérer leurs propres sauvegardes de nos mails sur leurs serveurs)

Ça fait au moins 15 ans que j'utilise TB et je n'ai jamais perdu de données, je suis un peu déçu de TB :shock:

Si quelqu'un peut me faire profiter de ses connaissances, je suis toute ouïe...
A bientôt,
lnj




[1] En m'envoyant des mails sur ce compte depuis une autre adresse, le mail arrive bien. Si je fais une réparation du dossier INBOX, les mails disparaissent automatiquement (ils ne sont ni dans la corbeille, ni ailleurs) et sur le webmail Orange ils apparaissent barrés (?). J'ai alors testé de créer un nouveau profil TB tout neuf avec uniquement mon compte Orange pour voir si le problème était lié à l'ancien profil et lui ai envoyé quelques nouveaux mails de test. Et là, quand j'ai lancé une réparation, les mails n'ont pas disparus. Par acquis de conscience, j'ai répété la réparation, mais les mails restaient. J'ai alors chargé l'ancien profil et ai tenté une réparation. Les mails étaient là et comme ce n'était pas ce à quoi je m'attendais, j'ai recommencé une réparation. Les mails ont finalement ... disparus (sur le webmail ils apparaissent barrés et disparaissent automatiquement au bout de quelques minutes). Ah Ah :x
Avatar de l’utilisateur
Cucurbitacé
Animal mythique
Messages : 5618
Inscription : 22 juil. 2012, 05:27

Re: Mails supprimés suite à réparation

Message par Cucurbitacé »

Bonjour le_nain_jaune,

C’est le problème de l’Imap, répercuter systématiquement ce qui a été fait à un endroit.

L’administrateur de ce forum a fait un abécédaire d’aide tout en image que vous pouvez utiliser, tentez de voir :
> Restaurer facilement les messages effacés d'une "boîte"/dossier de TB < lien hypertexte.

Bien à vous.
le_nain_jaune
Arias
Messages : 4
Inscription : 20 août 2020, 18:46

Re: Mails supprimés suite à réparation

Message par le_nain_jaune »

Merci beaucoup Cucurbitacé :)

Je jette un oeil à la FAQ et je fais un retour ! Peut être y trouverais je mon bonheur...

A+
le_nain_jaune
Arias
Messages : 4
Inscription : 20 août 2020, 18:46

Re: Mails supprimés suite à réparation

Message par le_nain_jaune »

Donc j'ai jeté un oeil...

C'est très intéressant, je ne savais pas que les mails ne sont pas "réellement" supprimés de leurs fichiers et je comprends mieux le rôle du compactage (d'ailleurs les dev de TB devraient peut être à l'avenir choisir un terme plus explicite genre "nettoyage", parce que là c'est ambigu).

Méthode 1 : le module "Recover Deleted Messages.xpi" n'a rien trouvé (dommage). Au passage, pour ceux qui voudraient installer ce module qui n'est plus maintenu, par sécurité les versions récentes de TB interdisant de telles installations en obligeant une compatibilité "stricte", il faut ruser. J'ai trouvé cette solution (Anglais). En substance, il faut ouvrir l'éditeur de configuration et passer la préférence "extensions.strictCompatibility" à false (true par défaut) et ensuite seulement on peut installer le module. Enfin, je conseille de désinstaller le module une fois les opérations réalisées et de remettre la préférence à true, on ne sait jamais...

Méthode 2 : je ne trouve aucun mail
Au début du message recherchez la ligne X-Mozilla-Status: 0009 (ou 0408 ou 0409!!)
Sous Linux quand je fais :

Code : Tout sélectionner

grep -Eir "^X-Mozilla-Status: (0009|0408|0409)" "<tb_profile>/ImapMail/imap.orange.fr"
=> Il ne trouve rien

Étonné qu'il n'en trouve pas un seul, j'ai vérifié s'il y avait autre chose que 0001 :

Code : Tout sélectionner

grep -Eir "^X-Mozilla-Status: " "<tb_profile>/ImapMail/imap.orange.fr" |grep -v 0001
=> idem, donc tous mes fichiers mails sont nettoyés (je n'ai pourtant pas fait de compactage depuis longtemps)

=> je suis étonné du résultat du coup

Méthode 3 : euh non :roll: ... j'ai pas envie de payer pour une application qui ne fera que confirmer ce que j'ai déjà constaté....

---

Enfin, j'ai envoyé un peu plus tôt un mail à Orange en utilisant le formulaire de contact (https://www.orange.ma/content/action) pour leur demander gentiment, s'ils pouvaient me remettre les mails à disposition. J'ai vu par ailleurs que certains ont eu le même genre de symptômes alors que c'était manifestement de la responsabilité d'Orange (ex : celui là). Peut être une piste ...

[edit]Autant pour moi, le formulaire de contact n'a pas l'air de fonctionner quand on n'a pas de contrat avec Orange. Ni message de succès ni de mail d'accusé de réception, on reste sur la même page comme si on avait fait une erreur avant de valider le captcha. Par le passé, j'étais abonné chez Wanadoo en payant "à l'utilisation" et la somme astronomique que je leur ai donné (>50F par nuit de surf dans mes souvenir) a justifié que je conserve mon compte mail chez eux. J'ai pourtant coché la case pour préciser que je ne suis pas client Orange. Bref ça sent pas bon...[/edit]

[edit]Du coup j'ai utilisé une autre adresse (je la partagerais si ça aboutit) pour leur transmettre ma demande. Je n'ai pas encore reçu d'AR et je suis pas sûr qu'il aboutisse si je l'ai adressé au mauvais service et qu'ils ne veulent pas relayer[/edit]
Avatar de l’utilisateur
Jean-Claude
Animal mythique
Messages : 8385
Inscription : 02 avr. 2006, 03:24

Re: Mails supprimés suite à réparation

Message par Jean-Claude »

le_nain_jaune a écrit : 23 août 2020, 23:53
=> idem, donc tous mes fichiers mails sont nettoyés (je n'ai pourtant pas fait de compactage depuis longtemps)

=> je suis étonné du résultat du coup
Bonjour,

Dans les paramètres de ton compte IMAP, as-tu demandé de "nettoyer le dossier courrier entrant en quittant" ? Cela équivaut à un compactage.
C'est expliqué ici http://kb.mozillazine.org/Deleting_mess ... P_accounts
http://kb.mozillazine.org/Deleting_messages_in_IMAP_accounts a écrit : Tools -> account settings -> Server Settings -> Clean up ("Expunge") Inbox on Exit will compact the Inbox folder when you exit Thunderbird.
Concernant la base de données de la recherche globale, elle ne sert qu'à la recherche globale, et ne permet pas de reconstituer les messages. Elle ne contient que les index des mails, et une portion limitée de leur texte lisible, utiles à la recherche.
Par contre, tu pourrais utiliser la recherche globale, pour vérifier si tes mails disparus sont dans d'autres dossiers. Pour utiliser la recherche globale, voir https://support.mozilla.org/fr/kb/recherche-globale. Il te faudra malheureusement te souvenir du contenu significatif de certains de ces mails pour lancer une recherche.

Concernant la fonction de réparation.
Sauf erreur de ma part, elle répare l'index à partir du contenu du fichier mails. Cela revient à supprimer le fichier index .msf dans le profil qui sera reconstitué automatiquement au redémarrage de Thunderbird.
Mais je n'ai trouvé aucune description détaillée sur cette fonction sur le site de Mozillazine, qui est une référence.
En IMAP, il faut tenir compte de certaines particularités liées à ce protocole :
- les mails restent sur le serveur, et normalement seuls les index sont téléchargés en local. Les mails, au complet, ne sont téléchargés que temporairement, et au cas par cas, lors de la consultation.
- dans Thunderbird, il est possible de garder une copie des mails au complet sur le PC, en activant l'option dans les paramètres des comptes, à la rubrique " synchronisation et espace disque". Cela grossit l'espace disque occupé et n'a d'intérêt que pour la consultation des mails en étant hors ligne. Cela n'affecte pas la synchronisation IMAP.
- "réparer le dossier" en IMAP n'e devrait avoir de sens que si tu conserves les mails sur ton PC, pour une consultation hors ligne, puisque cette fonction de réparation vise le fichier index, en se basant sur le fichier des mails. Là je m'interroge moi-même sur le conflit possible entre la synchronisation IMAP qui rafraîchit l'index à partir des mails sur le serveur, et la fonction "réparer le dossier" qui "devrait" réparer l'index à partir du fichier des mails local.

Une cause possible de tes problèmes, serait que ce fichier des mails local est lui-même corrompu.
Une solution, à tester, serait de décocher l'option "conserver les messages de tous les dossiers de ce compte sur cet ordinateur". Ensuite fermer Thunderbird et supprimer manuellement avec l'explorateur des fichiers, les fichiers inbox et inbox.msf dans le répertoire ImapMail concerné.
Redémarre ensuite Thunderbird. Le fichier des mails, inbox, ne sera recréé à neuf que si tu réactives l'option de conserver les mails sur le PC ( mais ce n'est pas une option nécessaire); et le fichier index, inbox.msf, sera recréé automatiquement par la synchronisation IMAP.
Refais ensuite tes tests de "réparation" pour vérifier si ton dossier est de nouveau OK.

A+
le_nain_jaune
Arias
Messages : 4
Inscription : 20 août 2020, 18:46

Re: Mails supprimés suite à réparation

Message par le_nain_jaune »

Merci Jean-Claude :) pour ce mail très détaillé et aussi pour m'avoir un peu démystifier le fonctionnement de TB et du protocole IMAP.
Dans les paramètres de ton compte IMAP, as-tu demandé de "nettoyer le dossier courrier entrant en quittant" ? Cela équivaut à un compactage.
C'est expliqué ici http://kb.mozillazine.org/Deleting_mess ... P_accounts
Non la case n'est pas cochée, ni vider la corbeille d'ailleurs
Par contre, tu pourrais utiliser la recherche globale, pour vérifier si tes mails disparus sont dans d'autres dossiers. Pour utiliser la recherche globale, voir https://support.mozilla.org/fr/kb/recherche-globale. Il te faudra malheureusement te souvenir du contenu significatif de certains de ces mails pour lancer une recherche.
C'est la première chose que j'ai testé depuis l'outil de recherche de TB en scannant chaque dossier/sous-dossier de chaque compte mail.
[edit]Je viens de me rendre compte d'une erreur en me relisant. Non, je n'avais pas fait de recherche globale. J'ai juste utilisé le filtre rapide (que je trouve plus pratique et ergonomique) dans tous les dossiers[/edit]

J'ai fait la même chose en recherchant un contenu de fichier par l'OS depuis un terminal sous Linux (copier tel quel, adapter <adresse_mail_connue> et <profil_tb>, copier à nouveau, coller dans un terminal et exécuter) :

Code : Tout sélectionner

grep -ir <adresse_mail_connue> <profil_tb> |awk -F: '{ print $1 }' |sort -u
Cette commande liste tous les fichiers qui contiennent une adresse mail connue.
Pour mon cas, je n'ai rien vu d'anormal (genre un déplacement non désiré) ; tout semble à sa place...
Concernant la base de données de la recherche globale, elle ne sert qu'à la recherche globale, et ne permet pas de reconstituer les messages. Elle ne contient que les index des mails, et une portion limitée de leur texte lisible, utiles à la recherche.
Par contre, tu pourrais utiliser la recherche globale, pour vérifier si tes mails disparus sont dans d'autres dossiers. Pour utiliser la recherche globale, voir https://support.mozilla.org/fr/kb/recherche-globale. Il te faudra malheureusement te souvenir du contenu significatif de certains de ces mails pour lancer une recherche
Un truc de fou :o ! En cherchant par son adresse mail, un mail disparu qu'un copain m'a envoyé, je vois effectivement des portions de ce mail en clair mais quand je tente de l'ouvrir, il n'apparait pas dans la discussion. J'ai tenté une autre recherche "Gloda" sur plusieurs mots contenus dans ce mail. Il m'a affiché une autre portion du texte du même mail...
J'en conclue qu'il doit bien être quelque part en entier, non ?
=> ah l'espoir renaît :)
Concernant la fonction de réparation.
Sauf erreur de ma part, elle répare l'index à partir du contenu du fichier mails. Cela revient à supprimer le fichier index .msf dans le profil qui sera reconstitué automatiquement au redémarrage de Thunderbird.
Mais je n'ai trouvé aucune description détaillée sur cette fonction sur le site de Mozillazine, qui est une référence
Donc rien à craindre ici à priori, d'après ce que tu dis...
- dans Thunderbird, il est possible de garder une copie des mails au complet sur le PC, en activant l'option dans les paramètres des comptes, à la rubrique " synchronisation et espace disque". Cela grossit l'espace disque occupé et n'a d'intérêt que pour la consultation des mails en étant hors ligne. Cela n'affecte pas la synchronisation IMAP.
- "réparer le dossier" en IMAP n'e devrait avoir de sens que si tu conserves les mails sur ton PC, pour une consultation hors ligne, puisque cette fonction de réparation vise le fichier index, en se basant sur le fichier des mails.
Donc, si je comprends bien, une fois les mails téléchargés ils sont en complet dans d'autres fichiers que INBOX et cie. Si il y a un problème IMAP ou une opération côté serveur (genre un admin qui supprime des mails par erreur) ça ne se répercutera pas sur les mails déjà téléchargés. C'est bien ça ?

En effet dans l'absolu, je souhaiterais pouvoir consulter hors ligne (en cas de panne réseau par exemple), même si ça m'oblige à mettre en place une gestion "interne" pour alléger l'espace disque occupé.
Là je m'interroge moi-même sur le conflit possible entre la synchronisation IMAP qui rafraîchit l'index à partir des mails sur le serveur, et la fonction "réparer le dossier" qui "devrait" réparer l'index à partir du fichier des mails local.
Tu veux dire que la panne pourrait venir de la réparation, c'est ça ? Dans ce cas, comment l'éviter une prochaine fois ?
Une cause possible de tes problèmes, serait que ce fichier des mails local est lui-même corrompu.
Une solution, à tester, serait de décocher l'option "conserver les messages de tous les dossiers de ce compte sur cet ordinateur". Ensuite fermer Thunderbird et supprimer manuellement avec l'explorateur des fichiers, les fichiers inbox et inbox.msf dans le répertoire ImapMail concerné.
Redémarre ensuite Thunderbird. Le fichier des mails, inbox, ne sera recréé à neuf que si tu réactives l'option de conserver les mails sur le PC ( mais ce n'est pas une option nécessaire); et le fichier index, inbox.msf, sera recréé automatiquement par la synchronisation IMAP.
Refais ensuite tes tests de "réparation" pour vérifier si ton dossier est de nouveau OK.
J'ai testé, malheureusement ça ne donne rien de plus et j'ai perdu les mails qui étaient dans INBOX puisque tu m'as demandé de supprimer inbox et inbox.msf. Fort heureusement j'ai une copie de sauvegarde et pour être franc, je ne supprime jamais, je renomme :mrgreen:
Aussi avant de décocher "conserver les messages de tous les dossiers de ce compte sur cet ordinateur" dans le menu "Synchronisation et espace disque" j'ai remarqué depuis "Avancé..." que rien n'était coché pour le compte où j'ai perdu des mails (après avoir fait ce que tu proposes, tous les dossiers sont cochés). Je ne sais pas si cette information est utile...

Sinon ... je viens de faire une découverte sympatoche :D

Tes explications m'ont bien inspiré ... j'ai eu une intuition.
Maintenant que j'ai des bribes de mails, j'ai tenté de rechercher ces bribes dans les fichiers directement depuis l'OS.

Si je fais (copier tel quel, adapter <bribe_texte_connue> et <profil_tb>, copier à nouveau, coller dans un terminal et exécuter) :

Code : Tout sélectionner

grep -ir <bribe_texte_connue> <profil_tb> |awk -F: '{ print $1 }' |sort -u
=> ça me sort UN SEUL fichier : global-messages-db.sqlite
Donc le mail complet serait dedans ah ah :D

Je savais déjà que FF et TB utilisaient le SGBD léger Sqlite mais je n'ai jamais creusé pour voir le contenu ou son organisation.

Si je fais (copier tel quel, adapter <bribe_texte_connue> et <profil_tb>, copier à nouveau, coller dans un terminal et exécuter) :

Code : Tout sélectionner

bribe="<bribe_texte_connue>" ; sqlite3 "<profil_tb>/global-messages-db.sqlite" .dump \
 |awk 'BEGIN { RS = ");\n" ; ORS = ");\n"
 } /^INSERT INTO "messagesText_content" VALUES\(.+$/ && /'"$bribe"'/ { print ">" $0 }'
=> je retrouve bien le mail complet :D (explications en [1])

=> on peut toujours récupérer ses mails, par contre il faut que je trouve s'il y a une solution pour savoir dans quel dossier ils sont rattachés, auquel cas je saurais quels mails ont été supprimés de TB.

La suite :D

Si je fais (copier tel quel, adapter <profil_tb>, copier à nouveau, coller dans un terminal et exécuter) :

Code : Tout sélectionner

sqlite3 <profil_tb>/global-messages-db.sqlite 'SELECT folderURI FROM folderLocations
 WHERE folderURI LIKE "imap://%" GROUP BY folderURI ORDER BY folderURI'
=> donne la liste des dossiers IMAP que TB gère (explications en [2]

Si je fais (copier tel quel, adapter oldest_date, <mail_expediteur>, <dossier_imap> listé avant et <profil_tb>, copier à nouveau, coller dans un terminal et exécuter) :

Code : Tout sélectionner

oldest_date="2020-08-01" ; mail="<mail_expediteur>" ; imap_folder="<dossier_imap>" ; \
sqlite3 <profil_tb>/global-messages-db.sqlite \
'SELECT DATETIME( SUBSTR( m.date, 1, 10 ), "unixepoch", "localtime" ) AS dt, fl.name, mtc.c1subject, mtc.c0body
 FROM messagesText_content AS mtc INNER JOIN messages AS m ON mtc.docid = m.id
 AND ( m.date >= STRFTIME( "%s", "'$oldest_date' 00:00:00" ) * 1000000 ) AND mtc.c4recipients LIKE "%'$mail'"
 INNER JOIN folderLocations AS fl ON fl.folderURI = "'$imap_folder'"'
=> je récupère tous les mails reçus depuis le 01/08/2020 => tout est OK, comme je suis trop content :D :D :D (explications en [3])

=> au final je peux accéder au contenu des mails (je n'ai pas essayé les PJs) mais je n'arrive pas à réparer TB pour autant...

J'ai passé presque une journée sur le problème (j'en ai même oublié de manger :lol: ) mais je trouve que ça valait le coup.

Le problème est partiellement résolu !



------

[1]
Explications : bribe définit le texte à rechercher (pour raison de compatibilité, ne mettre que les caractères alpha-numérique), sqlite ... .dump (ne pas oublier le "." devant dump) extrait au format SQL la base de données en clair et lisible, awk ... RS = ... ORS = ... redéfinit les séparateurs d'enregistrements en entrée et en sortie car les INSERT peuvent être sur plusieurs lignes et se terminent par ");" avant un saut de ligne "\n", /^INSERT ..../ si la ligne concerne un "INSERT" dans la table "messagesText_content" ET qu'il contient la bribe recherchée ALORS on affiche l'enregistrement (avec le contenu du mail) tel qu'il est stocké dans la base de données.

[2]
SELECT folderURI FROM folderLocations affiche les dossiers, WHERE ... LIKE "imap ... ne conserve que les dossiers IMAP, GROUP BY ... ORDER BY ... on élimine les doublons (je n'ai pas compris pourquoi il y en avait) et on trie par ordre alphabétique

[3]
Explications (désolé c'est long) : oldest_date est la date de consigne depuis laquelle on cherche les mails au format (AAAA-MM-JJ année-mois-jour), <mail_expediteur< est l'adresse mail de l'expéditeur (la notre quoi), <dossier_imap> est le dossier dans lequel chercher (donné par la commande précédente ; il faut copier tel quel), SELECT ... est la requête qui permet de retrouver les mails, DATETIME( SUBSTR ... AS dt est la commande qui convertit la date des mails au format Unix timestamp dans un format compréhensible par nous :mrgreen:, c'est la date de réception du mail (nota : on multiplie par 1.000.000 car ... je n'ai pas compris la raison), fl.name, mtc.c1subject, mtc.c0body affichent pour chaque mail le dossier IMAP, le sujet et le contenu, FROM messagesText_content AS mtc INNER JOIN ... messages AS m ... INNER JOIN folderLocations met en relation le texte des mails, les mails et les dossiers IMAP, ON mtc.docid = m.id ... AND ... AND ... indique la condition de relation entre le contenu des messages et les messages (voir après), mtc.docid = m.id le contenu correspond au message, ( m.date >= STRFTIME( "%s", "'$oldest_date' 00:00:00" ) * 1000000 ) la date du message est postérieure à la date de consigne (voir plus haut pourquoi on multiplie par 1.000.000) en insèrant la variable $oldest_date (attention voir [4]), mtc.c4recipients LIKE "%'$mail'" cherche les mails de l'expéditeur voulu en insérant la variable $mail (attention voir [4]), INNER JOIN folderLocations AS fl ON fl.folderURI = "'$dossier_imap'" le dossier IMAP correspond à celui attendu en insérant la variable $dossier_imap (attention voir [4])

[4]
il y a plusieurs façon d'insérer le contenu d'une variable ; j'ai choisi celle qui consiste à insérer par l'extérieur de la commande et ça permet de l'insérer dans la commande AVANT exécution. Pour ce faire, vu que ma commande 'SELECT commence par un guillemet simple, on l'appelle généralement "QUOTE", je place aux endroits où je veux insérer, un QUOTE suivi de la variable et j'ajoute un QUOTE pour finir.
Schématiquement ici ça donne :
<QUOTE>code...<QUOTE>$variable<QUOTE>code ...<QUOTE> ainsi $variable est inséré dans le code sans complication
Nota : parfois la variable doit être contenue dans des doubles quote (ou guillemet double) appelés souvent DQUOTE
Schématiquement : <QUOTE>code...<DQUOTE><QUOTE>$variable<QUOTE><DQUOTE>code ...<QUOTE>
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 3 invités