Per molto tempo ho gestito la posta elettronica con POP. Scaricavo i messaggi sul mio computer e li conservavo lì. Il server serviva a ricevere la posta, non a custodire per anni il mio archivio personale.

È un’impostazione che continuo a preferire: i miei messaggi voglio averli sui miei dispositivi, sotto il mio controllo, non lasciarli indefinitamente su server gestiti da altri. Non perché ogni gestore sia necessariamente inaffidabile, ma perché considero una buona pratica non affidare a terzi più dati del necessario.

Con l’account del lavoro, però, ho dovuto passare a IMAP. Ho quindi adattato la mia configurazione, ma mi sono ritrovato con un comportamento che non mi convinceva: i messaggi venivano scaricati e archiviati sul computer, mentre sul server continuavano ad accumularsi.

Io la posta la voglio in locale. Voglio poterla cercare, leggere e conservare sul mio computer, senza dipendere dal server per consultare il mio archivio. Allo stesso tempo, mi fa comodo leggere un messaggio dal telefono o dalla webmail quando sono fuori casa.

Ho cercato quindi un modo per conciliare queste due esigenze.

Gli strumenti che uso

Gestisco tre account: quello della scuola, quello personale sul mio dominio e quello di Disroot.

Per scaricare la posta uso mbsync, che sincronizza le caselle IMAP con directory locali in formato Maildir. Per leggerla e gestirla uso mu4e dentro Emacs.

In precedenza avevo anche dei filtri lato server che separavano posta ordinaria, mailing list e notifiche. Il problema era che, una volta archiviati localmente i messaggi, le copie continuavano comunque a rimanere sul server.

Il risultato era un archivio locale e, contemporaneamente, una copia sempre più grande della mia posta presso il provider.

Il server come punto di passaggio

Ho quindi semplificato il flusso: tutta la posta arriva nella INBOX del rispettivo account e mbsync sincronizza soltanto quella cartella. Archive, List e Notifications rimangono esclusivamente locali.

Il comportamento è questo:

  1. Un messaggio arriva sul server.
  2. mbsync lo scarica nella INBOX locale.
  3. Posso leggerlo da Emacs, dal telefono o dalla webmail.
  4. Quando lo archivio o lo cestino in mu4e, esce dalla INBOX locale.
  5. Alla sincronizzazione successiva, mbsync rimuove anche la copia dal server.

La lettura non provoca nessuna cancellazione. Un messaggio già letto dal telefono viene comunque scaricato sul computer.

Il principio è semplice:

il server conserva la posta ancora da gestire; il computer conserva l’archivio.

Questo significa anche assumersi la responsabilità dei backup, ma preferisco occuparmi direttamente delle copie dei miei dati piuttosto che considerare il server di qualcun altro come archivio permanente.

Archiviare con un solo comando

Ho spostato anche la classificazione dentro Emacs.

Quando uso il normale comando di archiviazione, mu4e sceglie automaticamente la destinazione:

  • mailing list → List
  • notifiche → Notifications
  • tutto il resto → Archive

Le cartelle rimangono separate per account.

Questo è possibile perché mu4e-refile-folder può contenere una funzione che esamina il messaggio e restituisce la cartella appropriata.

La configurazione di mbsync

Per ciascun account, le direttive centrali sono queste:

Patterns "INBOX"
Sync PullNew PullOld PushGone
Expunge Far
Create Near
SyncState *

Patterns "INBOX" limita la sincronizzazione alla posta in arrivo.

PullNew e PullOld scaricano i messaggi dal server. PushGone propaga verso il server la scomparsa di un messaggio dalla INBOX locale. Expunge Far rende definitiva la rimozione sul lato remoto.

In questo modo, quando archivio un messaggio localmente, la copia resta nel mio Maildir ma viene rimossa dal server.

Non ho invece abilitato la propagazione delle cancellazioni nella direzione opposta: una cancellazione sul server non deve eliminare automaticamente la mia copia locale.

I dettagli delle opzioni sono nel manuale di mbsync.