How to sync a local email storage to IMAP (mutt-friendly)

emailfetchmailimapmutt

Summary

My problem: I want to read email offline with my choice of client (mutt), but I want actions like moving emails, etc. to be kept in two-way snc with an imap server.

My question: Is there a straightforward way to do this while still using standard tools like fetchmail, procmail, etc.?

Details

I have a gmail account. For various reasons – some institutional – I need to be able to read this mail from a mail client; I want my 'inbox' to be clean, much like I would keep it with a traditional local mail setup, and for anything I 'archive' to be searchable. If I move an email to a folder in the web client, I'd like my local inbox to take this into account.

When possible, I want to be able to read this mail from mutt. Previously I used mutt's native imap functionality, but mutt has to make a connection to the server each time you run it; the connection often drops while I'm reading mail and mutt is open in the background; it only keeps a cache of message headers, and loading new messages requires a round-trip to the server; if I send a message, I have to wait for it to be acknowledged over STMP before I can look at any other messages.

Is there some way around this? I don't consider fat clients like Thunderbird to be a solution: I require terminal access, I like to be able to grep my mail, I make good use of procmail's filtering capabilities, and I prefer decoupled systems.

As mentioned above, fetchmail, procmail and sendmail get me almost there – but not quite to being able to keep my activity in sync between clients.

Am I missing something? I've looked at the FreeBSD handbook's section on email and a bunch of blog posts but nothing seems to bring it all together in this way.

By the way, I run Arch Linux and Debian.

Best Answer

OfflineIMAP and isync are both programs that integrate well with mutt and will satisfy your other criteria.

OfflineIMAP is written in Python and isync in C; both are very quick.

Both programs are well documented and straightforward to set up; isync perhaps slightly easier.

There is one significant difference between the functionality of each that is worth bearing in mind: you can use mbsync (isync's executable) to repopulate a remote IMAP maildir1 from a local copy, OfflineIMAP cannot do this. [Amendment: from v6.4.0, OfflineIMAP has the createfolders option to create folders on the remote repository].

The Arch Wiki has pages on both, with example configurations and use cases.2


1. In the event, hypothetically, you inadvertently delete your remote mail store and need to recover from a backup on a local machine...
2. isync and OfflineIMAP.

Related Question