Neverest - Un outil CLI pour synchroniser / sauvegarder vos emails

par Korben -

Vous en avez marre de galérer avec vos anciens emails lorsque vous faites une migration de boite mail ? Et vous rêvez peut-être d’un outil qui vous permettrait de tous les synchroniser, les sauvegarder et même les restaurer en cas de pépin ? Eh bien, j’ai ce qu’il vous faut : Neverest !

Basé sur la librairie email-lib, cet outil en ligne de commande vous permet de :

  • Configurer vos comptes email via un assistant interactif
  • Synchroniser des backend (serveurs ou des répertoires, du style IMAP, Maildir et Notmuch supportés)
  • Filtrer les dossiers et enveloppes à synchroniser
  • Définir des permissions pour chaque backend (créer/supprimer dossier, mettre à jour, etc.)
  • Et sauvegarder et restaurer vos emails

Tout ça en quelques commandes… Pour l’installer, rien de plus simple, il vous faudra juste Cargo :

cargo install neverest

Ou depuis les sources comme ceci :

git clone https://git.sr.ht/~soywod/neverest-cli neverest
cd neverest
cargo check
cargo build --release

Et voilà, vous êtes parés pour synchroniser vos emails comme un pro ! Maintenant que Neverest est installé, il va bien sûr falloir le configurer. Lancez juste la commande neverest et laissez-vous guider par l’assistant.

Ou si vous préférez mettre les mains dans le cambouis, vous pouvez éditer directement le fichier de config TOML. Par défaut, il se trouve dans ~/.config/neverest/config.toml.

Voilà à quoi ça ressemble :

[accounts.korben]

# Le compte `korben` sera utilisé par défaut.
default = true

# Filtrer les dossiers selon les règles données.
#
# folder.filter.include = ["INBOX", "Sent"]
# folder.filter.exclude = ["All Mails"]
folder.filter = "all"

# Filtrer les enveloppes selon les règles données.
#
# envelope.filter.before = "1990-12-31T23:59:60Z"
# envelope.filter.after = "1990-12-31T23:59:60Z"

# Configuration du backend de gauche.
#
# Dans cet exemple, le côté gauche agit comme notre cache local.
left.backend.type = "maildir"
left.backend.root-dir = "/home/korben/mail"

# Permissions du backend de gauche.
#
# Exemple d'un backend entièrement permissif (comportement par défaut) :
left.folder.permissions.create = true
left.folder.permissions.delete = true
left.flag.permissions.update = true
left.message.permissions.create = true
left.message.permissions.delete = true

# Configuration du backend de droite.
#
# Dans cet exemple, le côté droit agit comme notre serveur distant.
right.backend.type = "imap"
right.backend.host = "imap.gmail.com"
right.backend.port = 993
right.backend.login = "[email protected]"

# Mot de passe du backend de droite.
#
# right.backend.passwd.cmd = "echo password"
# right.backend.passwd.keyring = "password-keyring-entry"
right.backend.passwd.raw = "m0td3p4ss3"

# Chiffrement du backend de droite.
#
# right.backend.encryption = "tls" # ou true
right.backend.encryption = "start-tls"
# right.backend.encryption = "none" # ou false

# Permissions du backend de droite.
#
# Dans cet exemple, nous définissons des permissions sûres en refusant les suppressions
# côté distant.
right.folder.permissions.delete = false
right.message.permissions.delete = false

# Alias de dossiers du côté droit
#
# Dans cet exemple, nous définissons des alias de dossiers personnalisés pour le côté
# droit. Ils sont utiles lorsque vous devez mapper les dossiers de gauche et de droite
# ensemble.
right.folder.aliases.inbox = "INBOX"
right.folder.aliases.sent = "Envoyés"

Dans cet exemple, on synchronise les e-mails entre un répertoire local ("/home/korben/mail") et un serveur IMAP distant (“imap.gmail.com”). Le côté gauche (left) représente le cache local où on a tous les droits pour créer, supprimer et modifier des dossiers et des messages.

Le côté droit (right) représente le serveur distant, avec des permissions plus restreintes, notamment l’interdiction de supprimer des dossiers et des messages côté serveur pour éviter les pertes de données. La synchronisation se fait via une connexion chiffrée STARTTLS pour sécuriser les échanges.

Des alias de dossiers sont également définis pour faire correspondre les noms de dossiers locaux et distants. Ça permet donc de disposer d’une copie locale de ses e-mails, tout en les gardant synchronisés avec le serveur distant. Pour les options plus avancées comme les permissions, les aliases de dossiers ou les filtres d’enveloppes, je vous laisse checker la doc.

Maintenant, assez parlé config, passons aux choses sérieuses : la synchronisation ! Avec Neverest, c’est simple comme bonjour. Lancez juste :

neverest sync

Et hop, vos emails sont synchronisés entre vos différents backends.

Autre fonctionnalité cool de Neverest, la possibilité de sauvegarder et restaurer vos emails. Pour ça, on utilise le backend Maildir et pour que cela fonctionne, il faut que l’un des côtés de votre configuration Neverest (gauche ou droite) utilise le backend Maildir. C’est ce backend qui va stocker tous vos emails dans un dossier sur votre ordinateur / serveur, et c’est ce dossier que nous allons sauvegarder.

Voici la config qui va bien :

[accounts.moncompte]
default = true
folder.filter.include = ["INBOX", "Sent"]

left.backend.type = "maildir"
left.backend.root-dir = "/home/utilisateur/mail"

right.backend.type = "imap"
right.backend.host = "imap.monserveur.com"
right.backend.port = 993
right.backend.login = "[email protected]"
right.backend.passwd.raw = "motdepasse"

Ensuite, lancez la synchronisation pour que tous vos emails soient bien enregistrés dans /home/utilisateur/mail :

neverest sync

Et si vous le voulez, vous pouvez les archiver avec tar comme ceci :

tar cvzf sauvegarde-mail-$(date +"%Y-%m-%d").tgz -C /home/utilisateur mail

Et pour les restaurer, il vous suffit de désarchiver le truc et de laisse neverest se resynchroniser :

mv /home/utilisateur/mail /home/utilisateur/old-mail
tar xvzf sauvegarde-mail-2024-05-07.tgz -C /home/utilisateur

N’oubliez pas de re sync ensuite.

A vous de jouer ! Toute la documentation est ici. Et le github est là : Neverest