В общем случае для ряда сообщений электронной почты, занимающих (N) МБ дискового пространства, вам потребуется (N) МБ дискового пространства для обнаружения удалений, но до (2N) МБ дискового пространства для их восстановления.
Я использую mbsync
в качестве ежедневного cron
задания для резервного копирования электронной почты из Exchange, с этим .mbsyncrc
файлом:
# See http://www.benfrancom.com/2014/11/24/mutt-offline-with-mbsync/
#
IMAPAccount work
Host outlook.office365.com
User roaima@contoso.com
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 *
В IMAP одним из требований является то, что ни одно сообщение не может быть изменено in situ; любые изменения требуют присвоения сообщению нового идентификатора файла. Это означает, что вы можете безопасно использовать ln
для репликации текущего состояния в резервную копию перед синхронизацией с помощью mbsync
:
cd "$HOME/.mbsync"
mkdir -p backup
cp -al work/* backup/
find backup -type f -name '.*' -delete
После синхронизации вы можете сравнить списки писем следующим образом:
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
Не составит особого труда запустить comm -23
и comm -13
для создания списков новых и удаленных сообщений, а затем извлечь заголовки From
, To
, Subject
и Date
для каждого из них, чтобы создать отчет.