The key is to set it up appropriately. Don't use mutt for downloading your email, especially if you wanna deal with IMAP. Use isync (mbsync) for that purpose (I used to use offlineimap, but it's buggy and not very fast).
There's also notmuch, which I use for indexing my email. It also contains a pretty good email reader.
| I used to use offlineimap, but it's buggy
My favourite bug was when it was blocking on wanting a password, but wasn't accepting input. I had to kill it externally because it wasn't accepting C-\ or C-c.offlineimap is cool, but it is sadly quite slow and crashes often. New releases usually bring as many bugs as they fix.
[1] https://github.com/aroig/offlineimap
[2] The homebrew tap, if that's your thing: https://github.com/jeastman/homebrew-offlineimapwithlabels
[3] [Gmail].Trash and [Gmail].Drafts are also real folders, not just labels. You should sync them too. [Gmail].Sent Mail is just a saved search for /Sent labels. mu4e asks for a "sent" folder but, since you should (setq mu4e-sent-messages-behavior 'delete) anyway with Gmail, it becomes a dummy folder locally, and all is well.
[4] A good config example: https://github.com/pygatea/dotfiles/blob/master/emacs.d/conf...
[1] Some of us want to, you know, use email for longer messages than a tweet. It's hard to do that when PgUp/PgDn are so janky. And don't even get me started on S-PgUp and S-PgDn.