Ha, okay. I'm going to include actual emails in "the email protocol", because if you just count the network protocols you're not doing anything useful. Emails are anything but simple. They were born in the early days of the Internet, and no doubt time and the impossibility of predicting the future is responsible for how things turned out — but they are anything but simple.
Email messages are ASCII only. You can put non-ASCII characters into a header however. It looks like this:
Subject: =?UTF-8?B?SMOpbGzDtOKApgo=?=
Writing a parser for this is an unnecessary challenge in this day. (If you ever need to do email, for parsing or outputting, get a library.) Watching a coworker unwilling to take the time to the read the RFC try to write a parser for this… is a very special hell.¹The body also has to be ASCII, so just about every email client out there has to do:
Content-Transfer-Encoding: base64
And then encode the body in base64, wasting space and network bandwidth. Technically, you can send full 8-bit message bodies, but the sender and receiver have to agree ahead of time. Either GMail doesn't support it, or it just doesn't bother even when the email destinations are all GMail. (Or, it could be because some IMAP client might get the message, and not support it.)There's also that every message has a text version and an HTML version — hopefully semantically similar — but HTML support in email clients (at least the big ones) is terrible. (see for example http://www.email-standards.org/ ) You'll think support is great on the web after you're done.
I've not covered un-wrapping headers. Or the things people think aren't valid email addresses. (Your average Joe thinks [a-zA-Z0-9]+@<a domain name> matches all valid emails. Oh, and that they're case insensitive too.) Or IMAP. Or encryption. Or even whether email gets encrypted while on the wire from Hotmail to Comcast.
> Slack pretends to be “an email killer”
I'm not sure they're out to kill all emails… just the ones that would be better as a real-time communication.
¹Don't test your library's output email on Gmail, either. Gmail is creepy good at correcting bad input. "It works on Gmail" != it's correct.
I do wish I could send restructured text emails and have the client just render them. In theory, email has everything I need. Clients just need to support it, that's all. I'll admit, that is kinda cool.