Java Email Server - Status and Future

I've covered the History of JES, as well as the JES 2.0 branch. This post will cover the current status and future of JES.

In short JES is in maintenance mode. I have no plans to make any significant changes to the JES code base. As I outlined in my first post in this series, I believe JES fits a niche as a very simple and easy to use email server, and the best way to keep it simple is avoid adding features.

For the past several years, nearly all of the improvements to JES have been made by the community. I listed the names in the history post, and these folks really are the drivers to JES today. As new updates come in, I'll check them out and roll them up into a release as appropriate.

As the Sourceforge Download Statistics indicate, JES as popular now as ever, averaging about 1,000 downloads per month. As long as people find JES useful, I'll continue to provide support (primarily through email) and release updates.

I want to thank everyone who has contributed ideas, reported or helped track down bugs, or submitted code. Without your help, JES would not be what it is today.

iTunes Export 1.4 Released - Zune Support

I released a new version of my iTunes Export utility.

iTunes Export exports your iTunes playlists as M3U or WPL files, allowing you to setup playlists in iTunes and use them with other software or devices.

This release adds Zune support. iTunes Export will now export ZPL files. Thanks to Thanks to Jeff Donnici as usual for his continued contributions.

Don't be afraid to suggest new features or bug fixes (

Java Email Server - 2.0 Branch

In my first post of this series, I discussed the history of JES. In this post, I'm going to outline my ill-fated 2.0 branch.

As with many of my projects, the JES 2.0 branch started as a way to explore a shiny new hammer (a new API/tool/framework, etc.). In this case, the shiny new hammer was JMX. I thought it would be neat if you could drop in a mail server to a container such as JBoss, and utilize some of the 'built in goodies' of JMX to manage the server and make updates. One of the drawbacks of how I built JES was that you had to restart it to accomplish many configuration changes. I had thought about a lot of ways to attack the 'restart shortcoming' of JES and I decided it was time to branch off onto a new release track. I decided I should write a modular code base that could be wrapped in many different deployment containers (Standalone, JBoss, etc.).

I started down this path with passion and drive. After I'd completed the SMTP (I think) portion of the code base, I was contacted by Andrew Oliver about my interest in working on a JBoss mail server. He was working on a new project to build an enterprise class mail (and calender, etc) server build on JBoss (where he was employed at the time). This project, JBossMailServer at the time, seemed to eclipse what I was attempting, and given my already slowing momentum on the 2.0 branch, pretty much brought it to a screeching halt. I had a bit of interest in working on the JBoss version, but in truth some of the motivation for the projects that I work on is ego. Working on a project that wasn't 'mine' didn't quite have the same appeal, even if it was JBoss (remember, this was 4 years ago).

Apparently JBoss had found someone interested in the server, as they approached me with an offer to pay me for the task of completing the SMTP (or POP, I don't recall) functionality. Since I was a pretty easy task for me (I'd done it once already), and hey, they were paying me, I jumped on board. I worked through the deliverable they wanted and earned a little spending money.

However, a funny thing happened. Once I'd worked for pay on the project, it was really hard to get excited about working for free. Combine this with the lack of real ego payoff, and I drifted away from the project.

In the mean time, Andy left JBoss and founded a new company to carry the project on. If you are interested you can read more about it here. I have no idea if any of my original code has survived the many releases since I contributed.

I did get to 'brag' about being a JBoss contributor for a time, even if I only ever contributed to the mail server subproject. But the lasting impact of the JBoss foray was that all momentum on JES 2.0 was lost.

