Sauvegarde incrémentale et automatisé de votre compte Gmail

Date: 22/08/2012 | Catégories: Blog,Open-source,Planet-libre,Web | Tags: ,

Les prophètes du Web avaient prédit la fin des mails avec l'arrivée des réseaux sociaux. Force est de constater que la messagerie électronique "classique" est toujours bien ancrée dans les moeurs.  Pour une utilisation personnelle, la messagerie GMail de Google fait office de leader sur le marché. J'ai personnellement plus de 3 Go d'archives de mail sur mon compte personnel. Bien que très stable, le service de Google n'est pas à l'abri d'une perte de vos précieux messages. Nous allons donc voir dans ce billet comment conserver une archive locale de votre compte Gmail en utilisant le logiciel libre GetMail. GetMail est distribué sous licence GPL version 2 et il est disponible dans les dépôts des principales distributions GNU/Linux.

La procédure suivante va nous permettre de faire une sauvegarde incrémentale (seul les nouveaux messages sont téléchargés) d'un compte Gmail accessible via le protocole IMAP sur une machine Debian Squeeze (mais la procédure est la même sous Ubuntu).

Installation et configuration initiale de Getmail

On commence par installer le logiciel:

On créé ensuite les sous-répertoires suivants (à adapter à votre configuration):

  • ~/.getmail: va contenir les fichiers de configuration de Getmail (un fichier par compte)
  • ~/backup/gmail: est le répertoire de destination ou la sauvegarde va être faite

En utilisant les commandes suivantes:

On passe ensuite à la création du fichier de configuration (~/.getmail/getmail.gmail) pour notre compte Gmail. Ce dernier doit contenir les lignes suivantes:

Je vous laisse modifier ce fichier avec vos propres informations.

On s'empresse de protéger ce fichier des regards extérieurs:

Comme vous pouvez le voir dans cette même configuration, j'ai choisi d'utiliser le format Mboxrd qui est un standard reconnu par la plupart des logiciels. Getmail doit disposer d'une archive vide avec les bons droits avant de le lancer pour la première fois. On utilise donc la commande suivante pour le satisfaire:

Lancement initial de Getmail

Je vous conseille de faire le premier lancement de Getmail depuis une console pour voir les éventuels messages d'erreurs.

Il est possible, notamment si vous lancé Getmail depuis un serveur n'ayant jamais fait de connexions clientes IMAP vers GMail, que Google bloque l'accès et que Getmail retourne un message du style:

Pour résoudre se problème il faut se connecter sur votre compte Gmail (à partir de n'impote qu'elle machine) puis de cliquer sur le bandeau rouge en haut de l'écran:

Puis de valider votre connexions:

Vous avez alors 10 minutes pour relancer la première commande de ce paragraphe.

Si il n'y a pas d'erreur, alors le téléchargement des fichiers vers votre archive (fichier unique) devrait commencer. vous pouvez aller prendre un café, ou plusieurs, selon la taille de votre compte GMail. Je vous conseille de prévoir un espace disquelégérement supérieur à l'information donnée par Gmail en bas du WebMail (fichier archive de 4 Go pour 3 Go affiché dans Gmail). En effet, l'archivage implique l'ajout d'un "overhead" assez important.

Note: Même depuis mon serveur OVH connecté à 100 Mbps sur Internet, je ne dépasse pas les 1 Mbps lors de l'archivage, surement une limite des serveurs Google et/ou du protocole IMAP.

Automatiser la sauvegarde

"Sauvegarder, c'est bien, automatiser la sauvegarde c'est mieux." [Nicolargo]

Une petite ligne ajoutée à votre crontab système va permettre d'automatiser la sauvegarde incrémentale de votre compte Gmail. Personnellement, je la déclenche toutes les nuits à 1h du matin.

