We had our own IMAP server implementation and had all sorts of problems even between different versions of outlook.
Each project had an inbox which you could cc in, resulting in huge inboxes (for the 2000s at least). You could also drag and drop an email you'd received into the project folder to share it with colleagues. And we had mysterious disappearing emails, but only at some clients.
One (of the many) problems I remember is that messages could have an ID, but the spec declared that it could change between sessions, so one version of outlook stored that in a short uint (max 65535) because why would you need more for a temporary id. So have fun if you sent anything more than that. And of course the client had different versions of outlook on different sites so it took ages to even figure out what was happening.
Another was that you had to make several back and forths on every request, messages about the messages, to say the payload and number of messages, but the spec was gleefully vague about the order this should happen in. So back then what worked for one email client resulted in an empty inbox for another.
I don't think we ever got it working properly with Firebird.
(Yes, I once wrote a mobile IMAP client.)
The definition of those terms is quite different of course today, so my statement isn’t meant to contradict yours. I doubt Mark ever saw a laptop, at least when working with imap. Imap was a real step forward at the time.
Some server support only basic IMAP and do not offer QResync and Condstore extensions. So to detect deleted move email you need to select entire email UIDs to see is it still there. A lo of unneeded network call just to fully synchronize client state.
I even do not want to start that some providers like Outlook don't offer UTF8 extension, so the cannot implement a good search for different languages.
Are you talking about the IMAP RFC? It's the worst spec I have ever seen and so many parts are open to interpretation. If you think it's tight it must be because you didn't realized all the ambiguities.
I've spent the last month implementing and testing IMAP support for my app [1].
It has... not been very fun.
Before we were limited to providers with a REST API, so implementing IMAP should in theory allow us to support a much wider range of email servers with a much lower support burden.
Although the protocol spec is tight, it seems like some providers randomly bug out or hang [2], respond with custom error messages, offer bespoke functionality [3], or generally don't comply with the spec in breaking ways [4].
As a result I'm more worried about this going forward than I had hoped.
I'll now also happily support anything that can help modernize email, so I'll apply to the developer program and will be watching JMAP closely.
[1]: https://leavemealone.app/
[2]: Yahoo Mail always down (https://downdetector.com/status/yahoo-mail)
[3]: https://developers.google.com/gmail/imap/imap-extensions
[4]: https://github.com/mscdex/node-imap/issues/775