Victor is a full stack software engineer who loves travelling and building things. Most recently created Ewolo, a cross-platform workout logger.
IMAP email backup

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.

Take my advice - I don't use it :).

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 :).