Vous voilà maintenant plus tranquille avec une archive bien à vous de vos (g)mails !

 

  • http://www.johanbleuzen.fr Johan

    Bonjour,
    Article intéressant, mais je me pose deux questions :
    – Quel est l’intérêt de télécharger faire des archives de ces mails lorsque l’on utilise un client lourd ?
    – Combien de temps a-t-il fallu pour faire la prem ière sauvegarde ? Plusieurs jours je suppose non ?

    • http://www.nicolargo.com nicolargo

      - Quel est l’intérêt de télécharger faire des archives de ces mails lorsque l’on utilise un client lourd ?

      => C’est vrai que l’archive est alors présente dans le “cache” du client de messagerie. Par contre je ne sais pas s’il est facile, en cas de perte des messages coté serveur, de ré-injecter les données dans un nouveau serveur.

      – Combien de temps a-t-il fallu pour faire la prem ière sauvegarde ? Plusieurs jours je suppose non ?

      Non seulement quelques heures.

      A+

  • Gregory

    J’utilise mbsync

  • http://knight-galaad.no-ip.org/ Galaad

    Bonjour,

    Existe t il le même genre dastuce mais pour sauvegarder à la fois les Contacts et L’agenda mais de façons automatisé.

    C a dire un genre de “google account takeaway” entièrement automatique.

    Article très interessant. Merci !

    Galaad

    • http://www.nicolargo.com nicolargo

      Pour les contacts je ne sais pas trop comment faire simplement.

      Pour le calendrier c’est plus simple car il est possible de configurer Calendar pour qu’il propose le téléchargement du calendrier au format ICS à travers une URL privé. Il suffit ensuite de faire un Wget sur cet URL. Le billet suivant donne une procédure:

      http://gray-um.com/2010/12/12/backup-your-google-mail-and-calendar-with-linux/

      • http://www.ylneo.com/ Franck Lemarié

        Le protocole syncml est accepté par Google et permet de synchroniser ses contacts avec tous les mobiles acceptant ce protocole. Je l’utilise ainsi avec mon Nokia pour synchroniser mes contacts entre mon mail et mon téléphone. La configuration avec un service comme funambole ne devrait pas être très compliqué…

  • Jean Maisonneuve

    J’obtiens le message suivant:Exception: please read docs/BUGS and include the following information in any bug report:

    getmail version 4.24.0
    Python version 2.7.3 (default, Aug 1 2012, 05:16:07)
    [GCC 4.6.3]

    Unhandled exception follows:
    File “/usr/bin/getmail”, line 434, in main
    f = open(path, ‘rb’)
    IOError: [Errno 13] Permission denied: ‘/home/jejm/.getmail/getmail.gmail’

    Please also include configuration information from running getmail
    with your normal options plus “–dump”.
    après la commande getmail -r

    Aussi je ne pouvais mettre des “/” dans le nom du fichier backup, je les ai replacé par des “-“.

    Merci à l’avance pour votre réponse,

    Jean

    • http://www.nicolargo.com nicolargo

      Le message d’erreur indique un problème pour accéder au fichier de configuration: /home/jejm/.getmail/getmail.gmail

      Il faut vérifier que les droits en lecture sont bien mis pour l’utilisateur qui lance Getmail.

  • Pingback: Sauvegarde incrémentale et automatisé de votre compte Gmail | The Linux Commander | Scoop.it

  • Romain

    Le souci c’est que getmail passe tout les mails non lus en lu ! Comment faire en sorte qu’il ne modifie pas le statut de chaque mail ?

  • Manu

    Excellent, appliqué à une configuration postfix ça semble bien fonctionner aussi.

    Merci ;)

  • http://blog.info16.fr bartounet

    Merci
    Mele principe que fetchmail que j’utilise depuis longtemp

  • http://www.vue-360.com VirtualCed

    Cela m’inspire très fort…
    Je suis en train de revenir de Google Apps que je conseillais alègrement jusqu’à la petite blague qu’à eu un ami : son compte Google Apps fermé. Il n’a aucune idée du pourquoi. Il a contacté par trois fois le support et aucune réponse. En parcourant des forums, il a vu que certains on mis la date de création de leur entreprise comme date de naissance et que Google a fermé leur compte car moins de 13 ans :) Mais lui, ce n’était même pas cela.
    Comme j’ai une quinzaine de domaines avec chacun entre 1 et 6 comptes et que je veux les faire passer sur mon serveur, cela me permettra de récupérer le contenu et de l’importer dans le nouveau système.

    Donc grand merci pour cet article. (sachant que pour mon premier test, je l’ai fait en utilisant Thunderbird pour déplacer du compte Google Apps vers le compte du serveur en iMap et que c’est pas confortable du tout :(

  • Young

    Bonjour,

    J’ai suivi le tutoriel.
    Etant donné que j’utilise la double authentification de google, j’ai autorisé l’application en créant un mot de passe spécifique. Jusque là, pas de problème!
    Lorsque je lance la commande pour le backup, j’ai ce message:

    Delivery error (mboxrd delivery 19857 error (127, mbox delivery process failed (refuse to deliver mail as root)))

    Quelqu’un peut m’aider ?

    • http://www.nicolargo.com nicolargo

      Tu lances la commande en tant que root (ou avec sudo) ?

      • Young

        En tant que root !

        Merci pour la réponse rapide.

        • http://www.nicolargo.com nicolargo

          Essaye de faire la procédure depuis un autre compte, cela devrait fonctionner.

          • Young

            Impeccable, ça marche.
            Merci pour ce tutoriel et la rapidité de la réponse.

  • MichelP

    Merci, ca peut être utile :-)

    Ca me fait penser à une autre alternative, également en ligne de commande et automatisable :
    imapsync, qui synchronise 2 bàl IMAP entre deux serveurs (ou le même si besoin). Très efficace et ca tient en une seule ligne de commande.
    Inconvénient : il faut avoir une seconde bàl pour la “sauvegarde”.
    Avantage : peut sauvegarder sur une bàl imap distante, bàl directement exploitable; et la sauvegarde est également incrémental.

    Pour la vitesse, j’utilise souvent imapsync pour migrer les bàl de mes clients, et j’obtiens sans problème des débits de 4-5 Mbps en provenance de serveurs dédiés gandi, ovh ou autres. L’exemple donné semble indiqué un bridage de gmail.

  • stee

    Bonjour,

    Et pour la restauration, est ce que les mails de Gmail sont lisible par un autre système ?

    Merci pour ce billet

  • Pingback: Visto nel Web – 41 « Ok, panico

  • zobi8225

    J’ai une question, j’utilise beaucoup de libellé / mbox (une 30aine) sur gmail.
    J’ai l’impression que la ligne
    “mailboxes = (“inbox”,)”

    Est ce qu’il y aurait un moyen de sauver toutes les mailbox ?

    Sinon c’est un très bon article , merci encore !

  • Nicolas K.

    Merci pour le tuto. Je suis aussi à la recherche d’un truc du genre pour les contacts, une piste ?

    • http://www.nicolargo.com nicolargo

      Si tu trouves, je suis preneur :)

      • Nicolas K.

        Je crois que j’ai trouvé mon bonheur :
        http://lostpackets.de/pycarddav/

        Je regarde et teste ça ce soir en rentrant chez moi… :-)

        • http://www.nicolargo.com nicolargo

          Cool ! Si tu veux écrire un billet invité tu es le bienvenu :)

          • Nicolas K.

            Bon, pyCardDAV ne faisait pas exactement ce que je voulais… donc je me suis mis en tête de faire mon script Python perso. Sauf que je ne me suis à Python que pour l’occasion, c’est à dire hier ! ^^’

            Donc je bloque un peu à l’exécution du script… il semblerait que j’ai des problèmes d’encodage. Quand je joue avec l’encodage, je me retrouve ensuite avec des erreurs « AttributeError: ‘NoneType’ ».

            Voilà mon script dans en l’état : http://pastebin.com/9Dcxu7KH

          • Nicolas K.

            C’est bon je viens de finaliser mon script, je l’ai édité sur pastebin pour ceux que ça intéresse.

            Il est fonctionnel et permet donc de récupérer tous les contacts du groupe “Mes Contacts”, avec leur(s) adresse(s) mail et leur(s) numéro(s) de téléphone, dans un fichier vCard.

            Je suis OK pour un billet invité si besoin.

    • http://www.nicolargo.com nicolargo

      Peux être une piste de ce coté pour la récupération des contacts: http://googlesystem.blogspot.fr/2012/09/google-contacts-sync-using-carddav.html

      • Nicolas K.

        Je viens aussi de voir passer cette news (^_^) et je cherche désespérément un client CardDAV en lignes de commande pour pouvoir récupérer ça simplement… :-(

  • wanalargo

    Très bonne initiative! Pas tous ses oeufs dans le même panier …
    Deux réserves (je ratiocine sans doute):
    1.Peut on échapper à Google ?
    2.Les sauvegardes locales sont soumises aux aléas perte, corruption des données, vol, incendie…
    ((Le format des sauvegardes sera-t-il encore lisible dans quelques années ?))

    Je sais que l’auto hébergement à la maison n’est pas une bonne idée, coût maintenance (risque évoqué ci dessus), mais un hébergement sur serveur partagé prend de l’ intérêt …Il faut payer certes, mais la tranquilité a un prix …Et on est chez soi…

    Quelle que soit l’interface utilisée, la plupart des fournisseurs de mail ne sécurisent pas les serveurs…Indice de confidentialité de 0 à 3 sur 10 pour les les meilleurs (dont gmail !)…
    Alors on m’ objectera que l’on peut coder son mail, mais qui s’en préoccupe aujourd’hui…

  • Idhren

    Hello,

    Je ressort ce billet de sa petite tombe, et tout d’abord, merci pour ces infos.

    Petite question qui me trotte, et il faudra peut être passer par un autre outil que Getmail pour ça, mais, est-il possible de garder l’arborescence/libellé dans l’archive ?

    En suivant ton tuto, et avec mailboxes = (“[Gmail]/Tous les messages”,) on sauvegarde bien TOUT, mais tout est en vrac dans le .mbox. Si on pouvait au moins avoir la séparation entre les mails reçu et envoyé ça serait magique :)
    Reste la solution de faire un .mbox et un process par dossier… mais ça peut vite devenir trop lourd.

    Je regardé fetchmail rapidement, mais pas l’impression qu’il puisse gérer ça … J’aimerai bien me passer du bon vieux GmailBackup, mais c’est moins “sympa”.