Recently, I had some issues with my email provider and it gave me a bit of a scare as I realized that I had taken email for granted and did not have a backup in case things went south. Since my email address is run off of a domain that I own, I can easily switch email providers. However, I use mutt and it does not download all the email bodies in all the folders so I did not necessarily have a local copy of all my emails.
Thus began the hunt for a simple email backup solution and I found it in the form of a really nice python script: imapgrab.py. Note that this script has the following requirements:
- python 2.7.x (does not work with python3, see last paragraph for reference to a new version)
- getmail (on ubuntu,
sudo apt install getmail
)
Once the requiremements are met, simply copy the script over to any folder and execute it as follows:
./imapgrab.py -l -s imap.mail.server -u username -p password
. This will list all available IMAP folders
on the provided server. To download a copy of all mails run the following:
./imapgrab.py -d -v -f ~/user@email.com -s imap.mail.server -S -p 993 -u user@email.com -p password -m "_ALL_,-INBOX.Trash,-INBOX.Spam,-INBOX.Junk,-Trash,-Junk,-Spam"
-d
instructs the script to download the IMAP folders. -f
provides the location to store the
downloaded email. -m
provides instructions as to what to download (here we download everything except the
trash and spam folders). Check out the script itself for more usage parameters.
With this script running, I was able to regularly backup my email and as a bonus, here are the commands to encrypt and decrypt the backed up emails (linux specific):
# create archive
tar -jcvf ~/user@email.com.tar.bz2 ~/user@email.com
# encrypt (could take a while)
gpg -c ~/user@email.com.tar.bz2
# delete original
rm ~/user@email.com.tar.bz2
rm -rf ~/user@email.com
# decrypt
gpg ~/user@email.com.tar.bz2.gpg
# extract
tar -xvf ~/user@email.com.tar.bz2
Once encrypted you can safely store your email archive anywhere on the cloud.
Finally, in order to actually read the emails, you can import the mailboxes in thunderbird or use mutt as I like to
do: mutt -f ~/user@email.com/INBOX.mbox
:).
Note that at the time of writing the script only works with Python 2.7.x but after this article got a bit of tracktion
Christian König fired up a Python 3 version here:
https://github.com/chkgk/imapgrab/. Not all options are fully tested
at the time of writing but basic functions like list
and download
work :).