Backup your gmail account in Linux/Unix or Mac OS X using getmail

Mac OS X

Vinh Nguyen


April 16, 2010

[gallery] Even though I have utmost trust in Google's data centers (>= 99.9% uptime), I finally decided to backup my gmail account. I am pretty OCD when it comes to backing up my data (bi-weekly backups of my home directory into 3 external hard drives, one of which is in a water/fire-proof safe box; MOST important research-related files in the cloud via dropbox), but I've never backed up my mail archive which holds a lot of valuable information.

I googled it before but never got around to doing it. Finally, I've implemented my backup scheme, thanks to this, this, and this.

The main program that does the work is getmail. To install, issue the following in Debian (apt-get) or Mac OS X (Macports):

## Debian
sudo apt-get install getmail4
## Mac OS X via macports
sudo port install getmail

mkdir ~/.getmail
mkdir ~/Backup/gmail-archive
emacs -q -nw ~/.getmail/

Put the following in "~/.getmail/" (use IMAP and save both an mbox and a maildir version of my gmail account):

type = SimpleIMAPSSLRetriever
server =
username = email.address
password = my.password
mailboxes = ("[Gmail]/All Mail",)
type = MultiDestination
destinations = ('[mboxrd-destination]', '[maildir-destination]')

type = Mboxrd
path = ~/Backup/gmail-archive/gmail-backup.mbox

type = Maildir
path = ~/Backup/gmail-archive/

# print messages about each action (verbose = 2)
# Other options:
# 0 prints only warnings and errors
# 1 prints messages about retrieving and deleting messages only
verbose = 2
message_log = ~/.getmail/gmail.log
# preserves your mail after backup
delete = false
# just get new mails
read_all = false

Note the "read_all" option – without this, getmail downloads multiple versions of the mail and the hard drive will fill. This happened to me!

In the shell, type

touch ~/Backup/gmail-archive/gmail-backup.mbox
mkdir ~/Backup/gmail-archive/tmp ~/Backup/gmail-archive/new ~/Backup/gmail-archive/cur
getmail -r $HOME/.getmail/

To set a cron job for midnight, create the following and place it in cron via "cron -e":
#!/usr/bin/env bash
# Note: -q means fetch quietly so that this program is silent
/usr/bin/getmail -q -r $HOME/.getmail/

chmod u+rx $HOME/Backup/

crontab -e:
00 00 * * * $HOME/Backup/