O caso geral é que para um número de mensagens de e-mail com (N) MB de espaço em disco você precisará de (N) MB espaço em disco para detectar exclusões, mas até (2N) MB de espaço em disco para recuperá-las. p>
Eu uso mbsync
como uma tarefa diária cron
para fazer backup de e-mails do Exchange, com isso como o arquivo .mbsyncrc
:
# See http://www.benfrancom.com/2014/11/24/mutt-offline-with-mbsync/
#
IMAPAccount work
Host outlook.office365.com
User [email protected]
Pass donteventhinkaboutit
# PassCmd "gpg2 -q --for-your-eyes-only --no-tty -d ~/.mailpass.gpg"
UseIMAPS yes
CertificateFile /etc/ssl/certs/ca-certificates.crt
PipelineDepth 5
IMAPStore work-remote
Account work
MaildirStore work-local
Path ~/.mbsync/work/
Inbox ~/.mbsync/work/INBOX
Channel work
Master :work-remote:
Slave :work-local:
Patterns "INBOX" "*"
# Patterns "INBOX" "Other" "Archive" "Drafts" "Deleted Items"
Create Slave
# Remove Slave
Expunge Slave
Sync Pull New ReNew Delete Flags
SyncState *
Com o IMAP, um dos requisitos é que nenhuma mensagem possa ser alterada in situ ; qualquer alteração requer que uma mensagem seja entregue a um novo identificador de arquivo. Isso significa que você pode usar com segurança ln
para replicar o estado atual para um backup antes de uma sincronização com mbsync
:
cd "$HOME/.mbsync"
mkdir -p backup
cp -al work/* backup/
find backup -type f -name '.*' -delete
Após a sincronização, você pode comparar as listas de e-mails assim:
cd "$HOME/.mbsync"
( cd work &&
find . -type f \( -name '.*' -o -printf "%p\t%T+\t%y\t%#m\t%U\t%G\n" \) |
sort
) > work.list
( cd backup &&
find . -type f \( -name '.*' -o -printf "%p\t%T+\t%y\t%#m\t%U\t%G\n" \) |
sort
) > backup.list
comm -3 work.list backup.list
Não seria difícil executar comm -23
e comm -13
para gerar listas de mensagens novas e excluídas e, em seguida, extrair os cabeçalhos From
, To
, Subject
e Date
para cada para criar um relatório.