Hey all, I'm a long-time mutt user and I'm implementing a read-only IMAP server for public-inbox. It's my first time writing an IMAP server.
I'm seeing mutt still issues plain (MSN) "FETCH" for "BODY.PEEK[HEADER.FIELDS" and it does something with MSNs for its header cache. This is a bit confusing to me, since mutt clearly issues a "UID FETCH 1:$MAX (UID FLAGS)" before the MSN "FETCH", so I know mutt is aware of UIDs. mutt also uses "UID FETCH" for "BODY.PEEK[]" requests... As as server implementor, MSNs are tricky and expensive since they require extra state/storage. A quick look at imap/message.c in mutt makes me think it's the same on the client-side, too ;) public-inbox tries to fake MSNs w/o needing any persistent or per-connection mapping. I got it working well enough so mutt can use its header cache for ~95% of the messages in a ~49K message mailbox I'm testing. The last 5% will be the hard part for the server, I think; so I probably won't bother. Instead, I'm thinking it's better if IMAP clients (mutt included) abandoned MSNs entirely for UIDs. I'm pretty busy with public-inbox as it is; but I could be inclined to work on a patch to rip MSN use out of mutt entirely if I feel like taking a break from public-inbox. I haven't implemented or even looked at the CONDSTORE/QRESYNC stuff, yet. Maybe there's something there... I'm using mutt 1.10.1-2.1 on Debian, but a quick look at mutt.git confirms MSN "FETCH" is still used. Anyways thanks for reading.