These fields require us to pass the charset/encoding around, which is error-prone (dealing with a case where it's invalid right now). Instead we should fetch the full part (including the header, not just the body) in
worker/imap/fetch.go and pipe it through go-message.
This is how koushin does it: https://git.sr.ht/~emersion/koushin/tree/ea0626d8060ab10005f29a8e9722ea35f58b0ec4/plugins/base/imap.go#L432
Bonus points to update go-imap's wiki to explain how to do it: https://github.com/emersion/go-imap/wiki/Fetching-messages
For the record, this uncovered a Dovecot bug: https://dovecot.org/pipermail/dovecot/2020-March/118358.html
I still think it'd be a good idea to do what this ticket describes.