J’ai un historique de 25 ans d’emails et j’y tiens. Il m’arrive encore régulièrement d’aller fouiller pour retrouver trace de contacts ou d’échanges d’il y a 10 ans. Je l’ai fait encore ce matin.
Je tiens donc à assurer la pérennité de tout ça. J’ai confiance en Google1 mais j’ai déjà lu les récits de personnes qui se sont vus clôturer leur compte sans préavis ni possibilité de récupération. Je ne suis pas non plus à l’abri de faire moi-même des bêtises dans mon compte.
J’ai déjà utilisé Getmail par le passé pour télécharger un à un tous mes emails en provenance de Google. Il n’a cependant pas été mis à jour pour Python3. Getmail6 semble avoir pris le relai et il a la bonne idée d’être disponible sous macos via homebrew.
POP3
Mon compte dépasse le demi-million d’emails archivés. La synchronisation IMAP semble prendre des années à balayer tous les emails pour savoir lesquels sont nouveaux depuis la dernière fois. C’est jouable si vous avez juste quelques dizaines de milliers d’emails. Au-delà il faut utiliser le bon vieux POP3.
- Activer POP3 dans les options de Gmail
- S’assurer de le configurer pour récupérer tous les emails et pas uniquement ceux qui arrivent à partir d’aujourd’hui.

Si vous aviez déjà utiliser POP3 par le passé, il faut lui demander de réactiver le téléchargement de tous les emails, y compris ceux qui ont déjà été téléchargés.
Si vous avez déjà un client email qui se connecte en POP3, passez-le en IMAP. Ils se feraient concurrence. Vous auriez une partie des emails d’un côté et une partie de l’autre.
Configuration
Ma configuration getmailrc ressemble à ça :
[retriever]
type = SimplePOP3SSLRetriever
server = pop.gmail.com
username = xxxx@xxxxx.xxx
password = xxxxxxxxxx
[destination]
type = Maildir
path = /xxxxxxx/maildir/
user = xxx
filemode = 0600
[options]
read_all = true
received = false
delivered_to = false
verbose = 0
message_log = /xxxxx/pop.log
L’utilisateur est l’adresse email complète. N’utilisez pas votre mot de passe Google et créez un mot de passe d’application dédié, ça vous permettra de le révoquer un jour. Pensez à protéger ce fichier de configuration parce que celui qui y aura accès aura aussi accès à votre compte Google.
Le paramètre received assure que Getmail récupère le message tel quel, sans ajouter d’entête.
Erreurs de synchronisation
Google envoie tous les emails par groupes de 200 à 1000 non téléchargés à chaque appel POP3. Si le paramètre read_all est à false, Getmail ne télécharge pas les emails qu’il a déjà vu.
Pour une raison ou une autre, ça peut partir en boucle si Getmail pense avoir déjà vu un email que Google pense pourtant ne pas être déjà téléchargé : L’email va être reproposé à chaque fois. Si ça fait ça sur plusieurs centaines d’emails, vous prenez le risque que vous restiez bloqué sur le même groupe d’emails indéfiniment à chaque appel.
Vérifiez bien que le read_all est à true. Si le problème persiste, une solution est de passer par le type BrokenUIDLPOP3SSLRetriever plutôt que SimplePOP3SSLRetriever. Getmail télécharge alors systématiquement les messages sans se préoccuper de ce qu’il a déjà lu ou non.
Quota
Gmail a des quota sur ses APIs. Pour initialiser mon demi-million d’emails j’ai lancé Getmail en boucle et je suis tombé sur des erreurs 403. Si vous devez comme moi initialiser plusieurs dizaines de Go, ça demande un peu de surveillance.
Le quota semble toutefois très très large. En rythme de croisière je compte probablement synchroniser 1 à 2 fois par jours mais on peut sans problèmes faire plusieurs synchronisation par heures si ça vous semble indispensable.
Maildir
Il y a deux formats, mbox et maildir. Mbox c’est un unique gros fichier, un peu comme une archive tar. Maildir c’est un répertoire avec un fichier par email, ce qui me semble plus adapté pour des sauvegardes avec de nouveaux emails tous les jours.
Initialiser un maildir c’est juste un répertoire qui contient un sous-répertoire tmp, un new, et un cur. Tous les emails envoyés par Getmail iront dans new.
Il reste que pour mon demi-million d’emails ça commence à faire beaucoup de fichiers dans un seul répertoire. J’ai fait un petit script qui parcourt l’intégralité des emails, lit la date2, et les répartit dans des maildir spécifiques par année. Ça facilitera aussi la sauvegarde et me permettra éventuellement de faire un zip pour les vieilles années.
Emails envoyés
Le problème du POP3 c’est que ça ne télécharge que les emails reçus, pas les emails envoyés. J’ai donc dû ajouter une seconde synchronisation IMAP sur le dossier des emails envoyés. Là j’ai dans les 30 000 emails. C’est long à parcourir mais encore jouable tant que je ne lance pas la récupération toutes les deux minutes.
J’ai donc deux fichiers getmailrc, un pop.getmailrc (emails reçus) et un imap.getmailrc (emails envoyés). Je dois donc manuellement spécifier les paramètres –rcfile= quand j’appelle Getmail. On peut spécifier plusieurs fois le paramètre, les synchronisations sont alors lancées l’une après l’autre.
[retriever]
type = SimpleIMAPSSLRetriever
server = imap.gmail.com
username = xxxx@xxxxx.xxxx
password = xxxxxx
mailboxes = ("[Gmail]/Sent Mail",)
[destination]
type = Maildir
path = /xxxxxx/maildir/
user = xxxx
filemode = 0600
[options]
read_all = false
received = false
delivered_to = false
verbose = 0
message_log = /xxxxxx/imap.log
J’envois ça vers le même dossier maildir, puis fais la même répartition par année.
Enregistrer en tâche planifiée
Sous Linux il suffit probablement de faire une entrée dans le cron.
Sous Macos, si je veux que la synchronisation s’exécute même quand je ne suis pas connecté, il faut enregistrer le script dans /Library/LaunchDaemons.
Comme le répertoire destination de mes sauvegarde est hors de mon disque principal, Macos impose aussi que le programme lancé ait la permission spéciale « full disk access ». Getmail n’est qu’un script Python et je n’ai pas voulu donner des droits larges à tout Python. J’ai dû faire un programme natif qui lance mon script Getmail et donner les droits sur le disque à ce script là.
Je ferai probablement un billet dédié à tout ça.
Entre temps j’ai presque 40 Go d’historique email à synchroniser depuis Google par batch de 200 à 1000 mails. Ça va me prendre un peu de temps.
- Oui, j’utilise Google. J’ai soupesé plein de fois les alternatives mais toutes auraient demandé un compromis significatif et je ne suis pas encore passé à l’action. Ça viendra. J’ai besoin de trouver le bon équilibre et de ne pas perdre la recherche dans le passé. ↩︎
- Je ferais un billet spécifique, ça s’est révélé bien moins évident que je ne l’imaginais naïvement. ↩︎
Laisser un commentaire