That about covers what happened to the 2.0 branch, and why it has never moved forward. In my next post I'll cover the current status and future plans.

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 ( 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.

Zed's Rails Ghetto Rant

I'm not exactly breaking news here, but I've been out of town so you'll have to give me a break. :)

Zed Shaw, of Mongrel fame (RoR web server) recently posted a scathing rant attacking the Rails community in general as well as specific members. The post is actually pretty (REALLY) long, and at the end I'm not sure reading it all was a good investment of my time.

But, I did read it all, so the least I can do is give a quick analysis for you so you can decided whether to dig deeper or take a pass!

Regardless of the accuracy of all of Zed's statements, one thing that is clear to me is the difference between the general perception people have of projects, people, etc. and the actual reality. I think we see this all the time in our own worlds, but we forget that people who achieve notoriety are really no different.

Secondly, I came to realize how little much of this stuff matters. At the end of the day, most people/companies who choose to use Rails (or any framework/technology) will never really get involved deeply enough to care if the (in)famous folks are saints or sinners. They'll just download the tools, browse the docs, and crank out useful code.

The one aspect of his rant, and more importantly Rikard's response, was about how companies (specifically Thoughtworks) were exploiting Rails and what type of communities exist in companies like Thoughtworks. I have several friends who are ex-Thoughtworkers and I'm curious to ask them about their impressions of Zed and Rikard's assessments. I would encourage people to check out these posts and just search for these sections for a quick summary of what I thought were the interesting parts.

Whether this whole tussle is actually worth the time to read or simply a Valleywag'esque distraction is still an open question. Either way, it is too late for me to get the time back.


I've picked up a new hobby, Photography. We (my wife and I) purchased a new Nikon D40 and 18-200 VR lens to get started, and so far we are both really enjoying it.

We previously used a Canon Powershot S500 (5 MP Point and Shoot), and while we took a ton of pictures with it, we were always frustrated with shutter delay. We missed a lot of great shots while the camera metered, focused, and did whatever else it did before it would actually take the shot.

Out of the box just shooting the D40 in full auto mode was much better. The 18-200 lens gives an amazing range of wide/zoom opportunities previously unavailable to us. However, it was when we learned to go beyond the auto mode that we really improved our our results.

One of the keys to helping us learn was the book 'Understanding Exposure' by Bryan Peterson. It walks through the key controls (Aperture, Shutter Speed, and ISO) and provides great examples of what you can achieve and how these controls can be used to archive the 'creatively correct' exposure.

We recently went to Sanibel Island, Florida for vacation and it served as a great opportunity to really exercise the potential of the camera and get some really fun practice time in. By the end we were both able to successfully shoot in full manual mode to achieve the results we wanted.

I've been using Tabblo on the recommendation of a friend to post some of my shots. It is a little more than the basic photo sharing sites as it allows you to create a 'page' of pictures of different sizes and interspersed comments. You can see some of my shots from Sanibel Island below (click images to see full version).

We have a ton to learn but we're looking forward to spending more time and taking many great shots.

Tabblo: Wildlife on Sanibel Island

Tabblo: Sunset on Sanibel Island

No More United Airlines

I'm done with United. I've been frustrated for a while with their deteriorating level of service and frequent flight delays. Unfortunately, due to a previously canceled trip, we had tickets to burn.

We were frustrated before we even reserved our tickets. Instead of being able to fly direct, we had to fly to a nearby city (3 hours away) because the (two) available flights were already booked.

When we got to the airport on the morning of the departure, we found that the flight was delayed due to a delay in the incoming flight. Once they got the plane unloaded, we thought we were on our way. However, they instead informed us that we were changing gates, and that as soon as the current flight at that gate took off, our new plane could come in, unload, get cleaned, inspected, and then load us. We later found out that the gate (and plane) change was due to 'insufficient water' on the plane. Go figure.

The (second) inbound plane was delayed as well, so we ended up waiting a few hours for it to arrive. Once it did, they got it unloaded and ready to go. We finally boarded!

However, once we were all seated and ready to go, we found out that they had incorrectly catered the plane. Yes, we couldn't leave because they didn't have enough Coke and snacks (oh wait, they don't give out snacks) for the return flight. And they couldn't just load the food at our destination airport.

We eventually got the catering figured out and pushed back from the gate. After a fairly smooth flight, we landed and deplaned. I was pleased to see all of our suitcases come around the luggage carousel quickly, until I realized we also checked our car seats. I waited. And waited. And waited.

After a while the United representative came on the PA and notified us that some of the luggage didn't make the flight and would be arriving on the next flight in. Great news, the next flight is only in 1 hour (plus another 1/2 hour to get the bags unloaded).

They offered to messenger the luggage out to us, which would have been great if it weren't our children's car seats. We elected to wait around for the next flight and after some minor lobbying received a couple $8 food vouchers for our inconvenience.

This would be slightly more forgivable if the same thing (delayed luggage) didn't occur on last United flight. I don't fly a lot, so two in a row becomes a pretty big pattern.

Thorough it all, the actual personnel we dealt with were professional, courteous, and good humored. They seem to be good people stuck in a bad system. It almost makes it more frustrating though. They can't just fire a few incompetent people, the entire system appears to be broken.

In the end, we'll be looking to other airlines for our future travel. I'm still a reasonable fan of American although that may just be due to better luck as opposed to better quality. I think we'll end up trying out some of the smaller airlines and seeing if they are more 'with it'. Flying out of Chicago will always be a challenge due to the weather, but it has to get better than this.