The Daily Shaarli
Sur mon ordiphone sous GrapheneOS, j'utilise le logiciel SMS/MMS par défaut, Messaging, qui est un dérivé (fork) de l'application du même nom d'Android.
Il n'offre aucune fonctionnalité de suppression automatique des SMS et MMS plus vieux qu'une durée spécifiée. Voir. On ne peut effacer qu'une ou plusieurs conversation.
La base de données (mmssms.db) n'est pas accessible voire je ne la trouve pas, que ça soit avec adb pull ou adb shell cat ou adb shell ls : permission denied. Normal, je n'ai pas l'accès root volontairement. Il me faut donc utiliser l'API standard d'Android.
Dans la logithèque F-Droid, je n'ai trouvé aucune application pour supprimer automatiquement les vieux SMS / MMS, ni aucune application SMS / MMS de remplacement dotée d'une telle fonctionnalité (d'autant que je suis très frileux à l'idée de changer d'app, vie privée, tout ça). J'ai cherché « SMS », « MMS », « auto delete », « cleaner ». Évidemment, hors de question d'utiliser des logiciels non-libres, donc je n'ai pas cherché dans le Play store.
Il est peut-être possible de créer une tâche automatique (planifiée ou non) avec une appli d'automatisation, mais celle disponible sur F-Droid ne semble pas pouvoir faire ça, et j'ai un besoin très ponctuel (1 fois/an) qui ne justifie pas le recours à cette méthode.
Reste la méthode bourrine : exporter les SMS / MMS, faire le tri, effacer, importer l'issue du tri. Messaging n'a pas de fonctionnalité d'exportation / importation (la sauvegarde des messages se fait via SeedVault, mais elle est chiffrée).
SMS Import / Export (sms-ie) est disponible dans F-Droid. Elle est conseillée dans le forum GrapheneOS. L'exportation est au format JSON, ce qui permet des opérations automatiques, avec jq, par exemple (mon tutoriel jq).
L'horodatage des SMS est représenté au format timestamp Unix en millisecondes (13 chiffres) alors que celui des MMS l'est en secondes (10 chiffres). Il faut donc traiter séparément les SMS et les MMS, sinon effacements indésirés.
Pour discriminer les MMS, on peut se baser sur leurs attributs supplémentaires, comme « text_only », « msg_box », « __parts », etc., ou la valeur différente pour un attribut, comme « date_sent = 0 ». J'ai arbitrairement choisi « text_only ».
Étape 1 : on exporte les SMS et MMS avec sms-ie. On récupère l'archive zip sur un ordinateur GNU/Linux et on la décompresse.
Étape 2a : on transfère, dans un fichier, les MMS plus récents qu'une date choisie : jq -c 'select(has("text_only")) | select(.date | tonumber > <TIMESTAMP>)' messages.ndjson > tmp.json. La directive « -c » (compact) est obligatoire, sinon sms-ie échouera à importer le fichier que l'on prépare. Pour convertir la date choisie en timestamp Unix : date -d 'YYYY-MM-JJ HH:MM:SS' +%s. Ex. : 1er janvier 2025 à 0 h 0 m 0 s = 1735686000.
Étape 2b : on supprime les pièces jointes des MMS plus vieux que la date choisie : jq 'select(has("text_only")) | select(.date | tonumber < <TIMESTAMP>).__parts[]._data' messages.ndjson | grep -Po '(?<=/)PART_.+(?=")'| xargs -I {} rm -v data/{}.
Étape 3 : on transfert, dans le même fichier, les SMS plus récents qu'une date choisie : jq -c 'select(has("text_only") == false) | select(.date | tonumber > <TIMESTAMP>)' messages.ndjson >> tmp.json. Même commande pour convertir la date en timestamp Unix + ajouter trois zéros pour obtenir le bon format de timestamp.
Étape 4 : on recrée une archive zip en bonne forme : mv tmp.json messages.ndjson && 7z -tzip a messages_tries.zip data/ messages.ndjson.
Étape 5 : depuis sms-ie, on « efface les messages ». On retourne dans Messaging. On revient dans sms-ie. On importe l'archive qu'on a créé. Fin. (Oui, il faut revenir dans Messaging entre la suppression et l'importation, sinon les messages seront doublonnés.)
Limitation : dans toute conversation dans laquelle au moins un MMS a été échangé (peu importe le sens), Messaging verra deux participants : l'interlocuteur et soi-même. Si l'on veut répondre dans la conversation, il faut envoyer un MMS (au lieu d'un SMS) à l'interlocuteur et à soi-même. Sinon, recommencer une conversation. Quand un SMS arrive, cela créera une nouvelle conversation. L'importation produit cet effet-là même sans tri des messages.
Idée de durée de conservation : 1 an, très grand max. Messaging n'a pas de fonction de recherche et personne ne se réfère à un SMS vieux de plusieurs semaines. Ça laisse aussi le temps de réaliser une capture d'écran en cas de litige. Note que si tu fais le ménage une fois par an, le 1er janvier par ex., il faut supprimer tous les messages antérieurs à ce jour, sinon tu aurais une durée de conservation de deux ans (au 01/01/2026, si tu effaces < 01/01/2025 ‒ un an, alors au 31/12/2026, tu auras deux ans d'historique).
Voir ici pour une purge du journal des appels.
Sur mon ordiphone sous GrapheneOS, j'utilise le logiciel de téléphonie par défaut, Dialer, qui est un dérivé (fork) de celui d'Android.
Il n'offre aucune fonctionnalité de purge automatique de l'historique des appels téléphoniques, de suppression des entrées plus vieille qu'une durée spécifiée. On ne peut effacer qu'à la granularité d'une entrée ou de tout le journal. Je ne parle pas des enregistrements audio d'appels.
Notons que, sous Android (et donc GrapheneOS), seuls les 500 derniers appels sont conservés dans le journal.
La base de données (contacts2.db / calllog.db) n'est pas accessible voire je ne la trouve pas, que ça soit avec adb pull ou adb shell ls : permission denied. Normal, je n'ai pas l'accès root volontairement. Il me faut donc utiliser l'API standard d'Android.
Dans la logithèque F-Droid, je n'ai trouvé aucune application pour supprimer automatiquement les vieilles entrées du journal des appels. Logger permet de rechercher par plage de date, mais pas d'effacer. J'ai cherché « call log », « call management », « call history », « auto delete », « cleaner ». Plusieurs applications de téléphonie (= « dialer ») sont disponibles (Emerald Dialer, OpenContacts, etc.), mais aucune n'indique la fonctionnalité recherchée dans sa description (et, pour sûr, Emerald ne l'implémente pas, j'ai essayé). De toute façon, je suis extrêmement frileux à l'idée de remplacer ce logiciel (vie privée, tout ça). Évidemment, hors de question d'utiliser des logiciels non-libres, donc je n'ai pas cherché dans le Play store.
Il est peut-être possible de créer une tâche automatique (planifiée ou non) avec une appli d'automatisation, mais celle disponible sur F-Droid ne semble pas pouvoir faire ça, et j'ai un besoin très ponctuel (1 fois/an) qui ne justifie pas le recours à cette méthode.
Reste la méthode bourrine : exporter le journal, faire le tri, effacer l'historique, importer l'issue du tri. Dialer n'a pas de fonctionnalité d'exportation / importation (la sauvegarde de l'historique d'appels se fait via SeedVault, mais elle est chiffrée).
Les applis Logger et SMS Import / Export (sms-ie), toutes deux disponibles dans F-Droid permettent cela.
Je préfère sms-ie car je peux également l'utiliser pour effacer mes vieux SMS/MMS, car le format de l'exportation, JSON, est de ceux que je sais déjà traiter automatiquement (avec jg, par ex., cf. mon tutoriel jq) alors que Logger travaille en CSV que je ne sais pas spontanément traiter, et car elle est conseillée dans le forum GrapheneOS.
Étape 1 : on exporte le journal des appels avec sms-ie, et on récupère l'exportation JSON sur un ordinateur GNU/Linux.
Étape 2 : on transfère, dans un fichier, les entrées de l'historique d'appels plus récentes qu'une date choisie : jq -c '.[] | select(.date | tonumber > <TIMESTAMP>)' calls.json > call_tries.json. La directive « -c » (compact) est obligatoire, sinon sms-ie échouera à importer le fichier que l'on prépare. Pour convertir la date choisie en timestamp Unix : date -d 'YYYY-MM-JJ HH:MM:SS' +%s + ajouter trois zéros pour obtenir le bon format de timestamp. Ex. : 1er janvier 2025 à 0 h 0 m 0 s = 1735686000000.
Étape 3 : depuis Dialer, on efface l'historique des appels (menu, « Call history », menu, « Supprimer l'historique des appels »). Avec sms-ie, on importe le fichier JSON qu'on a généré. Fin.
Idée de durée de conservation : 1 an, grand max. Ça laisse le temps de faire une capture d'écran en cas de litige, de retrouver un numéro pas encore enregistré dans les contacts, etc. Note que si tu fais le ménage une fois par an, le 1er janvier par ex., il faut supprimer toutes les entrées antérieures à ce jour, sinon tu aurais une durée de conservation de deux ans (au 01/01/2026, si tu effaces < 01/01/2025 ‒ un an, alors au 31/12/2026, tu auras deux ans d'historique).
Comme client de messagerie (= MUA), j'utilise Thunderbird.
Dans les paramètres globaux d'un compte de messagerie (dans « Synchronisation et espace disque »), et dans les « Propriétés » de chaque dossier (onglet « Règles de conservation »), il est possible de définir la durée maximale de conservation d'un courriel.
Il n'y a pas d'héritage : la durée de conservation d'un dossier ne s'applique pas à ses sous-dossiers. (Même à la réception d'un courriel, même en redémarrant Thunderbird.)
Je doute du bon fonctionnement de ces paramètres. En effet, j'ai d'abord configuré une suppression après 5 ans sur un dossier. Rien ne s'est passé à l'application de cette configuration. Je me suis envoyé un email rangé automatiquement dans ce dossier par mon serveur emails (avec Sieve). Thunderbird a bien supprimé les courriels plus vieux que 5 ans. Uniquement en local, pas sur mon serveur de messagerie (source : un accès SSH et les commandes usuelles ls, find, etc.), il m'a fallu redémarrer Thunderbird pour que cela advienne.
Ensuite, j'ai configuré une suppression après 1 an sur le même dossier. Rien ne s'est passé à l'application de cette configuration. Ni en recevant un email directement rangé dans ce dossier par mon serveur. Ni en déplaçant un courriel existant dans ce dossier (même un fraîchement reçu), y compris via un filtre configuré dans Thunderbird, ni en redémarrant Thunderbird, ni en réparant le dossier (dans ses propriétés).
Bref, deux raisons de ne pas avoir confiance en ces paramètres. (Je n'ai pas essayé le paramètre global car je veux des durées de conservation différentes.)
De plus, je ne suis pas à l'aise avec une suppression automatisée au fil de l'eau, je préfère une suppression déclenchée manuellement afin d'éviter une suppression accidentelle d'un courriel important. (Raison pour laquelle je n'ai pas mis en place une suppression planifiée (= cron) côté serveur de messagerie.)
J'ai donc fait le boulot en cherchant les courriels par date et en les supprimant. Je l'ai fait dossier par dossier car je veux plusieurs durées de conservation en fonction du contenu des dossiers, mais ça aurait tout autant fonctionné avec une recherche globale.
Je suis passé de 5,2 Go / 7,4 Go (serveur / Thunderbird) à 1,3 Go / 2,8 Go, d'environ 211 000 courriels à environ 10 000. J'avais plus de 12 ans d'historique…
Quelques idées de durées de conservation :
Le délai de prescription en matière civile (= les sociétés auprès de qui t'es consommateur ou tes clients si t'es entrepreneur) est de 5 ans. 2 ou 5 ans (si fraude ou absence de déclaration) envers les organismes sociaux. 3 ou 6 ans (idem) envers le fisc. Ça ne signifie pas que les courriels sont pertinents pendant ces durées : les organismes sociaux envoient souvent des notifications vides qui renvoient vers un fichier PDF disponible sur le web ; c'est ce dernier qu'il faut garder, pas le courriel. Pareil : si t'as une garantie deux ans sur un bien acheté, garder la facture sur ton ordi est bien suffisant.
Objectifs de la démarche :
