Java Email Server - History

By popular demand (hey, one guy requested it), I figured I should blog a little bit about some of the open source projects I've worked on and give some history, status, and future goals.

I will start with my Java Email Server (JES) project. This post will focus the history of the server. In the future I'll blog about my failed JES 2.0 adventure (and my JBoss foray), and a bit more about the current status and where I see it going.

Just like many other Open Source projects, JES started to 'scratch an itch'. At the time I was running a windows desktop as my 'server' at home, and wanted to host my own email. Being a bit egotistical, I'd registered my name as a domain name (ericdaugherty.com of course), as well as domains for others in my family. I wanted a quick and easy way to host email for multiple domains on single IP address.

I was pretty familiar with Linux at the time and would have likely just run sendmail if I had a Linux box running. But for reasons unimportant to the story my desktop box was Windows, and this was long before Virtual Machines became popular.

So, I set out looking for a solution. As a Java developer, I was interested in finding a solution I could work on myself. I found this in CRSMail. I found the kernel of what I wanted here, but I had a few changes I wanted to make. I reached out and contacted the developer, Calvin. He wasn't really actively working on it and was fine with me forking it to take it in my own direction.

At this point it makes sense to step back and talk about the guiding principal of JES: Simplicity. While I'm not sure this was always the case, early on in the development of JES I realized that this was the right niche. Part of what put me on this path was Apache's JAMES server. I knew that this was a reasonably well regarded server that 'owned' the top of the Java email server market (a niche itself). The issue that I had with it, and that I've heard echoed by others, is that it is overkill for what they wanted. It was too complicated to get it configured for their needs. So this focus on simplicity has guided my development. While I've added features over the years, I've tried to always keep the scope limited so someone could download the tool, open the config file up and get started.

As an example of how this goal manifested itself, one of the areas I focused on was actually removing much of the 'plugability' that the original CRSMail server had. (In fairness I originally did this to get a simple working version. While I based my code on CRSMail, I really rewrote much (all?) of the code base. Part of this was to take advantage of newer APIs, some of it was vanity, and some of it was to cleanup certain issues that existed.) Specifically, I reduced the user store down to a simple file and took out many of the configuration options. To maintain your users, you just open the text file and type in the username and password. The server will hash them when it starts (so you don't store plain text), and you are set. There are no GUI tools to edit it, no fancy plug-ins to a database or LDAP store. Simple and straight forward.

In the end, I believe this focus has been the key to the (modest) success of JES. It is focused on a specific use case, and does it well. There are a limited number of moving parts (not much to break), and while the code has evolved, the majority of it has remained very stable. A few people over the years have taken JES and adopted it to meet their needs. While a pluggable interface is nice, in reality with an Open Source project, it is nearly as easy to just replace or rewrite certain areas to meet your needs.

The early releases were driven by my own personal requirements. With each successive release, I found more and more people were emailing me with ideas, issues, and even CODE! As time went by, I stopped being a user of JES and became a maintainer. I was amazed to see a community build up around my server. While the community wasn't huge, there were some key contributers early on that really kept the application growing and improving. I invite everyone to take a look at the release notes, but want to call specific attention to Siegfried Goeschl, who was the first and longest (he emailed me today!) contributer. It was that first real feedback that made me realize that I had something here that was useful to others. As time went on, releases were driven by other users who found JES useful and had fixes or enhancements to offer back. Thanks all: B0NFiRE, Scott Schrecken, mariusz_grey, Paul Thordarson, Martin Cordova, Shmuel Siegel, Al Lieb, Andrei Makalski, Philippe Reverdy, and Matthew Lohbihler. Wow, as I look back on it I realize how diverse and impressive this list is. Thanks all!

In upcoming posts, I'll talk about my failed JES 2.0 effort, and how that led to my brief stint as a JBoss contributer. I'll also try to post on the current status and future direction for JES.