Comment exporter son courriel pour archivage (via protocole IMAP) ? ✉️📦☁️
Comment exporter ses emails à partir d'un compte qui expirera bientôt (Gandi par exemple ou tout autre)
Temps de lecture approximatif: 2 min
Lectorat imaginé :
administrat·eur·rice système en herbe 🌿
collectionn·eur·euse de terminaux 🐚
Mots-dièse: #IMAP #email #sauvegarde #backup
Aujourd’hui, on m’a fait suivre un message d’avertissement concernant le changement de politique de la mise à disposition d’une boîte email par l’un de nos hébergeurs de noms de domaine.
Entendons bien que ces boîtes ne seront plus gratuites très rapidement et qu’une action de notre part est donc requise afin de préserver un historique d’échanges par email.
Ma première réaction aura naturellement été de commencer à m’inquiéter 😬.
En effet, cette nouvelle s’accompagne d’un poids, celui d’avoir à effectuer très certainement
la planification d’une sauvegarde de l’ensemble des arborescences de dossiers contenant des emails pour chacune des boîtes subissant cet impact,
ou encore un ré-import des informations chez un tiers fournisseur de service alternatif et similaire.
Nous avons eu la chance dans notre situation d’être concerné uniquement par le premier point (1.) avec la destinataire du message d’avertissement reçu en provenance d’un hébergeur ayant annoncé l’expiration du service de messagerie (en couverture de cet article).
Aussi je souhaite partager une solution que j’avais oubliée afin de couvrir le sujet de l’extraction des mails (et qui m’aura été suggéré par mon propre historique de terminal 😌) :
history | grep imap
java -Xmx4096m -Xms512m -jar build/libs/imapsize-1.1.1-RELEASE.jar -b
Cette solution inspirée de l’application broobles.com/imapsize/ peut être obtenue depuis github.com/vadimkim/imapsize et elle a été ouverte sous licence MIT (avec l’absence de garanties et risques dont elle s’accompagne) par la figure publique se trouvant derrière le projet : vadimkim.
Cet outil écrit et testé en Java, Imapsize sert à
vérifier la structure d'un dossier de messagerie via protocole IMAP,
d'en calculer la taille,
d'en effectuer une sauvegarde au format mbox
voire également de restaurer cette dernière vers tout serveur supportant IMAP
Comment s’appuyer sur Imapsize afin de sauvegarder son courriel ?
Une fois openjdk installé par exemple,
après avoir construit un fichier binaire (build/libs/imapsize-1.1.1-RELEASE.jar) qu'il nous intéressera d'exécuter en ayant configuré les informations de connexion au serveur de mail qui nous intéresse en suivant les instructions de la documentation succinte et efficace de imapsize, c.a.d en modifiant le fichier ./build/resources/main/mbox.properties :
# \cat build/resources/main/mbox.properties
# javamail api properties
mail.host = mail.gandi.net
mail.store.protocol = imaps
mail.imap.connectionpoolsize = 10
mail.imap.connectionpooltimeout = 30
mail.imap.separatestoreconnection = false
mail.imap.partialfetch = false
mail.debug = false
# imapsize properties
mailbox.domain = mail.gandi.net
mailbox.user = monadresse@example.org
# https://m.xkcd.com/936/
mailbox.password = Un__mot_de_p$sse_relativement_long_ou_F0rT_ou_les2
mailbox.restore.base = backup/org.example/test
mailbox.retry.count = 10
mailbox.ignored.folders = Calendar
on s’assurera que son compte mail est accessible via IMAP
par exemple en activant cet usage depuis webmail.gandi.net/settings/index
on lancera la commande ci-dessus afin de mener une sauvegarde du courriel mis à disposition via le protocole IMAP :
java -Xmx4096m -Xms512m -jar build/libs/imapsize-1.1.1-RELEASE.jar -b
On obtient au terme de l’exécution de cette commande une arborescence sur son système de fichiers reflétant la sauvegarde de ses mails :
tree /var/backups/mail.gandi.net -L 2
/var/backups/mail.gandi.net
└── monadresse@example.org
├── Archives
├── INBOX
└── Sent
5 directories, 0 files
D’autres options peuvent également être passées à l’outil, qu’on découvrira lorsqu’aucun argument est passé à la ligne de commande tel que ci-dessous :
java -Xmx4096m -Xms512m -jar build/libs/imapsize-1.1.1-RELEASE.jar
IMAP mailbox backup/restore util.
Edit build/resources/mbox.properties file before executing commands
NB! Folders with size = 0 are excluded from processing. Calendar folder considered to be unnecessary and also not processed.
BSD License. Written by VK Copyright (c) 2017 EVR Cargo.
-b backup mailbox
-c check mailbox structure and calculate size
-r restore mailbox
--config <filename> Path to mbox.properties file
Pour aller (légèrement) plus loin
En bonus, on pourra
archiver les dossiers ainsi créés avec les commande tar, zip, ou 7zz par exemple et selon son système d’exploitation,
# https://colibris.link/export-courriel-gandi-explain-archivage
# Merci à @Rénald de m'avoir fait découvrir explainshell.com
tar --create --verbose --file ./mail.gandi.net{.tar.gz,}
chiffrer l’archive obtenue avec GPGTools ou GnuPG par exemple 🔐
au moyen d’un script comportant une fonction pour laquelle on pourra définir un alias tel que ci-dessous ou encore suivre un guide pratique d’auto-défense numérique tel que ceux mis à disposition par l’EFF ou d’autres.
#!/usr/bin/env zsh
set -Eeuo pipefail
#
# Exemple d'utilisation
# encrypt_file_at ./mail.gandi.net.tar.gz
# encrypt-by-filepath ./mail.gandi.net.tar.gz
#
encrypt_file_located_at() {
(
local public_key
public_key_fingerprint='UNE CLEF PGP PUBLIQUE'
local file_path
file_path="${1}"
if [ -z "${file_path}" ] || [ ! -f "${file_path}" ]; then
printf 'A %s is required as %s (%s)%s' \
'non-empty string' \
'first argument' \
'encryption target filepath' $'\n'
return 1
fi
gpg --quiet --armor \
--recipient="${public_key_fingerprint}" \
--sign --encrypt \
--output "$file_path.gpg" "$file_path"
if [ $? -eq 0 ]; then
printf 'Encrypted file successfully. 🎉%s' $'\n' 1>&2
else
printf 'Could not encrypt file. 😅%s' $'\n' 1>&2
fi
)
}
alias encrypt-file-located-at='encrypt_file_located_at'
set +Eeuo pipefail
Bien d’autres outils gratuits, libres ou non, aux sources ouvertes, fermées ou propriétaires et plus avancés existent.
On peut en découvrir pléthore depuis un forum de discussion comme serverfault.com (en s'appuyant sur les mots-clefs imap et backup en particulier en particulier les réponses à cette question : How to transfer all emails for a mail account hosted from a server to another server by using IMAP?) :
offlineimap.org (écrit en Python)
larch (écrit en Ruby, et bien que le projet original ne soit plus maintenu, de nombreux variants de larch existent)
Toute remarque et solutions alternatives visant à atteindre des objectifs similaires sont bienvenus !
Je tiens à remercier Rénald Casagraude pour sa propension à partager connaissances et savoir-faire, ainsi que de m’avoir m’aider en relisant cette brève publiée sous licence CC-BY-4.0.