En tant que dino de l’internet, j’ai échoué : je ne conserve tous mes mails que depuis... 2001. J’ai égaré la période 1990-2000. Sniff ! Reste qu’avec 6 Go d’archives dans des boîtes, je ne pouvais rien faire — pas même retrouver les infos essentielles dont, parfois, je peux avoir besoin (boudiou mais où est le super lolcat que m’a envoyé ma marraine il y a trois ans ?). J’ai donc décidé de basculer tout ça sur mon compte GMail, en espérant que les ingénieurs de Google seront meilleurs archivistes que moi.
GMail permettant de charger les mails présents sur un ou plusieurs comptes POP3, j’ai donc créé sur ma machine 5 comptes à mon nom pour y mettre mes archives (il en charge environ 200 par compte et par heure).
Mes archives sont au format mbox, stockées dans mon répertoire ~backup/
. Mon serveur POP « local », lui, tournant sous AlternC, demande que les boîtes POP soient au format Maildir, dans les répertoires /var/alternc/mail/f/fil0_{domaine}
à /var/alternc/mail/f/fil4_{domaine}
. Evidemment, il est impossible de balancer les 6 Go d’archives d’un coup dans les répertoires Maildir, car le serveur POP n’accepte pas des boîtes au-delà d’une certaine taille.
Le script move_mbox
fonctionne ainsi : il surveille la taille des 5 répertoires Maildir, et dès qu’il en trouve un dont la taille est descendue au-dessous de 5 Mo, il recopie la plus ancienne boîte d’archives disponible. Lorsque tous les répertoires sont au-dessus de 5 Mo, on s’endort pour 10 minutes, et on recommence. Durant ces 10 minutes le client POP de GMail sera peut-être passé et aura plus ou moins vidé (ou en tous cas fait diminuer) un des 5 Maildir.
Pour convertir mes fichiers mbox
en Maildir, j’utilise mb2md
, disponible dans Debian avec un simple :
# apt-get install mb2md
Et voici le script move_mbox
que j’ai fait pour la migration :
#!/usr/bin/php -q
<?php
$SRC='~/backupmail';
while ($files = glob("$SRC/2*/*/*.gz")) {
$my = false;
$du = explode("\n",`du -s /var/alternc/mail/f/*`);
$du = array_slice($du, 0,5);
foreach($du as $l) {
list($n,$dir) = preg_split(',\s+,', $l);
if ($n < 5 * 1024) {
$my = $dir;
break;
}
}
echo date("D H:i\n");
$box = array_shift($files);
if ($my) {
echo "Saving $box to $my\n";
$tmp = "$SRC/tmp/".basename($box);
$saved = "$SRC/saved/".basename($box);
copy($box, $tmp)
&& rename ($box, '/tmp/mbox.gz')
&& `gunzip /tmp/mbox.gz && mb2md -s /tmp/mbox -d $my/Maildir/ && rm -f /tmp/mbox && mv $tmp $saved`;
} else {
echo "pas de place pour $box\n";
sleep(600);
}
}
echo "fini.\n";
?>
Il suffit ensuite de lancer ce script en ligne de commande :
fil@alternc> php move_mbox
et attendre une quinzaine de jours, que GMail ait aspiré les archives.
Note 1 : de temps à autre, il convient d’aller (avec mutt
par exemple) surveiller les Maildir pour en retirer les virus, que GMail refuse de télécharger, et qui peuvent bloquer le processus en empêchant le répertoire de descendre au-dessous de 5 Mo.
Note 2 : GMail faisant une unicité basée sur le champ Message-Id
des emails, ça ne gêne pas si une partie des messages des archives figurent déjà dans le compte GMail. Ils ne doublonneront pas.
* * *
Evidemment une fois ça fait, j’arrive aux limites de l’espace disponible gratuitement sur GMail. J’ai donc dû débourser 15 € (coût annuel) pour acheter 10 Go d’espace supplémentaire. Quelques captures d’écran, pour les curieux :
- GMail m’annonce que je déborde
- Gestion du volume payant
- Pied de page indiquant le volume occupé
6 Messages de forum