30 Mar 2025 - by 'Maurits van der Schee'
A while ago I told you about the free email service I'm building that respects privacy and prevents profiling on 103mail.com. The reason? Microsoft and Google operate most of the world's email services and because email messages often contain all previous content, they can profile all people in the world (even people that do not use their services). When using 103mail.com the email (content) will never leave the server. The outgoing email will be replaced with a notification with a link to the web mail viewer. Thus the outgoing mail content can only be viewed over the web and people or servers reading the mail will be logged.
Even though I wanted 103mail.com to be a standard compliant IMAP/SMTP server, but I have changed my mind. I tried to implement it as such, but that showed me all the weirdness of email clients. I think this has to do with the design of the email as a protocol to exchange individual messages. This does not match it's use-case as a protocol to facilitate a conversation between multiple people. Let me illustrate this by giving you some of the many questions that are difficult to answer:
Okay, so I think I have a better model and it is the "chat model" where a conversation is a ongoing message exchange between 2 or more people. This answers the above questions as: yes, not possible (x3), you move the whole thread. Then you get to other questions about mailboxes and folders such as:
You can look at many mail clients and come to the conclusion that although we kind-of know how to work with the system, it is hard to explain. In the "chat model" this is much clearer. The inbox is where new conversations land, there is no such thing as sent-items, but you may search for it (it could be a filter). Messages are in one conversation and a conversation is in one box (and cannot move to another box, as that is related to your identity. It is also in one folder, but it can move from one folder to another (within the box). This means you always see the full thread and folders are not tags. You could also have tags (or colors/flags etc) as some email clients do.
There is a model around global (immutable) threads (to avoid duplication):
g_thread (subject) --[has many]--> g_message (body)
g_message (body) --[has many]--> g_attachment (filename)
g_thread (subject) --[has many]--> g_subscription (email address)
And there is the customer (or user) specific view of these threads:
customer (name) --[has many]--> user (username)
customer (name) --[has many]--> contact (email)
customer (name) --[has many]--> mailbox (email)
mailbox (email) --[has many]--> alias (email)
mailbox (email) --[has many]--> folder (name)
folder (name) --[has many]--> thread (g_thread)
thread (g_thread) --[has many]--> message (g_message)
The name between round brackets the most important property of the table.
Well, I did a lot of work on the email data model (chat model) and I'm planning to open-source it. I'm still working on defining an API for exchanging data in that model. I'm doing this by implementing the API and the first web client on 103mail.com. The first web client and the API are both work-in-progress. You can see what I got so far here:
Reach out if you want to help me build this.
PS: Liked this article? Please share it on Facebook, Twitter or LinkedIn.