Sauvegarder son Gmail grâce à Linux

Par Maxime, le 16 juin 2010.

Comme beaucoup de gens autour de moi, je suis parano de la sauvegarde. Certains le sont de naissance, d’autres parce qu’ils ont perdu beaucoup de données un jour (DTC !)… J’ai vécu les deux, et même avec Gmail (compte piraté il y a quelques années).

Pour mes e-mails, j’ai pendant très longtemps utilisé gmail-backup, qui faisait tout ce qu’on lui demandait de faire en voyant son nom. Seulement Gmail a mis à jour ses serveurs IMAP il y a peu de temps, rendant inutilisable gmail-backup.

Les serveurs IMAP de Gmail possédaient un bug depuis leur lancement. En récupérant les e-mails via IMAP par la méthode traditionnelle (RFC822), les e-mails n’étaient pas marqués comme lus. Cependant la RFC précise qu’ils devraient l’être. Ce bug a été corrigé il y a quelques semaines, et j’ai eu le bonheur de voir mes nouveaux e-mails marqués comme lus du jour au lendemain :)

3a45.png

Le script n’étant pas open-source et la dernière version datant d’il y a environ un an, je pense qu’il est raisonnable de penser que le développement de gmail-backup est mort. J’ai donc dû trouver un remplaçant.

Ce remplaçant s’appelle getmail. Au premier abord, drôle de remplaçant, puisqu’il est connu pour utiliser la RFC822. Son créateur maintient cependant que c’est lui qui a raison et non Google dans cette histoire d’e-mails marqués comme lus. Qu’à cela ne tienne, contrairement à gmail-backup, getmail est open-source, il suffit de modifier la récupération des e-mails et le problème est résolu.

Voici donc une longue introduction pour un petit tutorial sur comment sauvegarder votre Gmail sous Linux.

Télécharger et modifier getmail

A la main

A vrai dire c’est assez simple. Téléchargez tout d’abord les sources de getmail. Il faut jeter ensuite un oeil dans getmailcore/_retrieverbases.py pour y faire une modification. Trouvez la ligne suivante :

return self._getmsgpartbyid(msgid, '(RFC822)')

C’est cette fameuse RFC822 qui nous fait chier et qui met les e-mails téléchargés comme lus automatiquement. Remplacez-la par une commande PEEK :

return self._getmsgpartbyid(msgid, '(BODY.PEEK[])')

Vous vivrez ainsi heureux.

Paresseux

Vous vivrez tout aussi heureux en prenant ma version déjà modifiée.

Installer getmail

L’installation se fait ensuite comme à peu près tous les logiciels Python, à savoir avec deux lignes de commande dans la racine des sources getmail :

python setup.py build
python setup.py install

Configurer getmail

Maintenant que getmail est modifié et installé, il faut créer le fichier de configuration qui va indiquer à getmail quoi prendre et où prendre. Commencez par créer un dossier .getmail dans votre répertoire utilisateur, ainsi qu’un répertoire gmail et son fichier mbox pour stocker la sauvegarde.

mkdir ~/.getmail
mkdir ~/gmail
touch ~/gmail/gmail-backup.mbox

Dans ce répertoire, créons un fichier de configuration, appelé au hasard getmail.gmail, qui contiendra les informations suivantes :

[retriever]
type = SimpleIMAPSSLRetriever
server = imap.gmail.com
username = /* Votre e-mail Gmail */
password = /* Votre mot de passe Gmail */
mailboxes = ("[Gmail]/All Mail",)

[destination]
type = Mboxrd
path = ~/gmail/gmail-backup.mbox

[options]
read_all = false
verbose = 2
message_log = ~/.getmail/gmail.log

Remplacez évidemment username et password (je le dis quand même, on ne sait jamais).

Sauvegarder !

L’utilisation de l’IMAP permet de tout télécharger en une fois lors de la première synchronisation. Avec du POP Gmail permet de ne récupérer que 500 e-mails à la fois environ.

