After much debate I finally decide to switch to Gmail from Thunderbird. The three features that decided me on the switch were:
1) Labels. I’ve been using folders for two decades now. Folders are clearly a browse feature. Labels are (can be?) a search feature. I wanted to experiment with search-based email.
2) A unified address book. Since Gmail is web-based, I no longer have the problem of having my address book be different on every client.
3) Fast startup. I keep a big inbox (just over 6000 messages right now), and the IMAP startup overhead was getting me down.
So far the switch is okay. I’m using the *essential* Gmail macros package so I can enter labels from the keyboard. (I use the version by Brent Nef, which has the wonderful feature of being able to create a new label with the "N" key.) The keybindings Google has chosen are weird, and it’s killing me not to be able to rebind them. The two biggest pains, though, are:
1) Having to hit an extra "x" character to select the message header the caret is on before I can operate on that message. If no other message is selected isn’t it obvious I intend to delete the message the caret is on?!
2) Importing all my old mbox files. I’ve found a couple of programs (Gmail Loader and gExodus) that offer to help with the import. Their solution is a brutal hack: they email the messages one at a time to Gmail. Years ago this was not just a hack, it was a disaster: the messages would update their timestamps when Gmail received them. This problem is improved now, since a diligent user can email them to a secondary Gmail account, and then slurp them into the primary account using Gmail-to-Gmail import. Rumor has it that the import will reset the timestamps.
The problem for me is that the messages will import without labels. Ugh! gExodus has a hack solution: the program will prepend arbitrary text in the subject line. In principle, a user might then write a filter for each incoming mbox file that would assign the appropriate Gmail label to it according to the prepended text. (E.g., [Riedl:Folder:Foo] might be labelled "Foo".) Unfortunately, I have 390 folders (two decades, remember), and as far as I can tell the filters would have to be written separately for each folder (no wildcarding in Gmail filters).
Another possible solution would be to use one of the Gmail APIs. For instance, this Java API is sufficient to write a nearly full-featured desktop email client that uses Gmail as its backend. There are a number of similar Python APIs. Sadly, none of these are support by Gmail, so using them might be risky. Even more sadly, none of the ones I’ve found support assigning labels through the API. Otherwise, I could use the mail trick in gExodus, and have a separate program use the API to assign the labels.