Pour faire une première sauvegarde intégrale, tapez la commande suivante (prévoyez un café si vous avez beaucoup d’e-mails) :

/usr/bin/getmail -la -r getmail.gmail

Si cette première récupération s’est déroulée sans accrocs, vous pouvez mettre la commande suivante dans un crontab, qui va récupérer uniquement les nouveaux mails sur votre compte :

/usr/bin/getmail -ln -r getmail.gmail

Et voilà, vous n’aurez plus à craindre un tremblement de terre qui ferait imploser tous les datacenters de Google. Vos e-mails sont tous chez vous, et vous pouvez continuer à utiliser l’interface si pratique de Gmail en toute sécurité.

PS : Evidemment cela peut s’adapter à à peu près n’importe quel fournisseur de courrier électronique. J’ai titré Gmail car le patch de getmail était nécessaire pour que ça fonctionne en particulier avec le service de Google.

15 commentaires

Antwan —

J’ai la vague impression que Friedrish t’occupe plus que Maximesh ces temps ci.

Maxime

Avoir un gamin c’est jamais facile :-) Mais je vais m’en sortir !

Skreo

Cool :3

Avant de lancer la sauvegarde, il faut créer le fichier ~/gmail/gmail-backup.mbox :
touch ~/gmail/gmail-backup.mbox

Sinon, cette erreur apparait :
« Configuration error: configuration file /home/$USER/.getmail/getmail.gmail incorrect (path: specified mbox file « /home/$USER/gmail/gmail-backup.mbox » does not exist) »

Maxime

Merci Skreo, j’ai rajouté l’info :)

Dagnan —

Très bon billet, juste une faute « et le problème se résolu » ;)

Maxime

Dagnan : Merci :)

Guillaume

Coucou,
J’ai un compte Google Apps et ça n’a pas l’air de marcher:
SimpleIMAPSSLRetriever:user@domain.tld@imap.gmail.com:993:
getmail.gmail: operation error (IMAP error ([ALERT] Invalid credentials (Failure)))
Une solution ?

Maxime —

@Guillaume : C’est manifestement tes identifiants qui sont invalides. Je ne connais pas les paramètres IMAP à mettre pour Google Apps, vérifie que ce sont les bons :)

Dufy —

C’est pas un peu dommage de laisser son mot de passe gmail en clair dans un fichier texte ? Oui je sais le PC n’est accessible qu’en local, sous linux, derrière un firewall, …. mais bon c’est quand même un peu « non parano » :)

Maxime —

@Dufy : Tu ne mets des droits de lecture que pour ton user et tout ira bien :)

Guillaume

Il y avait en faite deux erreurs. La deuxième : operation error (IMAP error (command SELECT (‘[Gmail]/All Mail’,) returned NO). J’ai remplacé [Gmail]/All Mail’ par [Gmail]/Tous les messages’ et ça marche… Merci!

vincent —

Impossible de le faire tourner, même en m’y reprenant 3 fois mot à mot, ligne ligne …

Maxime —

@vincent : Donne un peu de détails car je ne suis pas omniscient :)

Cédric —

Merci pour cet article, c’est toujours utile car on sais jamais ce que google peut faire du jour au lendemain également avec nos emails… :-)

Par contre, [Gmail]/All Mail ne fonctionne pas si on est en français
On peut mettre mailboxes = (« INBOX »,) ou [Gmail]/Tous les messages
comme le dit guillaume.

Une petite question : une fois que les emails sont stockés au format Mbox, on peut le réimporter sur un autre compte gmail (ou hotmail…) avec getmail ?
Si oui, comment ?

Maxime

@Cédric : Il y a des logiciels sous Linux pour importer un Mbox oui. Je ne sais pas si getmail le fait, mais d’autres s’en chargent très bien :)

Laisser un commentaire

Note : Pour qu'un commentaire soit affiché, votre e-mail doit être valide, et votre texte ne doit pas comporter d'insultes. Si vous ne respectez pas ça, n'essayez même pas de commenter.